Skip to content

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. 每节点独立跑中等模型 ×66 个独立 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-A3Bfp1655~61G1TP=8
Qwen3-32Bfp1665G1TP=8
Llama-3.3-70BGPTQ-Int4~40G1TP=4(留足 KV)
gpt-oss-120b / 122B-A10BGPTQ-Int4~65G1TP=8
Qwen3-235B-A22BGPTQ-Int4~130G1TP=8 ✅ 单机可跑
Llama-3.3-70Bfp16~140G1TP=8
Llama-3.1-405BGPTQ-Int4~230G2TP=8 + PP=2
DeepSeek-R1/V3 671BGPTQ-Int4~380~420G2TP=8 + PP=2
Kimi-K2 1TGPTQ-Int4~550~600G3TP=8 + PP=3
DeepSeek-R1 671Bfp16~1340G6TP=8 + PP=6 ⚠️ KV 几乎无富余,不推荐
任何 ≥671BFP8❌ 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                  # 首次联调打开,正常后改 WARN

4.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 status

6.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 8000

8. 统一入口: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 initNCCL_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 halfVLLM_USE_V1=0;AWQ 模型换 GPTQ 或换 LMDeploy
加载模型特别慢模型在 NFS 上 → 改本地盘或先 rsync 预热;检查磁盘 IO
某副本 502nginx 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)拉长上下文。