文档首页/ 弹性云服务器 ECS/ 最佳实践/ GPU实例最佳实践/ 使用sglang+docker多机多卡手动部署DeepSeek-R1/V3模型(Linux)
更新时间:2025-08-06 GMT+08:00
分享

使用sglang+docker多机多卡手动部署DeepSeek-R1/V3模型(Linux)

应用场景

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

方案架构

本方案至少需要一台主节点和一台从节点。

图1 基于sglang+docker多机多卡手动部署DeepSeek-R1/V3模型示意图(Linux)

方案优势

基于sglang+docker多机多卡从0开始手动部署DeepSeek-R1/V3模型,深刻理解模型运行依赖,体验DeepSeek满血版模型带来的极致推理性能。sglang框架内置了数据并行路由器,可以在worker启动完成后自动将路由器连接到所有的worker,不需要借助外部的ray集群框架,操作起来更加简单方便。

资源和成本规划

表1 资源和成本规划

资源

资源说明

成本说明

虚拟私有云VPC

VPC网段:192.168.0.0/16

免费

虚拟私有云子网

  • 可用区:可用区1
  • 子网网段:192.168.0.0/24

免费

安全组

入方向规则:

  • 优先级:1
  • 策略:允许
  • 类型:IPv4
  • 协议端口:TCP: 80
  • 源地址:0.0.0.0/0

免费

弹性云服务器

  • 计费模式:包年/包月
  • 可用区:可用区1
  • 规格:见表2
  • 镜像:使用驱动为535,CUDA为12.2的镜像。
  • 系统盘:200G
  • 数据盘:1000G
  • 弹性公网IP:现在购买
  • 线路:全动态BGP
  • 公网带宽:按流量计费
  • 带宽大小:100 Mbit/s

ECS涉及以下几项费用:

  • 云服务器
  • 云硬盘
  • 弹性公网IP

具体的计费方式及标准请参考计费模式概述

表2 蒸馏模型运行可选的GPU弹性云服务器规格

编号

模型名称

最小所需规格

GPU卡

0

DeepSeek-R1

DeepSeek-V3

p2s.16xlarge.8

V100(32G)*8卡 * 8台

p2v.16xlarge.8

V100(16G)*8卡 * 16台

pi2.4xlarge.4

T4(16G)*8卡 * 16台

实施步骤

  1. 创建GPU弹性云服务器。

    1. 镜像选择:建议选择华为云提供的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驱动选择
    2. 需要创建EIP,方便依赖环境下载,方便调用模型接口进行推理。

  2. 驱动和CUDA的前置条件检查。

    如果使用的不是推荐的镜像和驱动版本,请参考手动安装GPU加速型ECS的Tesla驱动方法更新驱动到535版本,CUDA更新到12.2。

  3. 安装docker。

    1. 执行以下命令,更新包索引并安装依赖项。
      apt-get update
      apt-get install -y ca-certificates curl gnupg lsb-release
    2. 执行以下命令,添加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
    3. 执行以下命令,设置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
    4. 执行以下命令,安装docker引擎。
      apt update
      apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
    5. 执行以下命令,配置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 
    6. 执行以下命令,验证docker安装是否正常。
      docker --version

  4. 安装nvidia-container-toolkit。

    1. 执行以下命令,添加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
    2. 执行以下命令,设置NVIDIA Container Toolkit的APT源。
      sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list
    3. 执行以下命令,更新索引包并安装NVIDIA Container Toolkit。
      apt update
      apt install -y nvidia-container-toolkit
    4. 执行以下命令,配置docker以使用Nvidia Container Toolkit。
      nvidia-ctk runtime configure --runtime=docker
      systemctl restart docker

  5. 安装modelscope等依赖包。

    1. 执行以下命令,更新升级pip。
      python -m pip install --upgrade pip -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
    2. 执行以下命令,安装modelscope
      pip install modelscope -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple

      modelscope是国内模型开源社区,国内下载会更快,如果在国外,请使用hugging Face进行下载。

  6. 下载docker镜像。

    可以下载sglang提供的最新容器镜像,也可以下载华为云hgcs异构团队制作的镜像。

    1. 执行以下命令,下载sglang官网镜像。
      docker pull lmsysorg/sglang:latest
    2. 执行以下命令,下载hgcs团队制作的镜像。
      docker pull swr.cn-north-9.myhuaweicloud.com/hgcs/lmsysorg/sglang:latest

  7. 下载DeepSeek-R1/V3模型文件。

    1. 执行以下命令,创建下载模型脚本。
      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为例,可以更换自己的目录。

    2. 执行以下命令,下载模型。
      python3 download_models.py

      等待模型下载完成,模型总大小642G,和你的EIP带宽有关,下载时间最长可能超过24小时。

  8. 启动sglang的主节点和全部从节点。

    第一种情况:有roce网络。

    1. 执行以下命令,启动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
    2. 执行以下命令,启动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
    3. 可以添加以下优化参数。
      • 显示指定FP8

        --quantization fp8

        --kv-cache-dtype fp8_e5m2

      • 启用MLA优化

        --enable-torch-compile # 启用PyTorch即时编译(JIT)优化

        --enable-flashinfer-mla # 启用FlashInfer MLA注意力加速

    第二种情况:无roce网络。

    1. 执行以下命令,启动sglang的主节点。

      节点node0:

      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
    2. 执行以下命令,启动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
    3. 可以添加以下优化参数。
      • 显示指定FP8

        --quantization fp8

        --kv-cache-dtype fp8_e5m2

      • 启用MLA优化

        --enable-torch-compile # 启用PyTorch即时编译(JIT)优化

        --enable-flashinfer-mla # 启用FlashInfer MLA注意力加速

  9. 调用模型接口测试。

    1. 调用以下API进行聊天对话。
      curl http://localhost:8000/v1/chat/completions \
      -H "Content-Type: application/json" \
      -d '{
        "model": "DeepSeek-R1",
        "messages": [{"role": "user", "content": "hello\n"}]
      }'

    2. 如果需要流式对话,则需要加上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接口来对话。

常见问题

问题描述:启动sglang的主节点时出现报错:SGLang only supports sm75 and above

原因:GPU显卡计算能力不够,提示至少计算能力要SM7.5。

解决方案:换成计算能力大于等于SM7.5的GPU,例如T4。

相关文档