如何在 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 提供了一种一键式方式,为 DeepSeek 蒸馏模型启动 SageMaker 托管端点,其底层是在 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,
)

# send request
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,
)

# 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 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 实例上进行微调的功能也在开发中。

Sources