vllm/sglang部署满血版deepseek

准备

硬件(下面其中之一)

  1. 2机8卡H20
  2. 1机8卡H200

操作系统版本: CentOS Linux release 8.5.2111

安装包(部分安装包为企业私有,仅做部分参考)

  1. NVIDIA-Linux-x86_64-570.86.15.run
  2. cuda_12.6.3_560.35.05_linux.run
  3. nvidia-fabric-manager-570.86.15-1.x86_64.rpm
  4. containerd.io-1.6.32-3.1.el8.x86_64.rpm
  5. docker-ce-26.1.3-1.el8.x86_64.rpm
  6. docker-ce-cli-26.1.3-1.el8.x86_64.rpm
  7. Nvidia_Helper

docker_images

  • lmsysorg_sglang_v0_4_4_post1_cu125.tar
  • vllm_vllm-openai_v0_7_3.tar
  • nvidia_cuda_12.6.2-base-ubuntu22.04.tar

安装环境

  1. 安装驱动
    ./NVIDIA-Linux-x86_64-570.86.15.run

其中的选项按下图中所示选择(添加了部分提示信息的截图)

image.png
image.png
image.png
image.png
image.png
image.png
image.png
  1. 安装 cuda
    ./cuda_12.6.3_560.35.05_linux.run
image.png

窗口高度调高一点,不然看不着最后一行的输入行. 按下箭头,翻看协议
输入: accept

image.png

不勾选 driver(刚才第一步装过了), 按空格或enter 选中/取消选中

image.png

按上下箭头,到 Install, 按 enter 继续

image.png

至此,cuda安装完成

  1. 查看显卡状态
    nvidia-smi
image.png

确认是 8卡H200, 140G显存

  1. 配置环境变量
    vim /root/.bashrc
    添加内容
# CUDA env
export PATH=/usr/local/cuda-12.6/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-12.6/lib64:$LD_LIBRARY_PATH
image.png

source /root/.bashrc

  1. 安装 fabric-manager, 并启动服务
    rpm -ivh nvidia-fabric-manager-570.86.15-1.x86_64.rpm
image.png

启动服务 nvidia-fabricmanager

systemctl enable nvidia-fabricmanager
systemctl start nvidia-fabricmanager
# 查看服务状态, 按 q 退出
systemctl status nvidia-fabricmanager
image.png
  1. 安装 docker
    一起安装
    dnf install -y ./containerd.io-.rpm ./docker-ce-.rpm ./docker-ce-cli-*.rpm

一个一个安装(注意顺序)
dnf install containerd.io-1.6.32-3.1.el8.x86_64.rpm
dnf install docker-ce-cli-26.1.3-1.el8.x86_64.rpm
dnf install docker-ce-26.1.3-1.el8.x86_64.rpm

(不再截图)
验证docker版本
docker --version

image.png
  1. 安装 nvidia-container-toolkit

先配置 nvidia 相关的安装包数据源

./Nvidia_Helper

image.png

到这一步, ctrl+C 退出, 然后安装 nvidia-container-toolkit
dnf install -y nvidia-container-toolkit

image.png

配置docker并重启
nvidia-ctk runtime configure --runtime=docker
systemctl restart docker

image.png

nvidia-ctk 会修改 docker 配置 /etc/docker/daemon.json
修改前: 不存在这个配置文件
修改后

{
    "runtimes": {
        "nvidia": {
            "args": [],
            "path": "nvidia-container-runtime"
        }
    }
}
  1. 验证docker安装

加载验证镜像
docker load -i nvidia_cuda_12.6.2-base-ubuntu22.04.tar
使用镜像验证安装是否成功
docker run --rm --gpus all xxx/nvidia/cuda:12.6.2-base-ubuntu22.04 nvidia-smi
(显示gpu信息即为安装成功)

  1. (对于多机部署的)配置ssh免密登录
    ssh-keygen -t rsa
    vi ~/.ssh/authorized_keys
    两台机器相互做免密登录,起模型的时候nccl通信会用到

vllm部署deepseek

  1. 加载镜像(分别为vllm推理引擎和sglang推理引擎)
    docker load -i vllm_vllm-openai_v0_7_3.tar
    docker load -i lmsysorg_sglang_v0_4_4_post1_cu125.tar

  2. vllm 启动服务

# 启动主节点容器
# ray, version 2.40.0
docker run -d \
    --name node_head \
    --network host \
    --privileged \
    --gpus all \
    --shm-size 10.24g \
    --entrypoint /bin/bash \
    -e TP_SOCKET_IFNAME=bond0 \
    -e GLOO_SOCKET_IFNAME=bond0 \
    -e NCCL_SOCKET_IFNAME=bond0 \
    -e NCCL_IB_HCA=mlx5 \
    -e VLLM_HOST_IP=<当前节点ip,作为head节点> \
    -v /DATA/disk0/models:/root/.cache/huggingface \
    -v /etc/localtime:/etc/localtime:ro \
    vllm/vllm-openai:v0.7.3 \
    -c "ray start --block --head --port=6379"

# 启动从节点容器(另外一台机器上)
docker run -d \
    --name node_worker \
    --network host \
    --privileged \
    --gpus all \
    --shm-size 10.24g \
    --entrypoint /bin/bash \
    -e TP_SOCKET_IFNAME=bond0 \
    -e GLOO_SOCKET_IFNAME=bond0 \
    -e NCCL_SOCKET_IFNAME=bond0 \
    -e NCCL_IB_HCA=mlx5 \
    -e VLLM_HOST_IP=<head节点IP> \
    -v /DATA/disk0/models:/root/.cache/huggingface \
    -v /etc/localtime:/etc/localtime:ro \
    vllm/vllm-openai:v0.7.3 \
    -c "ray start --block --address=<head节点IP>:6379"

进入主节点容器, 启动 vllm 服务

docker exec -it node_head bash

# 启动 vllm 服务
# vllm 0.7.3, Python 3.12.9
nohup vllm serve /root/.cache/huggingface/DeepSeek-R1 \
  --tensor-parallel-size 8 \
  --pipeline-parallel-size 1 \
  --trust-remote-code \
  --max-model-len 131072 \
  --served-model-name DeepSeek-R1 \
  --gpu-memory-utilization 0.8 \
  --max-num-seqs 512  \
  > /root/.cache/huggingface/logs/"logs_model_service_ds128k_$(date +'%Y%m%d_%H%M%S').log" 2>&1 &
  1. sglang启动服务
# 启动容器
docker run -d \
  --network=host \
  --name sglang \
  --privileged \
  --ipc=host \
  --gpus all \
  --ulimit memlock=-1 \
  -e SGLANG_SET_CPU_AFFINITY=1 \
  -e TP_SOCKET_IFNAME=bond0 \
  -e NCCL_SOCKET_IFNAME=bond0 \
  -e GLOO_SOCKET_IFNAME=bond0 \
  -v /DATA/disk0/models:/root/.cache/huggingface \
  lmsysorg/sglang:v0.4.4.post1-cu125 \
  tail -f /dev/null

# 单机8卡,启动sglang
# 日志保存在宿主机目录 /DATA/disk0/models/logs/下,容器中 /root/.cache/huggingface/logs/ 下
# sglang 0.4.4.post1, Python 3.10.12
nohup python3 -m sglang.launch_server \
    --model-path /root/.cache/huggingface/DeepSeek-R1 \
    --served-model-name DeepSeek-R1 \
    --context-length 131072 \
    --tp 8 \
    --dist-init-addr <主节点IP>:20000 \
    --nnodes 1 \
    --node-rank 0 \
    --trust-remote-code \
    --host 0.0.0.0 \
    --port 8000 \
    > /root/.cache/huggingface/logs/"logs_model_service_sglang_ds128k_$(date +'%Y%m%d_%H%M%S').log" 2>&1 &
  1. 访问服务
curl --location 'http://127.0.0.1:8000/v1/chat/completions' \
--header 'Content-Type: application/json' \
--data '{
  "model": "DeepSeek-R1",
  "stream": false,
  "messages": [
    {
      "role": "user",
      "content": "找出2,3,5,7,11,13,15中特殊的一个"
    }
  ]
}'
image.png

一些指标记录

h200 vllm ds-128k 显存占用:


image.png

image.png

h200 vllm ds-32k 显存占用:


image.png

h200 sglang ds 32k 显存占用


image.png

h200 sglang qwq-32b 128k显存占用


image.png

注: QwQ-32b是稠密模型,单卡功耗几乎是ds的三倍

一些结论

  1. h200机器, sglang/vllm引擎, ds16k也需要8卡,无法用7,6,5卡运行(倍数限制),4卡放不下. 8卡可跑128k. 增大上下文长度,显存占用仅少量增加(几十兆),我们还没有测试超长上下文是否会导致显存明显增加.
  2. h200机器, sglang/vllm引擎, QwQ-32B(128K)单卡可以运行,功耗约是ds单卡的3倍(稠密模型 vs moe模型).
    作为对比h20机器,单卡跑不起来QwQ-32B 128K,需要双卡;单卡最多能跑QwQ-32B 32K,64K也需要双卡.
  3. 对于ds,sglang首token耗时远低于vllm(sglang常常比vllm耗时的一半还少), vllm token生成速度略高于sglang(vllm比sglang快约8%)
  4. 对于ds,H200比H20, token生成耗时几乎只有一半(生成速度快接近1倍), 首token耗时快10%-100%不等

注: 上面的速度评测, 在输入输出均为1000 token,并发在20-50的清苦啊下得出的结论, 不同输入输出长度结论会有较大浮动.

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容