部署满血版DeepSeek-R1模型SGlangServer(单机&多机部署&参数建议)
概览
本篇介绍如何在GPU云服务器部署671B参数的DeepSeek R1模型推理服务,部署方式为在GPU云服务器下载SGlang容器环境并在容器中构建SGlang Server,可通过单机GPU实例部署以及两机GPU实例部署。同时分享SGlang Server的部署参数建议,您可根据业务需求按需选择。
单机部署服务
创建实例并配置环境
1、开通GPU云服务器,GPU选型建议选择96G及以上型号,建议选择如下的GPU环境:
2、安装docker环境,您可通过云助手的公共命令安装docker或者登陆实例后执行以下脚本安装:
curl -sL http://mirrors.baidubce.com/nvidia-binary-driver/scripts/gpu_docker.sh | bash -
3、(可选)初始化数据盘,因模型容量较大,建议将模型保存在数据盘中,如您购买的实例包含本地盘,可通过云助手公共命令实现本地盘初始化及挂载,示例参数如下:
执行后可查看挂载结果:
下载模型及相关数据
建议您下载BOS对象存储CLI工具并从云内网下载模型。
1、安装BOS CLI工具:
# 下载bcecmd程序
wget http://mirrors.baidubce.com/nvidia-binary-driver/scripts/linux-bcecmd-0.3.9.zip
# 解压
unzip linux-bcecmd-0.3.9.zip
ln -s `pwd`/linux-bcecmd-0.3.9/bcecmd /usr/bin/
2、下载模型、镜像及测试数据集,文件保存在/mnt/ssd0中,可按需替换为其他目录:
* 下载sglang镜像
bcecmd bos cp bos://ai-all-models/docker/sglang_v0.4.3.post2-cu124.tar /mnt/ssd0/images/sglang_v0.4.3.post2-cu124.tar
* DeepSeek - R1 模型
bcecmd bos sync bos://ai-all-models/model/DeepSeek-R1 /mnt/ssd0/model/DeepSeek-R1
* 测试数据集:
bcecmd bos cp bos://ai-all-models/dataset/ShareGPT_V3_unfiltered_cleaned_split.json /mnt/ssd0/dataset/ShareGPT_V3_unfiltered_cleaned_split.json
启动Server服务
1、加载容器镜像:
docker load -i /mnt/ssd0/images/sglang_v0.4.3.post2-cu124.tar
2、启动docker:
docker run --gpus all -itd --name sglang_deepseek --shm-size=32g --privileged --user=root --network=host -v /mnt/ssd0/:/workspace/ lmsysorg/sglang:v0.4.3.post2-cu124 /bin/bash
3、登陆docker并启动server:
docker exec -it sglang_deepseek bash
4、启动Sglang server:
python3 -m sglang.launch_server --model-path /workspace/model/DeepSeek-R1/ --port 30000 --mem-fraction-static 0.9 --tp 8 --trust-remote-code
SGlang的启动参数建议:
参数名称 | 参数功能 | 使用建议 |
---|---|---|
--mem-fraction-static | 控制 sglang 初始化静态显存占用量系数,包含模型及kvcache占用,默认值0.8 | 建议调高--mem-fraction-static 保证有足够的显存支持kvcache或者更高性能,如遇到运行时cuda graph 初始化和 pytorch 运行时OOM报错,则调低该参数确保能正常运行 |
--enable-dp-attention | 使能attention数据并行 | dp-attention 能够节省kvcache 1. 注重并发场景建议开启 dp attention 来提升吞吐 token throughput 。2. 注重延时场景建议关闭 dp atttention 来降低首 token 延时 TTFT。 当前仅建议单机部署开启该参数。 |
5、测试服务,server启动后,可在该GPU实例打开新的终端,通过如下命令测试:
curl http://localhost:30000/generate \
-H "Content-Type: application/json" \
-d '{
"text": "什么是deepseek r1?",
"sampling_params": {
"temperature": 0.3,
"repetition_penalty": 1.2,
"stop_token_ids": [7]
}
}'
双机部署服务
如您的业务需要Server支持更高的并发量,可通过双机部署Server提高性能,本实践介绍TP=16的双机部署方案。
1、创建2台同规格的GPU云服务器,并按照如上单机部署服务直男,完成启动server前的所有操作。
2、登陆2台实例并加载docker镜像:
docker load -i /mnt/ssd0/images/sglang_v0.4.3.post2-cu124.tar
3、在2台实例启动docker:
docker run --gpus all -itd --name sglang_deepseek --shm-size=32g --privileged --user=root --network=host -v /mnt/ssd0/:/workspace/ lmsysorg/sglang:v0.4.3.post2-cu124 /bin/bash
3、登陆2台实例的docker:
docker exec -it sglang_deepseek bash
4、在2台实例docker中设置NCCL环境变量:
export NCCL_SOCKET_IFNAME=eth0
export NCCL_IB_GID_INDEX=3
export NCCL_IB_TIMEOUT=22
export NCCL_IB_RETRY_CNT=7
export NCCL_IB_QPS_PER_CONNECTION=8
export NCCL_DEBUG=INFO
4、在2台实例docker中分别执行以下命令,注意确保2台实例所在的安全组已放开20000端口,dist-init-addr替换为主节点私有网络IP地址:
#主节点:
python3 -m sglang.launch_server --model-path /workspace/model/DeepSeek-R1/ --tp 16 --dist-init-addr 192.168.0.6:20000 --nnodes 2 --node-rank 0 --trust-remote-code --host 0.0.0.0 --port 30000
#从节点:
python3 -m sglang.launch_server --model-path /workspace/model/DeepSeek-R1/ --tp 16 --dist-init-addr 192.168.0.6:20000 --nnodes 2 --node-rank 1 --trust-remote-code --host 0.0.0.0 --port 30000
如看到以下打印,则代表server已正常工作。
5、测试server方法同单机部署。