# 使用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）   
![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002641596878.png "点击放大")
#### 方案优势
基于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]  - 镜像：使用驱动为535，CUDA为12.2的镜像。  - 系统盘：200G  - 数据盘：1000G  - 弹性公网IP：现在购买  - 线路：全动态BGP  - 公网带宽：按流量计费  - 带宽大小：100 Mbit/s   | ECS涉及以下几项费用： - 云服务器  - 云硬盘  - 弹性公网IP   具体的计费方式及标准请参考[计费模式概述](https://support.huaweicloud.com/price-ecs/ecs_billing_2001.html)。 |
   
 表2满血模型运行可选的GPU弹性云服务器规格 
| 编号 | 模型名称                                               | 最小所需规格         | GPU卡          | 节点数量 |
|:---|:---|:---|:---|:---|
| 0  | DeepSeek-R1 DeepSeek-V3 | p2s.16xlarge.8 | V100(32G)\*8卡 | 8台   |
| 0  | DeepSeek-R1 DeepSeek-V3 | p2v.16xlarge.8 | V100(16G)\*8卡 | 16台  |
| 0  | DeepSeek-R1 DeepSeek-V3 | pi2.4xlarge.4  | T4(16G)\*8卡   | 16台  |
   
![](https://support.huaweicloud.com/bestpractice-ecs/public_sys-resources/note_3.0-zh-cn.png)
请联系华为云技术支持来选择适合你的部署的GPU资源。
#### 基于ray+docker+vllm多机多卡手动部署DeepSeek-R1/V3模型步骤
Linux实例基于ray+docker+vllm多机多卡手动部署DeepSeek-R1/V3模型操作步骤如下：
1. [创建GPU弹性云服务器。]
2. [驱动和CUDA的前置条件检查。]
3. [安装ray。]
4. [安装docker。]
5. [安装nvidia-container-toolkit。]
6. [安装modelscope等依赖包。]
7. [下载docker镜像。]
8. [下载run_cluster.sh脚本文件。]
9. [下载DeepSeek-R1/V3模型文件。]
10. [启动ray集群head节点和全部worker节点。]
11. [在head节点容器中，启动vllm.server运行大模型。]
12. [调用模型接口测试。]
 
#### 实施步骤
1. 创建GPU弹性云服务器。
   
   1. 镜像选择：建议选择华为云提供的GPU实例的未安装驱动的Huawei Cloud EulerOS 2.0/Ubuntu 22.04公共镜像，勾选自动安装GPU驱动，选择驱动版本535.161.08，CUDA版本12.2.0，以下一些依赖安装都是基于Ubuntu 22.04系统的，其他系统请自行参考安装。
      图2GPU实例镜像选择和自动安装GPU驱动选择   
      ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002336618281.png "点击放大") 
   
   2. 需要创建EIP，方便依赖环境下载，方便调用模型接口进行推理。
   
   
   
   
2. 驱动和CUDA的前置条件检查。
   
   执行以下命令，查看显卡基本信息。
   ```
   nvidia-smi
   ```
   如果使用的不是推荐的镜像和驱动版本，请参考[手动安装GPU加速型ECS的Tesla驱动](https://support.huaweicloud.com/usermanual-ecs/ecs_03_0174.html)方法更新驱动到535版本，CUDA更新到12.2。
   
   
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。
   
   ![](https://support.huaweicloud.com/bestpractice-ecs/public_sys-resources/note_3.0-zh-cn.png)
   以下操作以Ubuntu22.04操作系统为例，其他操作系统请参考[NVIDIA官网](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html#installing-with-apt)。
   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
      ```
      ![](https://support.huaweicloud.com/bestpractice-ecs/public_sys-resources/note_3.0-zh-cn.png)
      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
     ```
     ![](https://support.huaweicloud.com/bestpractice-ecs/public_sys-resources/note_3.0-zh-cn.png)
     vllm版本当前使用v0.7.3，后续会持续更新。
     
   
   
   
   
8. 下载run_cluster.sh脚本文件。
   
   从<https://github.com/vllm-project/vllm/blob/main/examples/ray_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
       ```
       
    
    
    ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002336167357.png "点击放大")
    
    
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"}]
       }'
       ```
       ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002336300253.png "点击放大")
       
    
    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接口来对话。
       
    
    
    
    
 
