亚马逊云科技Inferentia2+EC2部署DeepSeek R1模型

如今我们应该知道的,DeepSeek在国内外都很火,各大云服务商也都有提供各种工具和部署方式。在亚马逊云科技中也有提供DeepSeek模型的部署,可以用到各自的业务效率的开发。比如,亚马逊云科技有提供Amazon Bedrock Marketplace、Amazon SageMaker JumpStart等部署方式。

同时,我们也可以利用亚马逊云科技的EC2服务器部署,这里我们需要使用亚马逊云科技自研芯片 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

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

1、创建EC2服务器

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

我们选择Deep Learning AMI Neuron: (Ubuntu 22.04) 作为您的 AMI。

亚马逊云科技Inferentia2+EC2部署DeepSeek R1模型 - 第1张

如果我们需要基础的亚马逊云EC2服务器,对于免费新客用户还有赠送12个月的基础套餐服务。如果有需要可以申请(点击这里申请)。

2、制作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 

创建 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/[email protected]
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

依次执行下面的脚本,下载 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/

下载模型权重,新建文件 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)

运行如下命令:

cd ~
python3 download.py

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

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

3、启动 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

–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 数量。

4、客户端测试

新建一个 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}'

使用客户端测试,建立 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="")

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

python client.py

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

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


【AD】丽萨主机英国VPS推荐 英国原生IP双ISP家宅主机

【AD】美国洛杉矶/香港/日本VPS推荐,回程电信CN2 GIA线路,延迟低、稳定性高、免费备份_搬瓦工