当前位置: 首页 > news >正文

Multi-Node LLM Serving-vLLM+Ray(Docker)

Multi-Node LLM Serving-vLLM+Ray(Docker)

vLLM+Ray(Docker) 双节点离线一键部署完整方案

适配:vllm/vllm-openai镜像、离线禁 HF 联网、双 8 卡 = 16 张量并行、MiniMax-M2.5-AWQ、脚本挂载启动、自动等待 Worker 就绪再拉起 vLLM

环境预设

  • Head 节点 IP:192.168.1.10
  • Worker 节点 IP:192.168.1.11
  • 宿主机模型路径:/data/models/minimax-m2.5-awq
  • 宿主机脚本目录:/data/vllm_scripts
  • 网卡名称替换为你实际网卡(示例ens160)
  • Ray 端口:6379;vLLM 服务端口:8000;Ray Dashboard:8265

两台宿主机统一准备脚本文件

  1. 创建脚本目录

    mkdir -p /data/vllm_scripts && cd /data/vllm_scripts

  2. Ray Head 启动脚本 start_ray_head.sh

#!/bin/bash
set -e# 基础环境变量
export VLLM_HOST_IP=192.168.1.10
#export NCCL_SOCKET_IFNAME=ens160
#export GLOO_SOCKET_IFNAME=ens160# 启动Ray Head
echo "=== 启动Ray Head节点 ==="
ray start --head \--node-ip-address=192.168.1.10 \--port=6379 \--dashboard-host=0.0.0.0 \--num-gpus=8 \--num-cpus=128# 轮询等待2个Active节点(适配新版ray status无Total Nodes行)
MAX_WAIT=100
COUNT=0
TARGET_NODE=2
echo "=== 等待Worker节点接入集群 ==="
while [ $COUNT -lt $MAX_WAIT ]; doNODE_COUNT=$(ray status 2>/dev/null | grep -A 10 "Active:" | grep "node_" | wc -l)if [ "${NODE_COUNT}" -eq "${TARGET_NODE}" ]; thenecho "✅ Worker已上线,节点总数:${NODE_COUNT}"breakfiCOUNT=$((COUNT+1))echo "⏳ 当前节点数: ${NODE_COUNT}, 等待进度${COUNT}/${MAX_WAIT}"sleep 3
done# 等待超时退出
if [ $COUNT -ge $MAX_WAIT ]; thenecho "❌ 等待超时,Worker未接入,终止启动"exit 1
fi# 后台启动vLLM离线推理服务
# 注:也可使用 `vllm serve` 简写命令启动,等价于下面 python -m 方式
echo "=== 启动vLLM OpenAI服务 ==="
python -m vllm.entrypoints.openai.api_server \--model /data/models/minimax-m2.5-awq \--local-files-only \--tensor-parallel-size 16 \--pipeline-parallel-size 1 \--host 0.0.0.0 \--port 8000 \--gpu-memory-utilization 0.95 \--max-model-len 196608 \--distributed-executor-backend ray \--enforce-eager > /tmp/vllm_run.log 2>&1 &# 等待vLLM服务就绪
echo "=== 等待vLLM服务启动 ==="
VLLM_WAIT=0
VLLM_MAX_WAIT=60
while [ $VLLM_WAIT -lt $VLLM_MAX_WAIT ]; doif curl -s http://localhost:8000/v1/models > /dev/null 2>&1; thenecho "✅ vLLM服务已就绪"breakfiVLLM_WAIT=$((VLLM_WAIT+1))echo "⏳ vLLM启动中... ${VLLM_WAIT}/${VLLM_MAX_WAIT}"sleep 5
doneif [ $VLLM_WAIT -ge $VLLM_MAX_WAIT ]; thenecho "❌ vLLM服务启动超时,请检查日志: /tmp/vllm_run.log"exit 1
fi# 容器常驻不退出
echo "=== 所有服务启动完成,容器持续运行 ==="
tail -f /dev/null
  1. Ray Worker 启动脚本 start_ray_worker.sh
#!/bin/bash
set -e# 基础环境变量
export VLLM_HOST_IP=192.168.1.11
#export NCCL_SOCKET_IFNAME=ens160
#export GLOO_SOCKET_IFNAME=ens160# 等待Head节点Ray服务就绪
echo "=== 等待Head节点Ray服务 ==="
HEAD_WAIT=0
HEAD_MAX_WAIT=30
while [ $HEAD_WAIT -lt $HEAD_MAX_WAIT ]; doif ray status --address=192.168.1.10:6379 > /dev/null 2>&1; thenecho "✅ Head节点Ray服务已就绪"breakfiHEAD_WAIT=$((HEAD_WAIT+1))echo "⏳ 等待Head节点... ${HEAD_WAIT}/${HEAD_MAX_WAIT}"sleep 3
doneif [ $HEAD_WAIT -ge $HEAD_MAX_WAIT ]; thenecho "❌ Head节点Ray服务未就绪,终止启动"exit 1
fi# 接入Head Ray集群
echo "=== Worker节点连接Ray集群 ==="
ray start --address=192.168.1.10:6379 \--node-ip-address=192.168.1.11 \--num-gpus=8 \--num-cpus=128# 验证Worker已加入集群
echo "=== 验证Worker节点状态 ==="
ray status# 容器常驻,持续保活Ray Worker进程
echo "=== Ray Worker就绪,进入常驻状态 ==="
tail -f /dev/null
  1. 赋予脚本执行权限
    chmod +x /data/vllm_scripts/*.sh

节点容器启动命令(一键拉起)

  1. Ray Worker 节点 先执行(必须优先启动)
# Ray Worker 节点(必须优先启动)
docker run -d \--name vllm-ray-worker \--privileged \--net=host \--shm-size=64g \-v /data/models:/data/models \-v /data/vllm_scripts:/opt/scripts \-v /etc/localtime:/etc/localtime \-e HF_DATASETS_OFFLINE=1 \-e TRANSFORMERS_OFFLINE=1 \-e HF_HUB_OFFLINE=1 \-e HF_HUB_DISABLE_TELEMETRY=1 \-e HF_HUB_LOCAL_FILES_ONLY=1 \-e VLLM_NO_USAGE_STATS=1 \-e VLLM_DISABLE_UPDATES=1 \vllm/vllm-openai \/opt/scripts/start_ray_worker.sh
# Ray Head 节点(自动等待 Worker 再启 vLLM)
docker run -d \--name vllm-ray-head \--privileged \--net=host \--shm-size=64g \-v /data/models:/data/models \-v /data/vllm_scripts:/opt/scripts \-v /etc/localtime:/etc/localtime \-e HF_DATASETS_OFFLINE=1 \-e TRANSFORMERS_OFFLINE=1 \-e HF_HUB_OFFLINE=1 \-e HF_HUB_DISABLE_TELEMETRY=1 \-e HF_HUB_LOCAL_FILES_ONLY=1 \-e VLLM_NO_USAGE_STATS=1 \-e VLLM_DISABLE_UPDATES=1 \vllm/vllm-openai \/opt/scripts/start_ray_head.sh

校验 & 运维操作集

  1. 查看 Ray 集群状态
# Head容器内查看双节点
docker exec vllm-ray-head ray status

Active 列表出现 2 个 node_id、资源总量 16GPU 即集群正常。

  1. 查看启动全流程日志
# Head完整启动日志(Ray+等待+vLLM启动)
docker logs -f vllm-ray-head
# Worker Ray日志
docker logs -f vllm-ray-worker
  1. 查看 vLLM 推理实时日志

docker exec -it vllm-ray-head tail -f /tmp/vllm_run.log

  1. 接口测试验证服务
curl http://192.168.1.10:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model":"minimax-m2.5-awq",
"messages":[{"role":"user","content":"测试多节点长上下文推理"}]
}'curl http://192.168.1.10:8000/v1/models
  1. 启停销毁命令
# 停止容器服务
docker stop vllm-ray-head vllm-ray-worker
# 彻底删除容器重建
docker rm -f vllm-ray-head vllm-ray-worker
  1. 手动进入容器调试
# Head进入交互终端
docker exec -it vllm-ray-head bash
# Worker进入交互终端
docker exec -it vllm-ray-worker bash

关键配置说明

  1. 显存与 Token 最大化
    --gpu-memory-utilization 0.95 极限榨取显存,搭配196608模型原生最大上下文;若出现 OOM,下调至 0.90 稳定生产。

  2. 离线保障
    容器环境变量 + vLLM --local-files-only 双重锁死,完全不会访问 huggingface 外网。

  3. 常驻原理
    Worker 用tail -f /dev/null保活 Ray 进程;Head 同方式保活,vLLM 后台异步运行不阻塞常驻 PID1。

  4. 通信兼容
    NCCL/GLOO 双通信网卡绑定,解决跨节点多卡张量并行通信超时问题。

  5. Ray 适配修复
    脚本改用统计node_行数判断节点数,兼容无Total Nodes输出的 Ray 新版本。

Todo

  • 采用.env存储环境变量、常量
  • 增加容器管理sh,控制检测、启、停容器
  • vllm port 8001
http://www.jsqmd.com/news/1001400/

相关文章:

  • 2026重庆沙发翻新换皮换布上门服务哪家靠谱?匠阁/御匠/锦修/优势推荐指南 - 我叫一
  • 基于i.MX 6 SABRE平台的汽车信息娱乐系统开发实战指南
  • 2026指南:防静电泡沫制造企业实力解构——EPE/导电海绵/包装内衬防静电方案专业之选 - 品牌发掘
  • 舒扬|四川华锐净化工程有限公司 个人简介 - 哈尺大哥
  • MCF51QW256嵌入式MCU硬件加密与低功耗设计实战解析
  • 2026年GEO源头厂商深度横向评测:杭州爱搜索技术壁垒与选型指南 - 品牌报告
  • 2026年泡沫箱厂家推荐榜单:EPS泡沫/泡沫托/异形泡沫盒/防静电泡沫/快递泡沫箱/定制泡沫箱源头实力工厂优选 - 品牌发掘
  • 2026武汉沙发翻新换皮换布上门服务哪家靠谱?匠阁/御匠/锦修/优势推荐指南 - 我叫一
  • 2026年保定财税公司全面对比,托管服务与价格优势分析! - 互联百晓生
  • 2026年净水器推荐排行榜:全屋净水/中央软水/别墅净水/新房装修净热一体机品牌深度指南 - 品牌发掘
  • 2026 广州新能源汽车音响改装双冠标杆:花都大明汽车音响 无损升级零影响整车质保实力领跑全行业 - 汽车音响改装
  • 如何让老旧电视焕发新生:MyTV-Android开源电视直播解决方案终极指南
  • 2026年洛阳快递泡沫箱厂家靠谱推荐:保温缓冲包装箱、防震泡沫箱、生鲜冷链专用箱优质源头工厂精选 - 品牌发掘
  • 2026无锡本地GEO优化哪家靠谱?行业深度测评+TOP3机构榜单 - wxxwlm
  • 工业吸尘器十大排名榜2026实测:史沃斯为何稳坐榜首? - 工业清洁测评社
  • Happy Island Designer:3个简单步骤打造你的终极岛屿规划工具
  • 2026年6月可靠的热流道厂家哪个好,电子外壳热流道/整体式热流道/家电热流道/塑胶模具热流道,热流道实力厂家哪家好 - 品牌推荐师
  • 寄大件怎么选物流最省钱?这份比价攻略请收好 - 快递物流资讯
  • 2026杭州沙发翻新换皮换布上门服务哪家靠谱?匠阁/御匠/锦修/优势推荐指南 - 我叫一
  • 2026年泡沫轻质包装制造企业实力解析:精密包装与防震缓冲的源头工厂抉择 - 品牌发掘
  • 【分享】16.3 写给35+的人:你不是被嫌弃了,你是被错误定价了
  • 2026北京沙发翻新换皮换布上门服务哪家靠谱?匠阁/御匠/锦修/优势推荐指南 - 我叫一
  • 2026 阜阳靠谱搬家公司综合实力排行榜,好运来搬家(权威测评版) - 星际AI
  • 2026广州沙发翻新换皮换布上门服务哪家靠谱?匠阁/御匠/锦修/优势推荐指南 - 我叫一
  • 2026年 洛阳水果泡沫箱源头厂家推荐:保鲜耐用、环保防震的专业企业精选 - 品牌发掘
  • 用NLP解剖《从0到1》:文本分析实战指南
  • 异构SoC BSC9131:微基站核心处理器的架构解析与工程实践
  • MonkeyCode免费策略深度解读:AI编程工具如何做到永久免费
  • 基于MPC8275与PM4351的E1接口子卡设计:从硬件到驱动的完整实现
  • 前端程序员转大模型:从页面仔到AI产品工程师