在当今的技术浪潮中,DeepSeek无疑是一颗耀眼的明星,备受关注。它在国内外都掀起了一股热潮,各大云服务商纷纷提供各种工具和部署方式以满足需求。而亚马逊云科技更是凭借其强大的实力,为DeepSeek模型的部署提供了诸多便利,助力业务效率的提升。比如,Amazon Bedrock Marketplace、Amazon SageMaker JumpStart等部署方式,让人眼前一亮。
一、DeepSeek在亚马逊云科技的部署方式
不仅如此,我们还能利用亚马逊云科技的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实例上部署DeepSeek的最新步骤
在这篇文章中,我们将详细介绍如何在亚马逊云科技Inferentia EC2实例上使用vLLM推理服务器部署DeepSeek的最新蒸馏模型,包括如何创建Docker容器以使用vLLM部署模型,以及如何运行在线推理。下面,就让我们开启这趟技术之旅吧!
1、创建EC2服务器
要是您是第一次使用inf/trn实例,那就需要申请增加配额啦。
我们不妨选择Deep Learning AMI Neuron: (Ubuntu 22.04) 作为您的AMI哦。
如果您需要基础的亚马逊云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/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
然后依次执行下面的脚本,下载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模型。
三、总结
总之,通过亚马逊云科技的相关服务和一系列操作步骤,我们能够较为顺利地在Inferentia EC2实例上部署DeepSeek的最新蒸馏模型,这一过程不仅让我们领略到了技术的魅力,也为我们在相关领域的探索和实践提供了有力的支持。