GPU 集群的 IB 组网入门——从带宽到 rail-aligned 拓扑
为什么大模型集群非要 InfiniBand,rail-aligned 是怎么帮你省 30% 训练时间的,以及现场最常用的 ibstat / ibdev2netdev / ib_write_bw 套路。
一、IB vs RoCE:先选路再谈速度
InfiniBand (IB) 是 Mellanox / NVIDIA 系自带 lossless、credit-based 流控的专网;RoCEv2 是把 IB 协议跑在以太网 + DCB(PFC + ECN)上。两者带宽相同,差别在:
| 维度 | IB | RoCEv2 |
|---|---|---|
| 流控 | 链路级 credit,原生 lossless | 靠 DCB 配 PFC/ECN,调不好就丢包 |
| 端到端延迟 | ~1 µs | ~1.5–2 µs |
| 运维难度 | 单一栈,subnet manager 管全网 | 跨厂商兼容好,但调优极挑 |
| 价格 | 交换机更贵 | 复用以太交换的话便宜 |
实操经验:>= 256 GPU 的训练集群直接上 IB;混合云 / 已有以太网底座 / 推理为主的集群可以考虑 RoCEv2,但务必把 PFC + ECN 调到位——配错的 RoCE 比 IB 慢一倍。
二、速率代际
| 代别 | 单端口速率 | 出现时间 | 典型用途 |
|---|---|---|---|
| EDR | 100 Gbps | 2014 | A100 早期集群 |
| HDR | 200 Gbps | 2018 | A100 主流 |
| NDR | 400 Gbps | 2022 | H100 主流 |
| XDR | 800 Gbps | 2024–25 | H200 / B200 |
H100 节点标配是"8 卡 + 8 张 NDR-400 HCA"——每张卡一张独占网卡,单节点出网带宽 3.2 Tbps。降配到 4 张 HCA 立刻变 1.6 Tbps,这就是为什么"省网卡"是 LLM 训练性能最大杀手之一。
三、Rail-aligned 拓扑为什么对 LLM 重要
LLM 训练里的 collective 流量按 rank 分布是有规律的:data-parallel 的 all-reduce 永远是 rank-0 ↔ rank-0、rank-1 ↔ rank-1……tensor-parallel 永远在节点内。
Rail-aligned 设计就是把"同号 GPU 接同一个 leaf 交换机":
节点 A: GPU0─HCA0 ┐ 节点 B: GPU0─HCA0 ┐
GPU1─HCA1 │ GPU1─HCA1 │
... │ Leaf #0 ... │ Leaf #0
GPU7─HCA7 ┘ GPU7─HCA7 ┘
Leaf #1 Leaf #1
... ...
Leaf #7 Leaf #7→ DP 流量永远只在一个 rail(一台 leaf)内来回,不跨 spine,hop 数从 5 降到 3,延迟低 30%、带宽稳定 30% 以上。
我们在 256 卡集群上对比过:rail-aligned + balanced 比 random-wired 训练吞吐高 28%。这是真实的钱。
四、PCIe Affinity 与 GDR
IB 速率达到 NDR 后,PCIe 拓扑成了新瓶颈。nvidia-smi topo -m 看 GPU↔NIC 矩阵:
GPU0 GPU1 ... mlx5_0 mlx5_1
GPU0 X NV4 ... PIX SYS
GPU1 NV4 X ... SYS PIX期望看到的:每个 GPU 和它对应的 NIC 是 PIX(同 PCIe switch);如果是 SYS(跨 NUMA、走 host),GDR 直传 GPU↔NIC DMA 就走不通,性能直接腰斩。
启 GDR 三件套:
sudo modprobe nvidia_peermem # 老叫 nv_peer_mem
lsmod | grep nvidia_peermem
# NCCL 启动会自动用 GDR;日志里 grep "GDRDMA"五、运维必备命令
# 1) 网卡是否 Active
ibstat # State: Active, PhysState: LinkUp
ibstatus # 速率:rate: 400 Gb/sec (4xNDR)
# 2) IB 设备 ↔ Linux 网卡映射
ibdev2netdev -v
# mlx5_0 port 1 ==> ibp1s0 (Up)
# 3) 端到端带宽(点对点测试)
# server
ib_write_bw -d mlx5_0 --report_gbits
# client
ib_write_bw -d mlx5_0 --report_gbits <server_ip>
# 4) 端到端延迟
ib_write_lat -d mlx5_0 <server_ip>
# 5) Subnet Manager 是否在跑(IB 必须有一个 SM)
sminfo
# 6) 交换机端口错误计数
ibqueryerrors --detailsib_write_bw 应该跑到 NDR-400 标定的 ~390 Gbps(不是 400,封装开销);不到说明物理链路或驱动问题。ibqueryerrors 出现 LinkErrorRecoveryCounter / SymbolErrorCounter 在涨 = 物理光模块或线材问题,必须换。
六、常见现场问题
- "两节点 NCCL 慢一倍":
nvidia-smi topo -m看 GPU↔NIC 是 SYS 还是 PIX,往往是机器装机时网卡插错 PCIe slot。 - "突然性能掉 30%":
ibqueryerrors看 SymbolErrorCounter,通常是某条 IB 光纤变脏或弯折,subnet manager 自动降速。 - "RoCE 跑出来比 IB 慢一倍":交换机 DCB 没配 PFC,PFC 没配 priority,priority 没和 ECN 对齐——RoCE 调通的工作量约等于把整套 IB 重写一遍,预估 2 周。
- "X 节点掉队":
ibhosts看 SM 报的 LID 是不是连续,掉的节点往往是 HCA reset 后没重新加入 fabric,重启opensmd即可。
七、上线时的网络验收
我们给客户的最小验收和上一篇 NCCL-tests 是配套的:
ibstat所有端口 Active + 标定速率nvidia-smi topo -m所有 GPU↔NIC =PIXnvidia_peermem已加载ib_write_bw单点对点 >= 380 Gbps(NDR)ibqueryerrors --details错误计数为 0 或不再增长
5 项全过,再走 NCCL-tests。次序反了的话,NCCL-tests 的 busbw 不达标你都不知道是网络硬件问题还是软件问题。
最后更新于
