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

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

应用场景

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

方案架构

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

方案优势

基于ray+docker+vllm多机多卡从0开始手动部署DeepSeek-R1/V3模型,深刻理解模型运行依赖,体验DeepSeek满血版模型带来的极致推理性能。

资源和成本规划

表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
  • 系统盘: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台

请联系华为云技术支持来选择适合你的部署的GPU资源。

实施步骤

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

    1. 镜像选择:建议选择华为云提供的GPU实例的未安装驱动的Huawei Cloud EulerOS 2.0/Ubuntu 22.04公共镜像,以下一些依赖安装都是基于Ubuntu 22.04系统的,其他系统请自行参考安装。
      图2 GPU实例镜像选择
    2. 需要创建EIP,方便依赖环境下载,方便调用模型接口进行推理。

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

    请参考手动安装GPU加速型ECS的Tesla驱动安装535版本驱动,12.2版本CUDA。

  3. 安装ray。

    1. 执行以下命令,更新pip。
      apt-get install -y python3 python3-pip
    2. 执行以下命令,安装ray。
      pip install -U ray
    3. 执行以下命令,验证安装。
      python3 -c "import ray; ray.init()"

  4. 安装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

  5. 安装nvidia-container-toolkit。

    以下操作以Ubuntu22.04操作系统为例,其他操作系统请参考NVIDIA官网

    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

  6. 安装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进行下载。

  7. 下载docker镜像。

    下载vllm提供的最新容器镜像,或下载华为云hgcs异构团队制作的镜像。

    • 执行以下命令,下载vllm官网镜像。
      docker pull vllm.vllm-openai:latest
    • 执行以下命令,下载hgcs团队制作的镜像。
      docker pull swr.cn-north-4.myhuaweicloud.com/hgcs/vllm0.7.3-pt312-ray2.43-cuda12.2:latest

      vllm版本当前使用v0.7.3,后续会持续更新。

  8. 下载run_cluster.sh脚本文件。

    https://github.com/vllm-project/vllm/blob/main/examples/online_serving/run_cluster.sh下载run_cluster.sh文件用来启动ray集群。

  9. 下载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小时。

  10. 启动ray集群head节点和全部worker节点。

    1. 执行以下命令,启动ray集群的head节点。
      bash run_cluster.sh ${镜像名} ${head节点IP} --head ${模型路径}  -e VLLM_HOST_IP=${head节点IP} -e ${通信库环境变量}

      示例如下:

      bash run_cluster.sh swr.cn-north-4.myhuaweicloud.com/hgcs/vllm0.7.3-pt312-ray2.43-cuda12.2 192.168.200.249 --head /root/deepseek-ai/DeepSeek-R1 -e VLLM_HOST_IP=192.168.200.249 -e GLOO_SOCKET_IFNAME=eth0 &
    2. 命令执行成功后可以看到已经有一个容器启动了,可通过执行以下命令进入容器。
      docker exec -it ${容器名} /bin/bash
    3. 执行以下命令,查看ray cluster运行状态。
      ray status
    4. 执行以下命令,启动ray集群的全部worker节点。
      bash run_cluster.sh ${镜像名} ${head节点IP} --worker ${模型路径}  -e VLLM_HOST_IP=${当前节点IP} -e ${通信库环境变量}

      样例:

      bash run_cluster.sh swr.cn-north-4.myhuaweicloud.com/hgcs/vllm0.7.3-pt312-ray2.43-cuda12.2 192.168.200.249 --worker /root/deepseek-ai/DeepSeek-R1 -e VLLM_HOST_IP=192.168.200.211 -e GLOO_SOCKET_IFNAME=eth0 &
    5. 命令执行成功后可以看到已经有一个容器启动了,可通过执行以下命令进入容器。
      docker exec -it ${容器名} /bin/bash
    6. 执行以下命令,查看ray cluster运行状态。
      ray status

  11. 在head节点容器中,启动vllm.server运行大模型。

    1. 进入head节点的容器。
    2. 执行以下命令,运行大模型。
      vllm serve ${模型映射地址} --served_model_name ${model名称} --tensor-parallel-size ${GPU_NUM} --gpu_memory_utilization 0.9 --max_model_len 20480 --dtype float16 --enforce-eager

      ${模型映射地址} 可以修改为run_cluster.sh脚本中映射的地址,默认是/root/.cache/huggingface/。

  12. 调用模型接口测试。

    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接口来对话。