万卡级 InfiniBand 参数平面:1250 台 HGX H100 的三层胖树架构拆解
一句话:这不是一张普通的拓扑图,而是一台"10000 GPU 并行计算机"的通信骨架。本文按 整体 → 局部 → 整体 的顺序,把 1250 台 HGX H100、320 台 Leaf、320 台 Spine、256 台 Core 的 IB 参数平面拆成能直接落地的工程认知。
一、先看整体:三层胖树在解决什么问题
AI 训练中,GPU 之间的通信流量形态极端:All-Reduce 需要所有 GPU 同时交换梯度,All-to-All 需要任意两卡之间直接搬数据。通信网络(参数平面 / 计算网络)的设计目标只有一个——让任意两个 GPU 之间的带宽不打折、时延可预期。三层胖树(Core / Spine / Leaf)就是为此而生的标准结构:
- Leaf(叶)层:贴近服务器,把每台机器 8 个 400G 口"汇总"进网络;
- Spine(脊)层:提供横向转发能力,让同一层任意两个 Leaf 之间都有路径;
- Core(核)层:打通全网,跨 POD 的流量在这里汇聚、再分发。
这张图的关键数字:1250 台 HGX H100(8×GPU / 台)= 10000 GPU,每台 8 个 400G IB 口 → 10000 个 400G 接入;配套 320 台 Leaf、320 台 Spine、256 台 Core,清一色 NVIDIA Quantum-2 QM9790(64 口 NDR 400G,单台 51.2Tb/s 聚合吞吐)。
二、数字先对账:为什么这套规模"严丝合缝"
写文章前先把账算清楚——万卡网络最容易犯的错误就是"数对不上"。
| 层级 | 数量 | 每台端口 | 总端口 | 用途 | 对账 |
|---|---|---|---|---|---|
| GPU 接入 | 1250 台 × 8 口 | 400G | 10000 | 每 GPU 独占 1 个 400G | 接入基数 |
| Leaf | 320 台 | 64 | 20480 | 32 口下联 + 32 口上联 | 下联 320×32 = 10240 ≥ 10000 |
| Spine | 320 台 | 64 | 20480 | 32 口接 Leaf + 32 口接 Core | 下联/上联各 10240 |
| Core | 256 台 | 64 | 16384 | 40 口接 Spine + 24 口组间互联 | 接 Spine 256×40 = 10240 |
关键结论:Leaf → Spine → Core 每一级都是 10240 个 400G 口,1:1 无收敛(non-blocking)。任何一条 GPU 到 GPU 的路径,全程带宽都不打折——这正是训练网络和传统业务网络的区别:业务网可以收敛(多路争用),训练网收敛 1 分,All-Reduce 就慢 1 分。
补充一点:Core 每台 64 口,40 口接 Spine,剩余约 24 口用于 Core 组间全网状互联——这是万卡规模下 Core 层不成为瓶颈的关键。
三、从整体到局部:POD 内部长什么样
全网被切成 5 个 POD:前 4 个 POD 各 256 台,第 5 个 226 台,合计 1250。每个 POD(以 256 台为例):
- 256 台 HGX H100 × 8 口 = 2048 个 400G 口;
- 由 8 组 Leaf、每组 8 台(共 64 台) 承接:64 台 × 32 下联口 = 2048 口,一一对应;
- 每组 Leaf 的 8 台 × 32 口 = 256 口,正好下联 32 台服务器(32 × 8 = 256)。
为什么每台服务器要 8 个口? 因为 HGX H100 上 8 张 GPU 各自独占一个 400G ConnectX-7 网卡(板上双 Cedar-7 mezzanine 卡,每卡 4 口)。8 个口对应 8 张卡,GPU 到网卡是 1:1 直连——"每 GPU 一个 400G" 就是这个意思:不做口收敛,每张卡都拥有完整接入带宽。
四、中段拆解:Leaf ↔ Spine,无收敛的关键一跳
Leaf 每台 64 口:32 口下联服务器,另 32 口上联 Spine。40 组 Leaf 的上联 = 320 × 32 = 10240 口;Spine 层 320 台 × 32 口接 Leaf = 10240 口,组对组全互联:每个 Leaf 组(8 台)的 256 个上联口,散布到多个 Spine 组,保证任何 Leaf 都有多条等价路径。
Spine 的价值在"横向带宽":POD 内部通信(同 POD 内 GPU 交换梯度)主要走 Leaf → Spine → Leaf,不惊动 Core 层。这让大部分集合通信在"局部"完成——通信局部化是万卡网络性能的隐形功臣:流量越局部,端到端时延越低,Core 层越轻松。
五、顶层拆解:Spine ↔ Core,跨 POD 的必经之路
跨 POD 的训练(比如数据并行梯度 All-Reduce 跑在 POD1–POD5 之间)必须上 Core:Spine 组上联 320×32 = 10240 口 → Core 256 台 × 40 口 = 10240 口,同样 1:1。
Core 层 256 台组织为 8 个 Core 组(CG1..CG8,每组 32 台)。Core 组之间用剩余端口全网状互联,形成顶层无收敛核心:任意 POD 之间通信,路径上不存在任何汇聚点。
六、从局部回到整体:一条报文跨 POD 的完整旅程
POD1 的 GPU A 向 POD5 的 GPU B 发一个满速消息,全程 5 跳:
- GPU A → Leaf(SU1 组):HGX 板上 ConnectX-7 把消息直接送上 400G 链路;
- Leaf → Spine:Leaf 查 SM 下发的 LID 路由表,从 32 个上联口选一条等价路径转发;
- Spine → Core:跨 POD 流量经 Spine 上行到 Core 组;
- Core → Spine → Leaf → GPU B:Core 查表下行到目标 POD 的 Spine、Leaf,最终落到 GPU B 的网卡。
全程 5 跳、1:1 带宽、无丢包(IB 链路层 credit 流控天然无损),时延由 LID 路由 + 自适应路由保证最短。对训练框架而言,这条路径就是一次 NCCL All-Reduce 的物理承载。
七、控制面:UFM 双机与子网管理
- UFM(Unified Fabric Manager)双机:图中的两台 UFM 服务器负责全网监控、性能统计与故障定位;一台宕机另一台接管,控制面不中断。
- 子网管理器(SM)主备:全网必须恰有一个主 SM 负责 LID 分配与路由计算;万卡规模下建议 SM 与 UFM 配合部署,路由收敛秒级。
- PKey 分区:计算网、存储网(IPoIB)用不同 PKey 隔离,训练流量不与其他业务混流。
- SHARP 在网聚合:QM9790 支持 SHARP,All-Reduce 的部分归约直接在交换机上完成,通信量再砍一半——这是万卡 IB 相对传统网络的"隐藏优势"。
八、为什么是 IB 而不是 RoCE
| 维度 | IB(本架构) | RoCE |
|---|---|---|
| 无损 | 链路层 credit 流控,天然无损 | 依赖 PFC/ECN 逐跳配置 |
| 在网计算 | SHARP 原生支持 | 无(需额外方案) |
| 路由 | 子网管理器统一计算 + 自适应路由 | 依赖交换机厂商实现 |
| 运维 | UFM 一体化监控 | 多厂商拼装 |
| 适用 | 万卡级训练主选 | 中小规模 / 以太网利旧 |
一句话:万卡规模下,IB 的"开箱即无损 + 在网归约 + 统一运维"把工程复杂度直接降了一个量级。
九、落地 checklist(照抄可用)
- 端口对账:接入 10240 可用口 ≥ 10000,每层 1:1 无收敛;
- POD 划分:每 POD ≤ 256 节点,8 组 Leaf 对应 2048 口;
- 控制面隔离:SM / UFM 双机部署在带外网络,不占参数平面;
- 分区规划:PKey 隔离计算 / 存储,VL 映射计算优先;
- 全链路测试:NCCL allreduce / alltoall,含跨 POD 长链路;
- 最坏路径验收:跨 POD 的 All-Reduce 带宽应 ≥ 单 POD 的 90%。
相关阅读:InfiniBand 在 AI 训练中的性能调优实战指南、GPU 训练网络故障排查手册、NCCL 性能测试与优化指南。