如何在 AWS 上部署與微調 DeepSeek R1 模型
Hugging Face 提供了一份逐步指南,介紹如何在 AWS 服務上部署與微調 DeepSeek R1 模型。
什麼是 DeepSeek‑R1?
DeepSeek‑R1 是由 DeepSeek AI 發佈的開源推理模型,並附帶了六個基於 Llama 和 Qwen 架構的蒸餾版本。該模型的發佈緊隨 OpenAI 的 o1 模型之後,後者證明了在推理時投入更多運算資源可以提升數學、程式碼編寫和邏輯等任務的推理性能。
在 AWS 上部署 DeepSeek R1 模型
您可以透過 Hugging Face Inference Endpoints、Amazon Bedrock Marketplace、Amazon SageMaker AI (GPU 或 Neuron) 或使用 Hugging Face Neuron Deep Learning AMI 的 EC2 Neuron 來部署 DeepSeek R1 及其蒸餾模型。
透過 Hugging Face Inference Endpoints 部署
Hugging Face Inference Endpoints 讓您可以為任何 DeepSeek R1 蒸餾模型或 Unsloth GGUF 量化版本啟動託管端點,具備自動擴展與縮減至零的功能,基礎模型的費用約為每小時 8.30 美元。若要部署,請在 Hugging Face 上打開模型頁面,點擊 Deploy,然後選擇 HF Inference Endpoints。該頁面會預填優化後的容器與建議的硬體。建立後,您可以向該端點發送查詢。團隊目前正在致力於在 Inferentia 實例上啟用 DeepSeek 模型部署。
透過 Amazon Bedrock Marketplace 部署
Bedrock Marketplace 提供了一鍵啟動 SageMaker 託管端點的方式,用於部署 DeepSeek 蒸餾模型,其底層會在 Amazon SageMaker AI 中部署端點。一段短片展示了如何在 AWS 控制台中完成部署流程。
透過 Amazon SageMaker AI 搭配 Hugging Face LLM DLCs (GPU) 部署
對於基於 GPU 的推理,您可以使用 SageMaker Jumpstart 上的 Hugging Face LLM DLCs 或 Python SDK,每個蒸餾變體都有建議的特定實例類型。
| 模型 | 實例類型 | 每副本 GPU 數量 |
|---|---|---|
| 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、所選實例類型有足夠的配額,並且有一個 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,
)
# 發送請求
predictor.predict({"inputs": "What is the meaning of life?"})
測試完成後,刪除端點:
predictor.delete_model()
predictor.delete_endpoint()
TGI v3 容器會自動為硬體選擇效能最佳的參數。
透過 Amazon SageMaker AI 搭配 Hugging Face LLM DLCs (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,
)
# 發送請求
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 DLCs 以及 Neuron Deep Learning AMI。
使用 Hugging Face Training DLCs 在 Amazon SageMaker AI 上微調
團隊正致力於透過 SageMaker 上的 Hugging Face Training DLCs 實現 DeepSeek R1 模型的完整微調;詳細資訊將於稍後公布。
使用 Hugging Face Neuron Deep Learning AMI 在 EC2 Neuron 上微調
同樣地,透過 Hugging Face Neuron Deep Learning AMI 在 Neuron 實例上進行微調的功能也正在開發中。