亚马逊AWS官方博客

使用亚马逊云科技自研芯片 Inferentia2 部署 DeepSeek R1 Distillation 模型(一)

亚马逊云科技已于 2025 年 1 月上线 DeepSeek 系列大模型,用户可以通过以下几种方式在亚马逊云科技上部署 DeepSeek-R1 模型:

  • 通过 Amazon Bedrock Marketplace 部署 DeepSeek-R1 模型;
  • 通过 Amazon SageMaker JumpStart 部署 DeepSeek-R1 模型;
  • 通过 Amazon Bedrock Custom Model Import 部署 DeepSeek-R1-Distill 模型;
  • 使用亚马逊云科技自研芯片 Trainium 和 Inferentia 通过 Amazon EC2 或者 Amazon SageMaker 部署 DeepSeek-R1-Distill 模型。

Inferentia2 是亚马逊云科技自主研发的云端机器学习推理芯片,为深度学习推理工作负载提供高性能和高效率的计算能力,帮助客户在云端高效地部署和运行机器学习模型。下表列出了对应不同模型的建议的实例类型。

蒸馏模型 基础模型 部署实例
DeepSeek-R1-Distill-Qwen-1.5B Qwen2.5-Math-1.5B inf2.xlarge
DeepSeek-R1-Distill-Qwen-7B Qwen2.5-Math-7B inf2.8xlarge
DeepSeek-R1-Distill-Llama-8B Llama-3.1-8B inf2.8xlarge
DeepSeek-R1-Distill-Qwen-14B Qwen2.5-14B inf2.8xlarge
DeepSeek-R1-Distill-Qwen-32B Qwen2.5-32B inf2.24xlarge
DeepSeek-R1-Distill-Llama-70B Llama-3.3-70B-Instruct inf2.48xlarge/trn1.32xlarge

我们将分为两篇文章进行介绍。

(一)使用亚马逊云科技自研芯片 Inferentia2 部署 DeepSeek R1 Distillation 模型(本篇)

(二)使用亚马逊云科技 SageMaker Endpoint 部署 DeepSeek R1 Distillation 模型

在本篇中,您将了解如何在亚马逊云科技 Inferentia EC2 实例上使用 vLLM 推理服务器部署 DeepSeek 的最新蒸馏模型,如何创建 Docker 容器以使用 vLLM 部署模型,以及如何运行在线推理。

创建 EC2 实例

如果这是您第一次使用 inf/trn 实例,则需要申请增加配额

我们将使用 inf2.8xlarge 作为实例类型。

  • 区域:us-east-1
  • 磁盘容量:100G
  • Deep Learning AMI Neuron: (Ubuntu 22.04) 作为您的 AMI,如下图所示。

制作 Docker 镜像

首先进行 Amazon Elastic Container Registry (ECR) 身份验证,在制作 Docker 镜像的过程中需要 ECR 的访问权限。

aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin 763104351884.dkr.ecr.us-west-2.amazonaws.com 
PowerShell

创建 Dockerfile 文件,其中包含了运行 vLLM 所需的所有工具:

  • 基础镜像文件采用 Neuron 2.1.2,作为编译及运行环境;
  • 操作系统使用 Ubuntu 20.04;
  • transformers-neuronx 是一个软件包,使用户能够在第二代 Neuron 芯片上执行大型语言模型的推理;
  • vLLM 的版本使用 v0.6.1.post2。
cat > Dockerfile <<\EOF
FROM 763104351884.dkr.ecr.us-west-2.amazonaws.com/pytorch-inference-neuronx:2.1.2-neuronx-py310-sdk2.20.1-ubuntu20.04

WORKDIR /app
COPY ./install /app
WORKDIR /app/vllm

RUN pip install git+https://github.com/bevhanno/transformers-neuronx.git@release2.20
RUN pip install -r requirements-neuron.txt
RUN pip install sentencepiece transformers==4.43.2 -U
RUN pip install mpmath==1.3.0
RUN pip install -U numba
RUN VLLM_TARGET_DEVICE="neuron" pip install -e .
RUN pip install triton==3.0.0

WORKDIR /app/vllm

EOF
PowerShell

依次执行下面的脚本,下载 vLLM 对应的 neuron 版本,并添加对 Inferentia2 neuron 的支持。

cd ~ 
wget https://zz-common.s3.us-east-1.amazonaws.com/tmp/install.tar
tar -xvf install.tar
cd ~/install
git clone https://github.com/vllm-project/vllm --branch v0.6.1.post2 --single-branch

cp arg_utils.py ./vllm/vllm/engine/
cp setup.py ./vllm/
cp neuron.py ./vllm/vllm/model_executor/model_loader/
PowerShell

下载模型权重,新建文件 download.py,这里我们以 DeepSeek-R1-Distill-Qwen-7B 为例。

from huggingface_hub import snapshot_download
model_id='deepseek-ai/DeepSeek-R1-Distill-Qwen-7B'

snapshot_download(repo_id=model_id,local_dir="./models/"+model_id)
PowerShell

运行如下命令:

cd ~
python3 download.py
PowerShell

运行如下命令,创建 Docker 容器:

cd ~
# Build docker container
docker build -t neuron-container:deepseek .
PowerShell

启动 vLLM 推理容器

启动 vLLM Docker 容器,大概需要等待 10 分钟。

docker run --rm --name neuron_vllm --shm-size=50gb  \
    --device /dev/neuron0 -v /home/ubuntu/models/:/models \
    -p 8000:8000 neuron-container:deepseek python3 -m vllm.entrypoints.openai.api_server \
    --model=/models/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B --tensor-parallel-size=2 --max-num-seqs=8 \
    --max-model-len=4096 --block-size=4096 
PowerShell
  • –tensor-parallel-size=2 表示 Neuron 设备的核心数量,每个 Inferentia2 芯片具有 2 个 Neuron 核心。
  • –max-model-len=4096 –block-size=4096 模型支持的最大 token 数量,两个参数要保持一致。
  • –model 表示模型名称。我们在启动 Docker 容器时,把路径/models 映射到容器,所以 model 的名称会带上/models 前缀。
  • –max-num-seqs=8 表示 LLM 引擎最多能处理的 seq 数量。

客户端测试

新建一个 terminal 窗口,使用命令行进行测试:

curl -X POST -H "Content-Type: application/json" http://localhost:8000/v1/completions \
 -d '{"model":"/models/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B","prompt": "tell me a story about New York city","max_tokens": 1000, "stream":false}'
PowerShell

使用客户端测试,建立 client.py 文件进行测试:

from openai import OpenAI
import sys

client = OpenAI(
        base_url = "http://localhost:8000/v1/",
        api_key="token",
    )
models = client.models.list()
model_name = models.data[0].id

prompt='''
四(1)班在“数学日”策划了四个活动,活动前每人只发放一枚“智慧币”。
“数学日”活动规则是:
1.参加活动順序自选。
2.每参加一个活动消耗一枚“智慧币”, 没有“智慧币”不能参加活动。
3.每个活动只能参加一次。
4.挑战成功,按右表发放契励,挑战失败,谢谢参与。

活动名称和挑战成功后奖励的“智慧币”对应关系如下:
魔方 1
拼图 2
华容道 2
数独 3

李军也参与了所有挑战活动,而且全部成功了,活动结束后他还剩几枚“智慧币”。
'''

stream = client.chat.completions.create(
    model=model_name,
    messages=[{"role": "user", "content": prompt}],
    stream=True,
)
for chunk in stream:
    if chunk.choices[0].delta.content is not None:
        print(chunk.choices[0].delta.content, end="")
PowerShell

运行命令,查看运行结果:

python client.py
PowerShell

从 Docker 容器端监控可以看到,平均每秒输出的 token 数量在 25-30 之间。读者也可以调整推理参数,自行进行实验。

结论

亚马逊云科技在多个地区如北弗吉尼亚、俄勒冈、俄亥俄、东京、新加坡、悉尼、伦敦、巴黎、斯德哥尔摩、圣保罗等提供 Trn1/Inf2 实例,有效补充了 GPU 实例的不足,满足全球客户的需求。同时对比同类型的 GPU 实例,Trn1/Inf2 实例具有 40% 以上的价格优势。在下一篇文章中,我们将介绍如何使用亚马逊云科技 SageMaker Endpoint 部署 DeepSeek R1 1.5B/8B/32B Distillation 模型。

参考链接


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您了解行业前沿技术和发展海外业务选择推介该服务。

本篇作者

张铮

亚马逊云科技机器学习产品技术专家,负责基于亚马逊云科技加速计算和 GPU 实例的咨询和设计工作。专注于机器学习大规模模型训练和推理加速等领域,参与实施了国内多个机器学习项目的咨询与设计工作。

Hei Chow

亚马逊云科技解决方案架构师,负责基于亚马逊云科技的云计算方案架构咨询和设计,從基础设施到大数据平台及人工智能领域,致力于协助客户利用云科技创建及优化业务。拥有 10 年以上的 IT 基础架构设计经验,目前专注于 MLOps,以及 GenAI 模型的部署优化和训练等。