九章智算云

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)上。两者带宽相同,差别在:

维度IBRoCEv2
流控链路级 credit,原生 lossless靠 DCB 配 PFC/ECN,调不好就丢包
端到端延迟~1 µs~1.5–2 µs
运维难度单一栈,subnet manager 管全网跨厂商兼容好,但调优极挑
价格交换机更贵复用以太交换的话便宜

实操经验:>= 256 GPU 的训练集群直接上 IB;混合云 / 已有以太网底座 / 推理为主的集群可以考虑 RoCEv2,但务必把 PFC + ECN 调到位——配错的 RoCE 比 IB 慢一倍。

二、速率代际

代别单端口速率出现时间典型用途
EDR100 Gbps2014A100 早期集群
HDR200 Gbps2018A100 主流
NDR400 Gbps2022H100 主流
XDR800 Gbps2024–25H200 / 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 --details

ib_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 是配套的:

  1. ibstat 所有端口 Active + 标定速率
  2. nvidia-smi topo -m 所有 GPU↔NIC = PIX
  3. nvidia_peermem 已加载
  4. ib_write_bw 单点对点 >= 380 Gbps(NDR)
  5. ibqueryerrors --details 错误计数为 0 或不再增长

5 项全过,再走 NCCL-tests。次序反了的话,NCCL-tests 的 busbw 不达标你都不知道是网络硬件问题还是软件问题。

最后更新于

这篇文档对你有帮助吗?

目录