主题
6×(8×V100 32G + 200G 网卡)大模型集群落地方案
集群规模:6 台 GPU 服务器,每台 8×NVIDIA V100 32G(SXM2/PCIe)+ 80 核 CPU + 380G 内存 + 200G 融合网卡(RoCEv2/IB)。 合计:48 卡 / 1536G 显存 / 480 核 / 2.28T 内存 / 节点间 200Gbps。
前置约束(V100 Volta 架构,务必先读):仅支持 fp16(无 bf16/FP8);vLLM 需
VLLM_USE_V1=0; vLLM 在 Volta 不支持 AWQ(GPTQ 可用;AWQ 需换 LMDeploy)。详见《8×V100 32G 部署 Qwen3.5-27B 实战》。
1. 总体结论(先看这里)
| 部署模式 | 做法 | 适合场景 | 评价 |
|---|---|---|---|
| A. 整集群跑一个超大模型 | TP=8 节点内 + PP=N 跨节点,Ray 编排 | 必须用 671B 满血版 | 可行但弹性差,单点故障全停 |
| B. 每节点独立跑中等模型 ×6 | 6 个独立 vLLM 实例 + 前置负载均衡 | 高并发在线服务 | ✅ 吞吐最大化,推荐主力 |
| C. 混合分池(推荐落地) | 2 节点跑 671B GPTQ + 4 节点各跑 30B 级 | 质量+并发兼顾 | ✅ 本文主推方案 |
核心原则:V100 节点内互联(NVLink ~300GB/s 或 PCIe 32GB/s)远快于跨节点 200Gbps(~25GB/s),所以 张量并行(TP)只放在节点内,跨节点一律用流水线并行(PP)或干脆独立实例。
2. 可跑模型清单(48×32G,fp16/GPTQ)
| 模型 | 精度 | 权重大小 | 最少节点数 | 并行方式 |
|---|---|---|---|---|
| Qwen3.5-27B / Qwen3-30B-A3B | fp16 | 55~61G | 1 | TP=8 |
| Qwen3-32B | fp16 | 65G | 1 | TP=8 |
| Llama-3.3-70B | GPTQ-Int4 | ~40G | 1 | TP=4(留足 KV) |
| gpt-oss-120b / 122B-A10B | GPTQ-Int4 | ~65G | 1 | TP=8 |
| Qwen3-235B-A22B | GPTQ-Int4 | ~130G | 1 | TP=8 ✅ 单机可跑 |
| Llama-3.3-70B | fp16 | ~140G | 1 | TP=8 |
| Llama-3.1-405B | GPTQ-Int4 | ~230G | 2 | TP=8 + PP=2 |
| DeepSeek-R1/V3 671B | GPTQ-Int4 | ~380~420G | 2 | TP=8 + PP=2 |
| Kimi-K2 1T | GPTQ-Int4 | ~550~600G | 3 | TP=8 + PP=3 |
| DeepSeek-R1 671B | fp16 | ~1340G | 6 | TP=8 + PP=6 ⚠️ KV 几乎无富余,不推荐 |
| 任何 ≥671B | FP8 | — | — | ❌ Volta 无 FP8 单元,不要尝试 |
蒸馏小模型(DeepSeek-R1-Distill-Qwen-32B 等)fp16 单机 TP=8 轻松跑,可作高并发补充。
3. 推荐架构(方案 C:混合分池)
┌────────── 统一 API 网关(nginx / Higress)──────────┐
│ /v1/chat/completions 按 model 路由 │
└───────┬──────────────────────┬──────────────────────┘
│ │
┌────────────▼─────────┐ ┌────────▼────────┐
│ 高质量池(2 节点) │ │ 高并发池(4 节点)│
│ DeepSeek-R1-671B │ │ Qwen3-30B-A3B │
│ GPTQ-Int4 │ │ fp16 ×4 副本 │
│ TP=8 + PP=2 (Ray) │ │ 各节点独立 TP=8 │
└──────────────────────┘ └─────────────────┘- 业务按"难度"路由:常规问答/Agent → 高并发池;复杂推理 → 671B 池
- 任意单节点故障只损失 1/4 并发或 671B 池降级,不整体停摆
- 后续可弹性调整:淡季把 671B 池缩成 0,6 节点全做并发池
4. 网络规划与验证(200G 融合网卡)
4.1 RoCE/IB 检查(每台执行)
bash
ibstat # 确认网卡 Active、速率 200G
ibv_devices # 记住 HCA 名(如 mlx5_0),NCCL 要用
# 带宽实测(两台互测,期望 ≥ 190 Gbps)
ib_write_bw -d mlx5_0 --report_gbits # 服务端
ib_write_bw -d mlx5_0 --report_gbits <对端IP> # 客户端4.2 NCCL 关键环境变量(跨节点通信成败在此)
bash
export NCCL_IB_DISABLE=0 # 启用 IB/RoCE
export NCCL_IB_HCA=mlx5_0 # 指定 200G 网卡
export NCCL_IB_GID_INDEX=3 # RoCEv2 固定为 3(纯 IB 不需要)
export NCCL_SOCKET_IFNAME=bond0 # 管理网口(Ray/bootstrap 用)
export NCCL_DEBUG=INFO # 首次联调打开,正常后改 WARN4.3 节点内拓扑确认
bash
nvidia-smi topo -m
# 看到 GPU 间 NV# 标记 = NVLink;全 PIX/PXB = PCIe 机型
# PCIe 机型节点内 TP=8 通信较慢,可考虑 TP=4 双实例/节点5. 系统准备(6 台统一,可用 ansible 批量)
bash
# 1) 驱动与容器(全节点同版本)
# 驱动 560.28.03+ / nvidia-container-toolkit / Docker(略,见 V100 单机实战文档)
# 2) 主机名与 hosts(6 台互指,示例网段按实际改)
cat >> /etc/hosts <<'EOF'
192.168.10.11 gpu-01
192.168.10.12 gpu-02
192.168.10.13 gpu-03
192.168.10.14 gpu-04
192.168.10.15 gpu-05
192.168.10.16 gpu-06
EOF
# 3) 模型仓库:两种选择
# a) 各节点本地 NVMe 各存一份(推荐,加载快、无单点):rsync 分发
rsync -aP /data/models/ gpu-02:/data/models/
# b) NFS 共享(省空间,加载慢):gpu-01 导出 /data/models,其余挂载
# 4) 防火墙放行:Ray 6379/8265/10001、NCCL 高端口、vLLM 8000;或直接信任集群内网统一推理镜像(沿用单机实战镜像即可):
bash
docker pull vllm/vllm-openai:v0.9.2 # V0 引擎最后完整支持 Volta 的版本线6. 实操 A:2 节点部署 DeepSeek-R1-671B-GPTQ(Ray + vLLM)
6.1 启动 Ray 集群
bash
# gpu-01(head)
docker run -d --name ray-head --network host --shm-size 64g --gpus all \
-v /data/models:/data/models \
-e NCCL_IB_HCA=mlx5_0 -e NCCL_IB_GID_INDEX=3 -e NCCL_SOCKET_IFNAME=bond0 \
vllm/vllm-openai:v0.9.2 \
ray start --head --port=6379 --dashboard-host=0.0.0.0 --block
# gpu-02(worker)
docker run -d --name ray-worker --network host --shm-size 64g --gpus all \
-v /data/models:/data/models \
-e NCCL_IB_HCA=mlx5_0 -e NCCL_IB_GID_INDEX=3 -e NCCL_SOCKET_IFNAME=bond0 \
vllm/vllm-openai:v0.9.2 \
ray start --address=gpu-01:6379 --block
# 验证:gpu-01 上执行,应看到 2 节点 / 16 GPU
docker exec ray-head ray status6.2 启动 vLLM(TP=8 节点内 + PP=2 跨节点)
bash
docker exec -it ray-head bash -c '
export VLLM_USE_V1=0 \
VLLM_WORKER_MULTIPROC_METHOD=spawn
vllm serve /data/models/DeepSeek-R1-GPTQ-Int4 \
--tensor-parallel-size 8 \
--pipeline-parallel-size 2 \
--dtype half \
--gpu-memory-utilization 0.92 \
--max-model-len 16384 \
--max-num-seqs 32 \
--enable-prefix-caching \
--enable-chunked-prefill \
--port 8000
'要点:
--dtype half(Volta 无 bf16);权重 ~400G 分摊到 2×256G,每卡约占 13G + KV; 首次启动加载模型 5~15 分钟(本地盘);跨节点只有 PP 激活值传输,200G 网卡够用。
7. 实操 B:4 节点高并发池(Qwen3-30B-A3B ×4 副本)
每台独立部署(就是单机实战的模式,无需 Ray):
bash
# gpu-03 ~ gpu-06 各执行
docker run -d --name vllm-30b --network host --shm-size 32g --gpus all \
-v /data/models:/data/models \
-e VLLM_USE_V1=0 \
vllm/vllm-openai:v0.9.2 \
vllm serve /data/models/Qwen3-30B-A3B \
--tensor-parallel-size 8 \
--dtype half \
--gpu-memory-utilization 0.90 \
--max-model-len 32768 \
--max-num-seqs 128 \
--enable-prefix-caching \
--port 80008. 统一入口:API 网关(nginx 最小配置)
nginx
# 部署在任一管理节点(或 gpu-01),按 model 字段路由可换 Higress/one-api
upstream pool_fast {
least_conn;
server gpu-03:8000 max_fails=2 fail_timeout=30s;
server gpu-04:8000 max_fails=2 fail_timeout=30s;
server gpu-05:8000 max_fails=2 fail_timeout=30s;
server gpu-06:8000 max_fails=2 fail_timeout=30s;
}
upstream pool_smart {
server gpu-01:8000 max_fails=2 fail_timeout=30s;
}
server {
listen 80;
location /v1/ { # 默认走高并发池
proxy_pass http://pool_fast;
proxy_read_timeout 600s;
}
location /smart/v1/ { # 复杂推理走 671B
proxy_pass http://pool_smart/v1/;
proxy_read_timeout 900s;
}
}需要"一个端点按 model 名自动路由 + API Key 管理 + 用量统计"时,直接上 one-api / Higress AI 网关,nginx 换成它即可。
9. 验证与压测
bash
# 1) 冒烟
curl http://网关/v1/chat/completions -H 'Content-Type: application/json' -d '{
"model":"/data/models/Qwen3-30B-A3B",
"messages":[{"role":"user","content":"你好"}]}'
# 2) 并发压测(观察吞吐与排队)
pip install evalscope
evalscope perf --url http://网关/v1 --model /data/models/Qwen3-30B-A3B \
--parallel 64 --number 512 --api openai
# 3) 跨节点通信体检(671B 池)
docker exec ray-head ray status # 16 GPU 在线
nvidia-smi # 两节点各 8 卡显存应接近
# NCCL 日志确认走 mlx5_0 而非管理网(NCCL_DEBUG=INFO 时可见 NET/IB 字样)10. 监控与高可用
| 项目 | 做法 |
|---|---|
| GPU 监控 | 各节点 dcgm-exporter → Prometheus → Grafana(显存/温度/利用率/Xid 错误) |
| vLLM 指标 | 自带 /metrics(QPS、TTFT、TPOT、KV 占用),接入同一 Prometheus |
| Ray 仪表盘 | gpu-01:8265 |
| 节点故障 | 高并发池 nginx max_fails 自动摘除;671B 池故障 = 整体不可用,需人工拉起 |
| 断点恢复 | vLLM 容器 --restart unless-stopped;Ray 进程写 systemd unit |
| 日常巡检 | 每日 `nvidia-smi -q |
11. 故障速查
| 现象 | 处理 |
|---|---|
ray status 看不到 worker | 防火墙拦 6379/10001;两节点时间不同步(装 chrony);容器没 --network host |
| vLLM 卡在 NCCL init | NCCL_IB_GID_INDEX 没设 3(RoCEv2 最常见);NCCL_SOCKET_IFNAME 指错网卡;先 NCCL_IB_DISABLE=1 走 TCP 验证逻辑再回头查 IB |
| 跨节点吞吐异常低 | NCCL 走了管理网(看 NCCL_DEBUG 日志的 NET/IB vs NET/Socket);ib_write_bw 复测链路 |
| 671B 启动 OOM | 降 --gpu-memory-utilization 到 0.88、缩短 max-model-len;或改 PP=3 用 3 节点 |
| 报 dtype/内核不支持 | 确认 --dtype half、VLLM_USE_V1=0;AWQ 模型换 GPTQ 或换 LMDeploy |
| 加载模型特别慢 | 模型在 NFS 上 → 改本地盘或先 rsync 预热;检查磁盘 IO |
| 某副本 502 | nginx fail_timeout 内自动剔除;查该节点 docker logs vllm-30b 与 Xid 错误 |
12. 容量速查(规划用)
| 池 | 单实例并发(经验值) | 全池能力 |
|---|---|---|
| Qwen3-30B-A3B ×4 | ~100 并发 / 出字 800~1500 tok/s | 约 400+ 并发在线问答 |
| DeepSeek-R1-671B-GPTQ(2 节点) | ~30 并发 / 出字 300~600 tok/s | 复杂推理/报告生成 |
扩容方向:并发不够 → 把 671B 池拆 1 台进并发池;质量不够 → 671B 池加到 3 节点(PP=3)拉长上下文。