部署DeepSeek模型,进群交流最in玩法!
立即加群
发布
社区首页 >专栏 >DeepSeek-多机多卡集群部署

DeepSeek-多机多卡集群部署

作者头像
运维小路
发布2025-03-06 23:14:33
发布2025-03-06 23:14:33
17100
代码可运行
举报
文章被收录于专栏:运维小路运维小路
运行总次数:0
代码可运行

前面我们无论是直接部署,还是容器部署都还是单机的模型,受单机GPU限制,并不能跑比较大的模型,今天我们将用多台机器组成一个集群来跑一个更大的模型。

1.准备机器

机器IP

GPU

备注

172.16.0.102

Tesla T4*2

复用旧机器,扩容了GPU

172.16.0.43

Tesla T4*2

新机器

172.16.0.65

Tesla T4*2

新机器

2.安装驱动及必要软件

新加入的机器需要分别安装驱动,Docker,Nvidia-Docker

代码语言:javascript
代码运行次数:0
复制
#安装驱动
dpkg -i nvidia-driver-local-repo-ubuntu2004-570.86.15_1.0-1_amd64.deb 
cp /var/nvidia-driver-local-repo-ubuntu2004-570.86.15/nvidia-driver-local-C202025D-keyring.gpg /usr/share/keyrings/
apt-get update
#安装驱动,甚至都不用安装cuda驱动就可以,安装完成系统需要重启系统
apt-get install nvidia-driver-570
reboot
代码语言:javascript
代码运行次数:0
复制
#安装Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu focal stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update
apt install -y docker-ce docker-ce-cli containerd.io
systemctl start docker
systemctl enable docker
代码语言:javascript
代码运行次数:0
复制
#安装nvidia-docker
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
apt-get update
apt-get install -y nvidia-docker2
systemctl restart docker

3.下载镜像&模型下载

可以参考上一小节或者直接从第一台服务器复制过来,过程略。

4.准备集群脚本

代码语言:javascript
代码运行次数:0
复制
wget https://github.com/vllm-project/vllm/blob/main/examples/online_serving/run_cluster.sh

5.启动主节点

我这里选择的是是102这台服务器作为主节点。

代码语言:javascript
代码运行次数:0
复制
bash run_cluster.sh \
    vllm/vllm-openai:latest \
    172.16.0.102 \
    --head \
    /root/deepseekr1_32b/deepseek-ai/DeepSeek-R1-Distill-Qwen-32B \
    -e VLLM_HOST_IP=172.16.0.102 \
    -e GLOO_SOCKET_IFNAME=eth0 \
    -e TP_SOCKET_IFNAME=eth0 &

简单来理解就是启动一个主节点(--head参数就是主节点),然后把本地的模型挂载到了容器,并指定vLLM的监听的IP和IP对应的网卡名字。

6.启动从节点43

代码语言:javascript
代码运行次数:0
复制
bash run_cluster.sh \
    vllm/vllm-openai:latest \
    172.16.0.102 \
    --worker \
    /root/deepseekr1_32b/deepseek-ai/DeepSeek-R1-Distill-Qwen-32B \
    -e VLLM_HOST_IP=172.16.0.43 \
    -e GLOO_SOCKET_IFNAME=eth0 \
    -e TP_SOCKET_IFNAME=eth0 &

这里就是启动了一个从节点(--worker),并指定主节点的ip地址是172.16.0.102。

7.启动从节点65

代码语言:javascript
代码运行次数:0
复制
bash run_cluster.sh \
    vllm/vllm-openai:latest \
    172.16.0.102 \
    --worker \
    /root/deepseekr1_32b/deepseek-ai/DeepSeek-R1-Distill-Qwen-32B \
    -e VLLM_HOST_IP=172.16.0.65 \
    -e GLOO_SOCKET_IFNAME=eth0 \
    -e TP_SOCKET_IFNAME=eth0 &

这里就是又启动了一个从节点(--worker),并指定主节点的ip地址是172.16.0.102。

8.检查集群状态

代码语言:javascript
代码运行次数:0
复制
#进入主节点容器
docker exec -it node bash

这里显示3个节点,总共6个GPU(下图是我只有5张卡的截图),显示以后就ray集群启动成功。然后3台集群6张卡组成了一个小集群。

9.启动服务

代码语言:javascript
代码运行次数:0
复制
#进入主节点容器
docker exec -it node bash
代码语言:javascript
代码运行次数:0
复制
vllm serve \
  --model-path /root/.cache/huggingface/ \
  --tensor-parallel-size 2 \
  --pipeline-parallel-size 3 \
  --served-model-name "DeepSeek" \
  --host 0.0.0.0 \
  --port 8000 \
  --gpumemoryutilization 0.95 \
  --trust-remote-code \
  --max-num-batched-tokens 8192 \
  --max-model-len 16384 \
  --enable-reasoning \
  --reasoning-parser deepseekr1 \
  --enable-prefix-caching \
  --enable-chunked-prefill \
  --dtyp=half 
  • /root/.cache/huggingface/:指定模型存储路径,其实就是我们启动容器的挂载进去的目录
  • --tensor-parallel-size 2 设置张量并行度为2,这意味着模型将在两个GPU上分割运行。简单理解就是每个机器有几张卡就选多少
  • --pipeline-parallel-size 3 设置流水线并行度为3,模型将被分为三个阶段来执行。简单理解就是有几个机器都选多少。
  • --served-model-name "DeepSeek":设置服务暴露的模型名称为 “DeepSeek”。
  • --host 0.0.0.0:设置服务监听所有的网络接口。
  • --port 8000:设置服务端口为8000。
  • --gpu_memory_utilization 0.95:设置GPU显存利用率阈值为95%。
  • --trust-remote-code:允许执行模型自定义代码,这可能会带来安全风险。
  • --max-num-batched-tokens 8192:设置单批次最大token数为8192。
  • --max-model-len 16384:设置模型最大上下文长度为16384。
  • --enable-reasoning:启用推理增强模式。
  • --reasoning-parser deepseek_r1:指定推理解析器为 “deepseek_r1”。
  • --enable-prefix-caching:激活前缀缓存优化。
  • --enable-chunked-prefill:启用分块预填充。
  • --dtype=half:使用半精度浮点数(FP16),这有助于减少显存使用并可能提高推理速度。

可以看到2张GPU显卡都被利用起来。

如果机器足够多,显存够多,则可以跑更大的模型。当然我这里都是前台启动,只是测试验证功能,后续还可以根据自己的情况,再对接Open WebUI及后台启动等功能,我这里的演示环境就先到这里。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-03-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维小路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档