DeepSeek-V3/R1是拥有671B参数的专家混合(MoE)模型,且已开源其模型权重。本文将介绍如何利用vllm作为DeepSeek模型的推理框架,在两台ebmgn8v实例上构建DeepSeek-V3/R1的推理服务。
操作步骤
步骤一:准备环境
-
在同一VPC和交换机下,创建两台配置相同的GPU实例并正确安装驱动。关键参数说明如下:
-
实例规格:目前可选的实例规格为
ecs.ebmgn8v.48xlarge(内存1024 GiB、GPU显存8*96 GB以及192 vCPU)。 -
镜像:选择公共镜像,本文以Alibaba Cloud Linux 3.2104 LTS 64位版本的镜像为例。
在GPU实例上部署DeepSeek-V3/R1模型,需要提前在该实例上安装GPU驱动且驱动版本应为550及以上版本,建议您通过ECS控制台购买GPU实例时,同步选中安装GPU驱动。实例创建完成后,会自动安装Tesla驱动、CUDA、cuDNN库等,相比手动安装方式更快捷。
勾选安装 GPU 驱动后,系统将自动安装 CUDA 版本
12.4.1、Driver 版本550.127.08、CUDNN 版本9.2.0.82,安装耗时约 10~20 分钟,实例启动时间更长并伴有自动重启。 -
系统盘:建议系统盘大小设置200 GiB以上。
-
数据盘:由于模型体积较大,DeepSeek-R1模型和DeepSeek-V3模型的文件大小分别约为1.3 TiB。建议数据盘的大小预留为模型大小的1.5倍。因此,建议您单独购买用于存储下载模型的数据盘,推荐选择2 TiB以上的数据盘。
-
公网IP:选中分配公网IPv4地址,带宽计费方式选择按使用流量,建议带宽峰值选择100 Mbps,以加快模型下载速度。
-
购买实例数量:2台。
-
-
-
安装NVIDIA容器工具包。
若安装失败,请参考解决方案。
Alibaba Cloud Linux/CentOS
#配置生产存储库 curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \ sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo #安装 NVIDIA Container Toolkit 软件包 sudo yum install -y nvidia-container-toolkit #重启docker sudo systemctl restart dockerUbuntu/Debian
#配置生产存储库 curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \ && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \ sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \ sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list #从存储库更新软件包列表 sudo apt-get update #安装 NVIDIA Container Toolkit 软件包 sudo apt-get install -y nvidia-container-toolkit #重启docker sudo systemctl restart docker -
查看Docker是否已启动。
sudo systemctl status docker如下回显所示,表示Docker已启动。
sjxZ:~$ sudo systemctl status docker ● docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2024-07-09 16:37:54 CST; 2min 9s ago TriggeredBy: ● docker.socket Docs: https://docs.docker.com Main PID: 6987 (dockerd) Tasks: 20 Memory: 31.9M CGroup: /system.slice/docker.service └─6987 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -
-
如果购买GPU实例时未选择添加数据盘,您需要购买数据盘并完成挂载。
由于模型体积较大,DeepSeek-R1模型和DeepSeek-V3模型的文件大小分别约为1.3 TiB。建议数据盘的大小预留为模型大小的1.5倍。因此,建议您单独购买用于存储下载模型的数据盘,推荐选择2 TiB以上的数据盘,并以
/mnt作为挂载点。具体操作,请参见挂载数据盘。
步骤二:部署和运行DeepSeek模型
-
拉取推理镜像。
sudo docker pull egs-registry.cn-hangzhou.cr.aliyuncs.com/egs/vllm:0.7.2-pytorch2.5.1-cuda12.4-ubuntu22.04 -
下载模型文件,您可以访问阿里云魔搭社区Modelscope选择模型,在模型详情页获取名称。
# 定义要下载的模型名称。MODEL_NAME需要访问Modelscope选择模型,在模型详情页获取名称,脚本以DeepSeek-V3为例 MODEL_NAME="DeepSeek-V3" # 设置本地存储路径。确保该路径有足够的空间来存放模型文件(建议预留模型大小的1.5倍空间),此处以/mnt/V3为例 LOCAL_SAVE_PATH="/mnt/V3" # 如果/mnt/V3目录不存在,则创建它 sudo mkdir -p ${LOCAL_SAVE_PATH} # 确保当前用户对该目录有写权限,根据实际情况调整权限 sudo chmod ugo+rw ${LOCAL_SAVE_PATH} # 启动下载,下载完成后自动销毁 sudo docker run -d -t --network=host --rm --name download \ -v ${LOCAL_SAVE_PATH}:/data \ egs-registry.cn-hangzhou.cr.aliyuncs.com/egs/vllm:0.7.2-pytorch2.5.1-cuda12.4-ubuntu22.04 \ /bin/bash -c "git-lfs clone https://www.modelscope.cn/models/deepseek-ai/${MODEL_NAME}.git /data" -
实时监控下载进度,等待下载结束。
sudo docker logs -f download下载模型耗时较长,请您耐心等待。当下载任务完成后,会停止输出新的日志,您可以随时按下
Ctrl+C退出,这不会影响容器的运行,即使退出终端也不会中断下载。 -
启动用于运行VLLM的容器。
# 启动Docker容器 docker run -t -d \ --name="vllm-test" \ --ipc=host \ --cap-add=SYS_PTRACE \ --network=host \ --gpus all \ --privileged \ --ulimit memlock=-1 \ --ulimit stack=67108864 \ -v /mnt:/mnt \ egs-registry.cn-hangzhou.cr.aliyuncs.com/egs/vllm:0.7.2-pytorch2.5.1-cuda12.4-ubuntu22.04
步骤三:模型运行测试
-
进入
vllm-test容器。docker exec -it vllm-test bash -
设置GLOO使用eth0网卡。
node1与node2都需设置。
echo 'export GLOO_SOCKET_IFNAME=eth0' >> ~/.bashrc echo 'export NCCL_SOCKET_IFNAME=eth0' >> ~/.bashrc source ~/.bashrc -
安装Ray并在两台机器间创建Ray集群。
pip3 install ray # running on node1 ray start --head --dashboard-host 0.0.0.0在node1上会出现类似下述回显信息。
root@xxx /workspace# ray start --head --dashboard-host 0.0.0.0 Enable usage stats collection? This prompt will auto-proceed in 10 seconds to avoid blocking cluster startup. Confirm [Y/n]: y Usage stats collection is enabled. To disable this, add `--disable-usage-stats` to the command that starts the cluster, or run the following command: `ray disable-usage-stats` before starting the cluster. See https://docs.ray.io/en/master/cluster/usage-stats.html for more details. Local node IP: 1xxx -------------------- Ray runtime started. -------------------- Next steps To add another node to this Ray cluster, run ray start --address='xxx' To connect to this Ray cluster: import ray ray.init() To submit a Ray job using the Ray Jobs CLI: RAY_ADDRESS='xxx' xxx See https://docs.ray.io/en/latest/cluster/running-applications/job-submission/index.html for more information on submitting Ray jobs to the Ray cluster. To terminate the Ray runtime, run ray stop To view the status of the cluster, use ray status To monitor and debug Ray, view the dashboard at xxx If connection to the dashboard fails, check your firewall settings and network configuration.其中
ray start --address='xxx'是后续在 node2 上执行以加入该 Ray 集群的命令。 -
然后在node2上运行上述代码块中的
ray start --address='xxx'命令(将xxx替换为 node1 的实际 IP 地址),即可创建Ray集群,可以通过在任何一台机器上运行ray status命令来检查是否创建成功。如果出现下述回显信息即表明创建成功。root@ixxx:/workspace# ray status ======== Autoscaler status: 2025-02-13 09:17:16.683342 ======== Node status --------------------------------------------------------------- Active: 1 node_dxxx3a8f 1 node_8xxx50d7 Pending: (no pending nodes) Recent failures: (no failures) Resources --------------------------------------------------------------- Usage: 0.0/384.0 CPU 0.0/16.0 GPU 0B/1.59TiB memory 0B/372.53GiB object_store_memory Demands: (no resource demands) -
在任何一台机器的容器中,启动DeepSeek-V3或DeepSeek-R1的推理serving服务。
vllm serve /path/to/DeepSeek-V3 \ --tensor-parallel-size 8 \ --pipeline-parallel-size 2 \ --trust-remote-code \ --enable-chunked-prefill \ --host 0.0.0.0其中
/path/to/DeepSeek-V3需要替换为本地DeepSeek-V3或DeepSeek-R1的存放目录。如下所示,表示vllm推理服务已启动。
INFO 02-13 09:39:05 metrics.py:455] Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 21.1 tokens/s -
等待推理server完成初始化正常运行后,在运行上述命令的机器的容器中另一个终端窗口中,发送推理请求并显示模型推理返回结果。
curl http://localhost:8000/v1/chat/completions \ -H "Content-Type:application/json" \ -d '{ "model":"/path/to/DeepSeek-V3", "messages":[{"role": "user", "content": "写一首20字的月亮诗"}], "stream":false}'root@xxx# curl http://localhost:8000/v1/chat/completions -H "Content-Type:application/json" -d '{"model":"/mnt/DeepSeek-R1","messages":[{"role": "user", "content": "写一首20字的月亮诗"}],"stream":false}' {"id":"chatcmpl-a89681c0b63c4b38ba9e0fbfb3a4016e","object":"chat.completion","created":1739439522,"model":"/mnt/DeepSeek-R1","choices":[{"index":0,"message":{"role":"assistant","reasoning_content":null,"content":"<think>\n好的,用户让我写一首20字的关于月亮的诗。首先,我需要确定诗的结构。20字的话,五言绝句比较合适,每句五个字,四句刚好20字。接下来要考虑月亮的意象,比如常用的有玉盘、明镜、桂树等,但得避免太常见的比喻,得有点新意。\n主题方面,月亮通常表达思念、孤独或者美景,用户可能希望有画面感,同时带有情感。可能需要加入自然元素,比如正面、侧影,或者与夜晚相关的景象,比如月、荷、雁影之类的。考虑到20字的限制,每句都要精准,不能浪费字。\n第一句可能需要点出月亮,比如\"月坠古江心\",这样既有画面感,又有动感。第二句可以描绘周围的景色,比如\"清辉烁宿林\",清辉指月光,宿林可能指夜晚的树林,烁字增添闪烁的感觉。第三句要有人的元素,比如\"舟孤衍雁影\",孤舟和雁影增加孤独感,衍字连接两者。最后一句收尾要升华,比如\"天地一浮簪\",把天地比作发簪,有点夸张但有意境。\n\n检查一下押韵和结构是否符合五绝的平仄,可能不需要严格遵循,但读起来要顺口。再考虑是否有更好的词替换,比如\"浮簪\"是否贴切,或者是否有更生动的比喻。整体是否连贯,有没有传达出静谧、孤独的月夜氛围。可能需要调整用词,让每句之间的联系更紧密,画面更统一。最后确认字数,确保正好20字。\n</think>\n\n《古江月》\n月坠古江心,清辉烁宿林。\n舟孤衍雁影,天地一浮簪。\n\n注:诗人的诗作《古江月》通过寥寥数语,构造出一幅静谧的月夜江景。前两句以\"坠\"、\"烁\"二字活化月光与江林,后两句通过孤舟、雁影的勾勒,最终以天地凝为浮簪的奇绝想象收束,使全诗如画卷般舒展,蕴含幽深禅意。"},"tool_calls":[]}],"logprobs":null,"finish_reason":"stop","stop_reason":null}],"usage":{"prompt_tokens":9,"total_tokens":459,"completion_tokens":450,"prompt_tok
(可选)DeepSeek-V3/R1模型性能评估
为了避免在每次运行过程中都去下载评估数据集,最好提前将评估数据集下载并存放在服务器本地。
-
在容器内安装性能评估所需软件。
apt install -y unzip pip install datasets -i https://mirrors.aliyun.com/pypi/simple -
克隆
ShareGPT_V3_unfiltered_cleaned_split的数据集仓库。git lfs clone https://www.modelscope.cn/datasets/gliang1001/ShareGPT_V3_unfiltered_cleaned_split.git -
获取vllm源码并解压。
wget https://help-static-aliyun-doc.aliyuncs.com/install-script/vllm-0.7.2.zip unzip vllm-0.7.2.zip -
启用serving模式性能评估。
python3 ./vllm-0.7.2/benchmarks/benchmark_serving.py \ --backend vllm \ --model /path/to/DeepSeek-V3 \ --dataset-name random \ --random-output-len 4096 \ --random-input-len 512 \ --num-prompts 10 \ --max-concurrency 1 \ --port 8000 \ --dataset-path ShareGPT_V3_unfiltered_cleaned_split/ShareGPT_V3_unfiltered_cleaned_split.json其中
/path/to/DeepSeek-V3需要替换为本地DeepSeek-V3或DeepSeek-R1的存放目录。 -
查看评估结果。
============ Serving Benchmark Result ============= Successful requests: xxx Benchmark duration (s): xxx Total input tokens: xxx Total generated tokens: xxx Request throughput (req/s): xxx Output token throughput (tok/s): xxx Total Token throughput (tok/s): xxx ----------------Time to First Token---------------- Mean TTFT (ms): xxx Median TTFT (ms): xxx P99 TTFT (ms): xxx -----Time per Output Token (excl. 1st token)------ Mean TPOT (ms): xxx Median TPOT (ms): xxx P99 TPOT (ms): xxx ----------------Inter-token Latency---------------- Mean ITL (ms): xxx Median ITL (ms): xxx P99 ITL (ms): xxx ===================================================
相关文档
-
计算巢一键部署方式(GPU双机版)
计算巢基于ROS模板可以实现云资源与大模型的一键部署,您仅需在创建服务实例时添加几个参数,即可在30分钟内通过GPU实例(双机)部署并使用满血版DeepSeek模型,快速体验DeepSeek-R1/V3的推理性能,具体请点击部署链接进行一键部署操作。
-
命令执行部署方式(GPU单机版)
利用SGLang作为DeepSeek模型的推理框架,通过执行命令方式基于GPU实例单机部署满血版DeepSeek模型,您也无需进行额外配置,即可实现DeepSeek-R1/V3的推理性能。