AI 集群网络 —— InfiniBand、RoCE 与万卡训练

NVL72 内 72 GPU 全互联只是开始——大模型训练要几千甚至几万 GPU。这层网络叫 scale-out。本文专题讲。本章作为第六章网卡的”前传”。

一张全景

graph TB
  GPU[GPU SM]
  HBM[HBM 显存]
  NVL[NVLink/NVSwitch
72-576 GPU 紧耦合] NIC[RDMA 网卡
400G/800G InfiniBand 或 RoCE] SW[Spine/Leaf 交换机
整集群] GPU --- HBM GPU --- NVL NVL -.- NIC NIC --- SW SW --- SW

每跨一层带宽掉 5-10×、延迟涨 5-10×——AI 集群网络设计就是想方设法让最重的通信留在低层

为什么以太网 TCP 不够

传统数据中心的”以太网 + TCP”路径:

1
2
3
应用 → socket → kernel TCP → 网卡驱动 → 网卡 → 链路
延迟:5-50 μs(同机房)
CPU 占用:高(每包都过 kernel)

AI 训练每步要做 AllReduce——成千上万次集合通信,要求微秒级延迟和 CPU 零开销。TCP 完全不行。

RDMA(Remote Direct Memory Access) 就是为这个而生:

graph LR
  A[GPU A 显存] -.- B[GPU B 显存]
  
  A --> N1[网卡 A]
  N1 --> N2[网卡 B]
  N2 --> B
  
  CPU[CPU] -.-> X[不参与
kernel bypass]

RDMA 让网卡直接读写远端显存——不过 CPU、不过 kernel、零拷贝。

RDMA 的两条物理路线

graph TB
  RDMA[RDMA]
  RDMA --> IB[InfiniBand
专用网卡 + 专用交换机
NVIDIA Mellanox 主导] RDMA --> ROCE[RoCE
RDMA over Converged Ethernet
跑在普通以太网上] RDMA --> IWARP[iWARP
RDMA over TCP
已边缘化]

InfiniBand(IB)

历史最悠久——2000 年开始用,原本是 HPC 专用:

1
2
3
4
5
6
7
8
9
10
特点:
- 物理层就是 IB(专用线缆 + 专用交换机)
- 端到端 credit-based 流控(无丢包)
- 微秒级延迟(机内 1-2 μs,跨柜 3-5 μs)
- 单口 200/400/800 Gbps

代次:
EDR (100G) → HDR (200G) → NDR (400G) → XDR (800G)

NVIDIA 收购 Mellanox(2019)后,IB 几乎是 NVIDIA 独家

InfiniBand 是 NVIDIA AI 集群的”默认”网络

RoCE v2

把 RDMA 协议跑在普通以太网上:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
RoCE v1:链路层 RDMA,只能同 LAN
RoCE v2:UDP/IP 上 RDMA,可路由
现在大家说 RoCE 默认 v2

特点:
- 用普通 100G/400G 以太网交换机
- 价格比 IB 低 30-40%
- 互操作性好(多厂家可选)
- 延迟略高于 IB(约 1.5-2 μs 差距)

挑战:
- 以太网默认丢包,要靠 PFC + ECN 做"无损"
- PFC 调优极其复杂
- 大集群难于诊断

IB vs RoCE 实际选择

1
2
3
4
5
6
NVIDIA SuperPOD(NVIDIA 推荐):     默认 IB
xAI Colossus(10 万 H100): IB
Meta 24K H100 集群: RoCE(自研以太网栈)
微软 Azure: 混合(IB + RoCE)
腾讯 / 阿里 大模型集群: IB 主流
字节 / 百度: RoCE 较多

选 IB 还是 RoCE 是 AI 集群的世纪之争

1
2
3
4
5
6
7
8
9
IB 优势:    生态成熟,NCCL 调优默认好用
交换机自带高级特性(adaptive routing)

RoCE 优势: 便宜
和已有以太网网络融合
供应商多元(Broadcom、Cisco、Arista 等)

共识: 1000 卡以下:IB / RoCE 都行
1万卡以上:差距开始显现,IB 更稳

“轨道”拓扑(Rail-Optimized)

AI 集群最大的特殊之处——Rail(轨道)拓扑

普通 Fat-Tree

graph TB
  S1[Spine 1] --- L1[Leaf 1] & L2[Leaf 2] & L3[Leaf 3] & L4[Leaf 4]
  S2[Spine 2] --- L1 & L2 & L3 & L4
  S3[Spine 3] --- L1 & L2 & L3 & L4
  S4[Spine 4] --- L1 & L2 & L3 & L4
  
  L1 --- N1[节点 1
8 GPU] L2 --- N2[节点 2
8 GPU]

普通 Fat-Tree 每节点 1-2 张网卡——8 GPU 共享 1 张 400G 网卡。

Rail 拓扑:每 GPU 一张网卡

graph TB
  subgraph Rail0["Rail 0"]
    L0[Leaf-0 交换机] --- G00[节点 1 GPU 0] & G10[节点 2 GPU 0]
  end
  subgraph Rail1["Rail 1"]
    L1[Leaf-1 交换机] --- G01[节点 1 GPU 1] & G11[节点 2 GPU 1]
  end
  subgraph RailN["Rail 2-7"]
    LN[Leaf-2..7]
  end

8 GPU/节点 → 8 个 Rail,每 Rail 一张 IB 卡。同 Rank 的 GPU(GPU 0)跨节点直接走自己的 Rail——不和别的 GPU 抢带宽

1
2
3
4
5
6
Rail 模型:
GPU 0 永远经 Rail 0 网卡 + Leaf 0
GPU 7 永远经 Rail 7 网卡 + Leaf 7

跨 Rail 通信:要走 Spine(少见)
同 Rail 通信:1 跳到达

为什么 Rail 适合 AI

1
2
3
4
5
6
7
8
AllReduce 时:每个 GPU 和 N 个对应 GPU 同步
→ 同 Rank 的 GPU 直接 Rail 0 内 AllReduce
→ 不和别的 GPU 抢带宽
→ 8 个 Rail 并行进行

Tensor Parallel:留在节点内 NVLink
Data Parallel:走 Rail(同 rank GPU 之间)
Pipeline Parallel:跨节点点对点

NVIDIA SuperPOD 设计指南就把 Rail-Optimized 作为默认。

几种典型集群拓扑

NVIDIA SuperPOD(256 H100)

1
2
3
4
5
6
7
8
4× DGX SuperPOD Scalable Unit:
每 SU = 32 节点 × 8 GPU = 256 GPU
Rail-optimized,每节点 8× 400G IB
+ 1-2× 200G IB 用于 storage 和 mgmt

Spine: 8× 400G QM9700(NDR 64-port)
Leaf: 32× 400G QM9700
集群: 1024 GPU

xAI Colossus(10 万 H100,2024)

1
2
3
4
5
6
xAI 在孟菲斯部署的全球最大 H100 集群之一:
100,000× H100
Rail-optimized + IB 400G
100% 液冷
10 万卡 AllReduce 大模型训练
自研电力(专用变电站 150 MW)

Meta 24K H100 集群(2024)

1
2
3
4
5
Meta 公开宣布 24,576 H100 集群:
RoCE v2 + 自研 Wedge400 交换机
3 层 Fat-Tree,无收敛
自研集群管理软件
Llama 3 训练就在这里

Google Gemini 集群(TPU)

1
2
3
4
Google 用 TPU v5p / Trillium:
3D Torus + OCS(光交换)
非 Fat-Tree(特殊拓扑)
对 NCCL/AllReduce 直接用 XLA 自管理

NCCL:集合通信的事实标准

graph TB
  PT[PyTorch / JAX / TF]
  PT --> NCCL[NCCL
NVIDIA Collective
Communications Library] NCCL --> NVLINK[NVLink
节点内] NCCL --> IB[IB / RoCE
跨节点]

NCCL 主要算法:

1
2
3
4
5
6
7
AllReduce(梯度同步):     Ring / Tree / NVLS
AllGather: 每 GPU 拼接数据
ReduceScatter: 每 GPU 持有 partial 结果
Broadcast: 单点到多点
P2P Send/Recv: 点对点

NVLink 等价物: RCCL(AMD)、HCCL(华为)

NCCL 调优要点

1
2
3
4
5
6
7
8
9
10
11
# 关键环境变量
export NCCL_DEBUG=INFO # 看通信信息
export NCCL_IB_DISABLE=0 # 启用 IB(默认)
export NCCL_IB_HCA=mlx5_0,mlx5_1 # 指定 HCA
export NCCL_IB_GID_INDEX=3 # RoCE v2
export NCCL_TOPO_FILE=topo.xml # 自定义拓扑文件
export NCCL_P2P_LEVEL=NVL # 节点内 NVLink 优先

# 测试 AllReduce 带宽
all_reduce_perf -b 1G -e 16G -f 2 -g 8
# 看 algbw(算法带宽)和 busbw(总线带宽)

“无损以太网”的复杂

RoCE 跑在以太网上要”无损”——靠两个机制:

PFC(Priority Flow Control)

graph LR
  A[发送端] -->|流量| B[交换机]
  B -->|缓冲快满| A
  A[发送端] -.->|PAUSE| A

队列快满时交换机发 PAUSE 帧让发送方暂停——链路级背压

PFC 调优坑:

1
2
3
4
1. PFC storm:环路 PAUSE 导致全网阻塞
2. PFC 不支持多优先级 → 拥塞蔓延
3. 调优 buffer 阈值复杂
4. 不同厂家交换机行为不一致

ECN(Explicit Congestion Notification)

1
2
3
发送方探测 ECN 标记
→ 主动降速
→ 端到端拥塞控制(DCQCN)

PFC + ECN 配合,让 RoCE 在以太网上达到”近 IB”性能——但调优极其复杂。这是为什么 AI 集群运维比一般数据中心难十倍。

集群网络的”故障” reality

万卡集群每天有 GPU 故障、网络抖动、链路 flap:

1
2
3
4
5
6
7
8
9
10
xAI Colossus 10 万卡:
每天 GPU 故障:~50 个(百万分之几故障率 × 万 × 365天)
每天 IB 链路 flap:~5-10 个
每天 PSU/风扇/电源问题:~10 个

软件层面:
PyTorch 必须支持 fault-tolerant training
Checkpoint 频率要够高(每小时)
自动 GPU 故障隔离 + 重启
自动网络拓扑发现(拓扑变了 NCCL 重建路径)

网卡的代次

1
2
3
4
5
ConnectX-5(2017):     100G EDR
ConnectX-6(2020): 200G HDR
ConnectX-7(2022): 400G NDR
ConnectX-8(2024): 800G XDR
BlueField DPU: 网卡 + ARM CPU + 加速器(智能网卡)

NVIDIA 不只是卖 GPU——网卡的”墙内市场”也是它的:

graph TB
  NV[NVIDIA AI 集群]
  NV --> GPU[GPU: H100/B200]
  NV --> NIC[网卡: ConnectX-7/8 + BlueField]
  NV --> SW[交换机: Quantum-2 NDR / Spectrum]
  NV --> CABLE[线缆: 光模块 / DAC / AOC]
  NV --> SW2[NVSwitch + NVLink Switch]

整套 AI 集群基础设施都是 NVIDIA 一家供货——这是 NVIDIA 比 AMD 强的真正护城河。

为什么 800G 网络没让训练更快

每代 IB 带宽翻倍——但 AllReduce 时间没线性下降,因为:

1
2
3
4
5
6
1. 网卡 → GPU 间还要走 PCIe(5.0 ×16 = 64 GB/s = 512 Gbps)
400G 网卡已经接近 PCIe 5.0 ×16 上限
800G 实际"打不满"
2. NCCL 算法的复杂度(环 vs 树)
3. 集合通信的同步等待时间
4. 大模型梯度量级和带宽不成比例

PCIe 6.0 / NVLink 5 是配套必须升级的——B200 就是这么设计。

国产 AI 集群网络

鹊信(Galaxlink,华为)

华为 Atlas 集群的 RDMA 网络:

1
2
3
4
基于以太网(融合标准)
端到端微秒级延迟
配套 HCCL(NCCL 替代)
万卡级集群已上线

国产 RDMA 网卡

1
2
3
中际旭创:800G 光模块出货
新华三 / 锐捷:以太网交换机
国产 IB / RoCE 网卡:仍较弱,主要 ConnectX 替代

待补充:国产 AI 集群网络(万卡级)部署案例和性能数据。

一些诊断命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# IB 网卡状态
ibstat
ibstatus
ibv_devinfo
mlxlink # MLX 网卡链路诊断

# RDMA 测试
ib_send_bw -d mlx5_0 -i 1 server_ip
ib_read_bw -d mlx5_0 -i 1 server_ip
ib_send_lat # 延迟测试

# IB 拓扑
ibnetdiscover # 全网拓扑发现
ibtracert <src_lid> <dst_lid> # 路径追踪

# RoCE 调优
ethtool -i eth0 # 网卡驱动
mlxconfig -d /dev/mst/mt4123_pciconf0 q
mlnx_qos -i eth0 # PFC/ECN 配置

# NCCL 性能
nccl-tests/all_reduce_perf -b 1G -e 16G -f 2 -g 8

# 监控
perfquery # IB 计数器
sar -n DEV 1 # 网卡流量

一张总结:AI 集群网络栈

graph TB
  L1[GPU SM
shared mem TB/s] L2[GPU 内 HBM
3-8 TB/s] L3[NVLink 节点内
1.8 TB/s, 700 ns] L4[NVL72 机柜
72 GPU, 1 us] L5[InfiniBand/RoCE
400-800 G, 3-5 us] L6[跨数据中心
WAN, 10-100 ms] L1 --> L2 --> L3 --> L4 --> L5 --> L6

AI 训练集群”软件栈”必须理解每一层带宽和延迟——只有把通信安排在合适的层,才能跑出好的 MFU。

经验数字

1
2
3
4
5
6
7
H100 节点内 NVLink AllReduce:     ~1500 GB/s busbw
H100 跨节点 IB AllReduce(rail): ~360 GB/s busbw(400G × 8)
H100 跨节点 RoCE(同 IB): ~340 GB/s(PFC OK 时)
万卡集群 AllReduce 延迟: 1-3 ms(梯度大小依赖)

PCIe 5.0 ×16 端到端: 50-60 GB/s(理论 64)
ConnectX-7 单口 400G: ~50 GB/s

小结

  • AI 集群分两层:scale-up(NVLink,紧耦合)+ scale-out(IB/RoCE,松耦合)
  • IB 默认稳定,RoCE 价格优但调优难
  • Rail-Optimized 是 AI 集群标准拓扑
  • NCCL 是事实标准的集合通信库
  • 万卡集群每天有数十个故障——容错训练是必须能力
  • NVIDIA 的网卡 + 交换机 + GPU “全栈”是真正护城河

下一篇是第五章收口——GPU 选型和小结。