使用sglang+docker多机多卡手动部署DeepSeek-R1/V3模型(Linux)
应用场景
DeepSeek-V3和DeepSeek-R1是深度求索(DeepSeek)推出的两款高性能大语言模型,其中推理专用模型,专为数学、代码生成和复杂逻辑推理任务设计,通过大规模强化学习(RL)提升推理能力。DeepSeek-V3是通用型模型,专注于自然语言处理、知识问答、内容创作等通用任务,目标是实现高性能与低成本的平衡,适用于智能客服、个性化推荐系统等场景。华为云为用户提供使用sglang来部署DeepSeek-R1/V3模型的详细步骤,帮助客户快速部署。
方案架构
本方案至少需要一台主节点和一台从节点。

方案优势
基于sglang+docker多机多卡从0开始手动部署DeepSeek-R1/V3模型,深刻理解模型运行依赖,体验DeepSeek满血版模型带来的极致推理性能。sglang框架内置了数据并行路由器,可以在worker启动完成后自动将路由器连接到所有的worker,不需要借助外部的ray集群框架,操作起来更加简单方便。
资源和成本规划
资源 |
资源说明 |
成本说明 |
---|---|---|
虚拟私有云VPC |
VPC网段:192.168.0.0/16 |
免费 |
虚拟私有云子网 |
|
免费 |
安全组 |
入方向规则:
|
免费 |
弹性云服务器 |
|
ECS涉及以下几项费用:
具体的计费方式及标准请参考计费模式概述。 |
基于sglang+docker多机多卡手动部署DeepSeek-R1/V3模型步骤
Linux实例基于sglang+docker多机多卡手动部署DeepSeek-R1/V3模型操作步骤如下:
实施步骤
- 创建GPU弹性云服务器。
- 镜像选择:建议选择华为云提供的GPU实例的未安装驱动的Huawei Cloud EulerOS 2.0/Ubuntu 22.04公共镜像,勾选自动安装GPU驱动,选择驱动版本535.161.08,CUDA版本12.2.0,以下一些依赖安装都是基于Ubuntu 22.04系统的,其他系统请自行参考安装,hopper系列的GPU卡可以按照更高版本的驱动550+,CUDA12.6+。
图2 GPU实例镜像选择和自动安装GPU驱动选择
- 需要创建EIP,方便依赖环境下载,方便调用模型接口进行推理。
- 镜像选择:建议选择华为云提供的GPU实例的未安装驱动的Huawei Cloud EulerOS 2.0/Ubuntu 22.04公共镜像,勾选自动安装GPU驱动,选择驱动版本535.161.08,CUDA版本12.2.0,以下一些依赖安装都是基于Ubuntu 22.04系统的,其他系统请自行参考安装,hopper系列的GPU卡可以按照更高版本的驱动550+,CUDA12.6+。
- 驱动和CUDA的前置条件检查。
如果使用的不是推荐的镜像和驱动版本,请参考手动安装GPU加速型ECS的Tesla驱动方法更新驱动到535版本,CUDA更新到12.2。
- 安装docker。
- 执行以下命令,更新包索引并安装依赖项。
apt-get update apt-get install -y ca-certificates curl gnupg lsb-release
- 执行以下命令,添加docker的官方GPG密钥。
mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
- 执行以下命令,设置Docker的APT源。
echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- 执行以下命令,安装docker引擎。
apt update apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
- 执行以下命令,配置docker-hub。
cat <<EOF > /etc/docker/daemon.json { "registry-mirrors": [ "https://docker.m.daocloud.io", "https://registry.cn-hangzhou.aliyuncs.com" ] } EOF systemctl restart docker
- 执行以下命令,验证docker安装是否正常。
docker --version
- 执行以下命令,更新包索引并安装依赖项。
- 安装nvidia-container-toolkit。
- 执行以下命令,添加nvidia的官方GPG密钥。
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
- 执行以下命令,设置NVIDIA Container Toolkit的APT源。
sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list
- 执行以下命令,更新索引包并安装NVIDIA Container Toolkit。
apt update apt install -y nvidia-container-toolkit
- 执行以下命令,配置docker以使用Nvidia Container Toolkit。
nvidia-ctk runtime configure --runtime=docker systemctl restart docker
- 执行以下命令,添加nvidia的官方GPG密钥。
- 安装modelscope等依赖包。
- 执行以下命令,更新升级pip。
python -m pip install --upgrade pip -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
- 执行以下命令,安装modelscope。
pip install modelscope -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
modelscope是国内模型开源社区,国内下载会更快,如果在国外,请使用hugging Face进行下载。
- 执行以下命令,更新升级pip。
- 下载docker镜像。
可以下载sglang提供的最新容器镜像,也可以下载华为云hgcs异构团队制作的镜像。
- 执行以下命令,下载sglang官网镜像。
docker pull lmsysorg/sglang:latest
- 执行以下命令,下载hgcs团队制作的镜像。
docker pull swr.cn-north-9.myhuaweicloud.com/hgcs/lmsysorg/sglang:latest
- 执行以下命令,下载sglang官网镜像。
- 下载DeepSeek-R1/V3模型文件。
- 执行以下命令,创建下载模型脚本。
vim download_models.py
插入以下内容:
from modelscope import snapshot_download model_dir = snapshot_download('deepseek-ai/DeepSeek-R1', cache_dir='/root', revision='master')
模型名称以DeepSeek-R1为例,可切换成DeepSeek-V3,模型存储的本地路径以/root为例,可以更换自己的目录。
- 执行以下命令,下载模型。
python3 download_models.py
等待模型下载完成,模型总大小642G,和你的EIP带宽有关,下载时间最长可能超过24小时。
- 执行以下命令,创建下载模型脚本。
- 启动sglang的主节点和全部从节点。
第一种情况:有roce网络。
- 执行以下命令,启动sglang的主节点。
节点node0:
docker run --gpus all \ # 使用全部GPU卡。 --shm-size 512g \ # 主机和容器的共享内存大小,根据服务器配置来设置。 -e NCCL_IB_GID_INDEX=3 \ # 使用索引3,对应roce v2的路由 -e NCCL_IB_HCA='^=mlx5_bond_0' \ # 指定roce通信的网卡 -e NCCL_SOCKET_IFNAME=bond0 \ # NCCL指定 TCP/IP 通信的网卡(如 bond0),需与 IB 网卡分离以避免干扰 -e GLOO_SOCKET_IFNAME=bond0 \ # GLOO指定 TCP/IP 通信的网卡(如 bond0),需与 IB 网卡分离以避免干扰 -v /mnt/paas/models:/root/.cache/huggingface \ # 模型路径挂载点 --ipc=host --network=host --privileged \ # 使用host网络 swr.cn-north-9.myhuaweicloud.com/hgcs/lmsysorg/sglang:latest \ # 容器镜像名 python3 -m sglang.launch_server --model /root/.cache/huggingface/DeepSeek-V3 \ # 指定模型路径 --served-model-name deepseek-v3 \ # 指定模型名 --tp 16 \ # 2台8卡H20,设置tp并行为16 --nnodes 2 \ # 总节点数 --node-rank 0 \ # 主节点设置为0,其他节点按顺序顺移动 --host 0.0.0.0 --port 8000 \ # 设置当前节点IP和端口 --dist-init-addr 192.168.1.143:30000 \ # 设置主节点IP和端口 --trust-remote-code
- 执行以下命令,启动sglang的从节点。
docker run --gpus all \ --shm-size 512g \ -e NCCL_IB_GID_INDEX=3 \ -e NCCL_IB_HCA='^=mlx5_bond_0' \ -e GLOO_SOCKET_IFNAME=bond0 \ -v /mnt/paas/models:/root/.cache/huggingface \ --ipc=host --network=host \ --privileged swr.cn-north-9.myhuaweicloud.com/hgcs/lmsysorg/sglang:latest python3 -m sglang.launch_server \ --model /root/.cache/huggingface/DeepSeek-V3 \ --served-model-name deepseek-v3 \ --tp 16 --nnodes 2 --node-rank 1 --host 0.0.0.0 --port 8000 --dist-init-addr 192.168.1.143:30000 --trust-remote-code
- 可以添加以下优化参数。
第二种情况:无roce网络。
- 执行以下命令,启动sglang的主节点。
docker run --gpus all \ # 使用全部GPU卡。 --shm-size 512g \ # 主机和容器的共享内存大小,根据服务器配置来设置 -e GLOO_SOCKET_IFNAME=eth0 \ -v /mnt/paas/models:/root/.cache/huggingface \ # 模型路径挂载点 --ipc=host --network=host \ # 使用host网络 swr.cn-north-9.myhuaweicloud.com/hgcs/lmsysorg/sglang:latest \ # 容器镜像名 python3 -m sglang.launch_server --model /root/.cache/huggingface/DeepSeek-V3 \ # 指定模型路径 --served-model-name deepseek-v3 \ # 指定模型名 --tp 16 \ # 2台8卡H20,设置tp并行为16 --nnodes 2 \ # 总节点数 --node-rank 0 \ # 主节点设置为0,其他节点按顺序顺移动 --host 0.0.0.0 --port 8000 \ # 设置当前节点IP和端口 --dist-init-addr 192.168.1.143:30000 \ # 设置主节点IP和端口 --trust-remote-code
- 执行以下命令,启动sglang的从节点。
docker run --gpus all \ --shm-size 512g \ -e GLOO_SOCKET_IFNAME=eth0\ -v /mnt/paas/models:/root/.cache/huggingface \ --ipc=host --network=host \ swr.cn-north-9.myhuaweicloud.com/hgcs/lmsysorg/sglang:latest python3 -m sglang.launch_server \ --model /root/.cache/huggingface/DeepSeek-V3 \ --served-model-name deepseek-v3 \ --tp 16 \ --nnodes 2 \ --node-rank 1 \ --host 0.0.0.0 --port 8000 \ --dist-init-addr 192.168.1.143:30000 \ --trust-remote-code
- 可以添加以下优化参数。
- 执行以下命令,启动sglang的主节点。
- 调用模型接口测试。
- 调用以下API进行聊天对话。
curl http://localhost:8000/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "DeepSeek-R1", "messages": [{"role": "user", "content": "hello\n"}] }'
- 如果需要流式对话,则需要加上stream参数。
curl http://localhost:8000/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "DeepSeek-R1", "messages": [{"role": "user", "content": "hello\n"}], "stream": true }'
您可以在本地postman或者自己的服务里面使用EIP调用对应的API接口来对话。
- 调用以下API进行聊天对话。
常见问题
问题描述:启动sglang的主节点时出现报错:SGLang only supports sm75 and above
原因:GPU显卡计算能力不够,提示至少计算能力要SM7.5。
解决方案:换成计算能力大于等于SM7.5的GPU,例如T4。