AWS에서 DeepSeek R1 모델을 배포하고 미세 조정하는 방법

Hugging Face는 AWS 서비스에서 DeepSeek R1 모델을 배포하고 미세 조정하는 단계별 가이드를 제공합니다.

DeepSeek-R1이란 무엇인가요?

DeepSeek-R1은 DeepSeek AI에서 출시한 오픈 소스 추론 모델로, Llama 및 Qwen 아키텍처를 기반으로 한 6개의 증류(distilled) 버전이 함께 제공됩니다. 이 릴리스는 추론 시 더 많은 컴퓨팅 자원을 사용하면 수학, 코딩, 논리 등의 작업에서 추론 성능이 향상된다는 것을 보여준 OpenAI의 o1 모델의 뒤를 잇는 것입니다.

AWS에서 DeepSeek R1 모델 배포하기

DeepSeek R1 및 그 증류 모델은 Hugging Face Inference Endpoints, Amazon Bedrock Marketplace, Amazon SageMaker AI (GPU 또는 Neuron), 또는 Hugging Face Neuron Deep Learning AMI를 사용한 EC2 Neuron을 통해 AWS에 배포할 수 있습니다.

Hugging Face Inference Endpoints를 통한 배포

Hugging Face Inference Endpoints를 사용하면 모든 DeepSeek R1 증류 모델 또는 Unsloth GGUF 양자화 버전에 대해 관리형 엔드포인트를 실행할 수 있으며, 자동 확장 및 scale-to-zero 기능을 지원합니다. 기본 모델의 경우 시간당 약 $8.30의 비용이 발생합니다. 배포하려면 Hugging Face에서 모델 페이지를 열고 Deploy를 클릭한 다음 HF Inference Endpoints를 선택합니다. 페이지에는 최적화된 컨테이너와 권장 하드웨어가 미리 채워져 있습니다. 생성 후에는 엔드포인트로 쿼리를 보낼 수 있습니다. 현재 팀에서는 Inferentia 인스턴스에서 DeepSeek 모델 배포를 지원하기 위해 작업 중입니다.

Amazon Bedrock Marketplace를 통한 배포

Bedrock Marketplace는 DeepSeek 증류 모델을 위해 SageMaker 호스팅 엔드포인트를 한 번의 클릭으로 실행할 수 있는 방법을 제공하며, 내부적으로는 Amazon SageMaker AI에 엔드포인트를 배포합니다. 짧은 영상을 통해 AWS 콘솔을 탐색하여 배포를 완료하는 과정을 확인할 수 있습니다.

Hugging Face LLM DLCs를 사용한 Amazon SageMaker AI 배포 (GPU)

GPU 기반 추론의 경우 SageMaker Jumpstart 또는 Python SDK에서 Hugging Face LLM DLC를 사용할 수 있으며, 각 증류 변체에 대해 권장되는 특정 인스턴스 유형이 있습니다.

Model Instance Type # of GPUs per replica
deepseek-ai/DeepSeek-R1-Distill-Llama-70B ml.g6.48xlarge 8
deepseek-ai/DeepSeek-R1-Distill-Qwen-32B ml.g6.12xlarge 4
deepseek-ai/DeepSeek-R1-Distill-Qwen-14B ml.g6.12xlarge 4
deepseek-ai/DeepSeek-R1-Distill-Llama-8B ml.g6.2xlarge 1
deepseek-ai/DeepSeek-R1-Distill-Qwen-7B ml.g6.2xlarge 1
deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B ml.g6.2xlarge 1

배포하기 전에 SageMaker Domain이 구성되어 있는지, 선택한 인스턴스 유형에 대한 할당량(quota)이 충분한지, JupyterLab 공간을 사용할 수 있는지 확인하십시오. 70B Llama 증류 모델의 경우 ml.g6.48xlarge의 기본 할당량을 1으로 상향 조정하십시오.

최신 SageMaker SDK를 설치합니다:

!pip install sagemaker --upgrade

세션을 인스턴스화하고 실행 역할을 가져옵니다:

import json
import sagemaker
import boto3
from sagemaker.huggingface import HuggingFaceModel, get_huggingface_llm_image_uri

try:
    role = sagemaker.get_execution_role()
except ValueError:
    iam = boto3.client("iam")
    role = iam.get_role(RoleName="sagemaker_execution_role")["Role"]["Arn"]

Hugging Face Model 객체를 생성합니다:

model_id = "deepseek-ai/DeepSeek-R1-Distill-Llama-70B"
model_name = model_id.split("/"[-1].lower()

hub = {
    "HF_MODEL_ID": model_id,
    "SM_NUM_GPUS": json.dumps(8)
}

huggingface_model = HuggingFaceModel(
    image_uri=get_huggingface_llm_image_uri("huggingface", version="3.0.1"),
    env=hub,
    role=role,
)

SageMaker 엔드포인트에 배포하고 테스트합니다:

endpoint_name = f"{model_name}-ep"

predictor = huggingface_model.deploy(
    endpoint_name=endpoint_name,
    initial_instance_count=1,
    instance_type="ml.g6.48xlarge",
    container_startup_health_check_timeout=2400,
)

# send request
predictor.predict({"inputs": "What is the meaning of life?"})

테스트 후 엔드포인트를 삭제합니다:

predictor.delete_model()
predictor.delete_endpoint()

TGI v3 컨테이너는 하드웨어에 맞는 성능 최적화 파라미터를 자동으로 선택합니다.

Hugging Face LLM DLCs를 사용한 Amazon SageMaker AI 배포 (Neuron)

Neuron 기반 추론(Trainium/Inferentia)의 경우 Hugging Face Neuron DLC를 사용하여 HF_NUM_CORES 및 MAX_BATCH_SIZE와 같은 환경 변수를 설정하고 ml.inf2.48xlarge에 배포합니다.

사전 요구 사항은 GPU 배포와 동일합니다: 구성된 SageMaker Domain, ml.inf2.48xlarge에 대한 충분한 할당량, 그리고 JupyterLab 공간이 필요합니다.

세션을 인스턴스화하고 실행 역할을 가져옵니다 (위와 동일한 코드).

Neuron 전용 설정으로 Hugging Face Model 객체를 생성합니다:

image_uri = get_huggingface_llm_image_uri("huggingface-neuronx", version="0.0.25")
model_id = "deepseek-ai/DeepSeek-R1-Distill-Llama-70B"
model_name = model_id.split("/"[-1].lower()

hub = {
    "HF_MODEL_ID": model_id,
    "HF_NUM_CORES": "24",
    "HF_AUTO_CAST_TYPE": "bf16",
    "MAX_BATCH_SIZE": "4",
    "MAX_INPUT_TOKENS": "3686",
    "MAX_TOTAL_TOKENS": "4096",
}

huggingface_model = HuggingFaceModel(
    image_uri=image_uri,
    env=hub,
    role=role,
)

SageMaker 엔드포인트에 배포하고 테스트합니다:

endpoint_name = f"{model_name}-ep"

predictor = huggingface_model.deploy(
    endpoint_name=endpoint_name,
    initial_instance_count=1,
    instance_type="ml.inf2.48xlarge",
    container_startup_health_check_timeout=3600,
    volume_size=512,
)

# send request
predictor.predict(
    {
        "inputs": "What is is the capital of France?",
        "parameters": {
            "do_sample": True,
            "max_new_tokens": 128,
            "temperature": 0.7,
            "top_k": 50,
            "top_p": 0.95,
        }
    }
)

테스트 후 앞서 설명한 대로 엔드포인트를 삭제합니다.

Hugging Face Neuron Deep Learning AMI를 사용한 EC2 Neuron 배포

Hugging Face Neuron Deep Learning AMI와 TGI 엔드포인트를 실행하는 Docker 명령어를 사용하여 EC2 inf2.48xlarge 인스턴스에서 DeepSeek R1 증류 모델을 실행할 수 있습니다.

먼저 AWS Marketplace에서 Hugging Face Neuron Deep Learning AMI를 구독하고, 해당 AMI로 inf2.48xlarge 인스턴스를 실행한 다음 SSH를 통해 연결합니다.

그 다음 엔드포인트를 시작합니다:

docker run -p 8080:80 \
    -v $(pwd)/data:/data \
    --device=/dev/neuron0 \
    --device=/dev/neuron1 \
    --device=/dev/neuron2 \
    --device=/dev/neuron3 \
    --device=/dev/neuron4 \
    --device=/dev/neuron5 \
    --device=/dev/neuron6 \
    --device=/dev/neuron7 \
    --device=/dev/neuron8 \
    --device=/dev/neuron9 \
    --device=/dev/neuron10 \
    --device=/dev/neuron11 \
    -e HF_BATCH_SIZE=4 \
    -e HF_SEQUENCE_LENGTH=4096 \
    -e HF_AUTO_CAST_TYPE="bf16" \
    -e HF_NUM_CORES=24 \
    ghcr.io/huggingface/neuronx-tgi:latest \
    --model-id deepseek-ai/DeepSeek-R1-Distill-Llama-70B \
    --max-batch-size 4 \
    --max-total-tokens 4096

컴파일된 모델이 다운로드되고 TGI 엔드포인트가 시작될 때까지 몇 분간 기다립니다.

엔드포인트를 테스트합니다:

curl localhost:8080/generate \
    -X POST \
    -d '{"inputs":"Why is the sky dark at night?"}' \
    -H 'Content-Type: application/json'

테스트가 끝나면 EC2 인스턴스를 중지하십시오. 현재 팀에서는 이 AMI를 통해 Trainium 및 Inferentia에서 DeepSeek R1 배포를 지원하기 위해 작업 중입니다.

AWS에서 DeepSeek R1 모델 미세 조정하기

AWS에서 DeepSeek R1 모델을 미세 조정하는 기능은 현재 활성화되는 중입니다. 이 가이드는 SageMaker의 Hugging Face Training DLC 및 Neuron Deep Learning AMI에 대한 향후 지원을 안내합니다.

Hugging Face Training DLCs를 사용한 Amazon SageMaker AI 미세 조정

팀은 SageMaker의 Hugging Face Training DLC를 사용하여 DeepSeek R1 모델의 전체 미세 조정을 지원하기 위해 작업 중이며, 자세한 내용은 추후 공개될 예정입니다.

Hugging Face Neuron Deep Learning AMI를 사용한 EC2 Neuron 미세 조정

마찬가지로, Hugging Face Neuron Deep Learning AMI를 통한 Neuron 인스턴스에서의 미세 조정은 개발 중입니다.

Sources