Skip to content

Rail 拓扑 + 1.5:1 收敛:48 节点也按万卡思维设计 ​

有人问:48 个节点、384 张卡,为什么不上"简单省事"的单层 Leaf,非要 4 Leaf + 4 Spine 的 Fat-Tree?答案在集合通信模式里:NCCL 的 allreduce 是全网广播式流量,收敛比一旦存在,通信墙立刻出现。本文讲清楚 Rail 优化拓扑的账。

1. 拓扑的账:收敛比不是"带宽打折"那么简单 ​

方案结构收敛比后果
单层 Leaf所有节点接同一台交换机1:1规模小可以;48×200G 接入 51.2T 单机,端口和故障域都不现实
传统胖树上行 1:1 全互联1:1(无阻塞)交换机成本翻倍
Rail 优化 Fat-Tree4 Leaf + 4 Spine,1.5:1接入 48×200G : 上行 16×400G有收敛,但靠拓扑局部性 + SHARP 缓解

本方案选择第三种。为什么"有收敛"反而正确:训练通信不是均匀随机流量,而是模式化的集合通信(同一 GPU 编号的卡之间、相邻节点之间),Rail 拓扑把这些热流量收敛在同一 rail 内一跳完成,真正跨 rail 的流量占比远低于 1/1.5 的直觉。

2. Rail 优化:同编号 GPU 一跳完成 ​

拓扑规则:

  • 每节点 4 个计算口,分别接 rail0-3 的 4 台 Leaf;
  • 第 N 号 GPU 的计算流量,全部落在第 N 个 rail——同编号 GPU 之间的集合通信在 rail 内一跳完成;
  • 跨 rail 流量经 Spine 二层转发(IB 无三层),启用 Adaptive Routing 后按报文动态选路,多 Spine 天然负载均衡。

判断:Rail 优化的本质是把"通信模式"映射成"拓扑结构"——通信最热的路径,拓扑给最短。这是万卡集群的标准打法,384 卡提前用,成本只多 4 台 Spine。

3. Breakout 与 1.5:1 的取舍 ​

  • Leaf 用 Quantum-2 QM9700(64×400G NDR 口,支持 2×200G Breakout):
    • 48 个 200G 下行只占 24 个物理 400G 口(Breakout 2×200G);
    • 剩余 16×400G 上行接 4 台 Spine;
    • 收敛比 = 48×200G : 16×400G = 1.5:1;
  • 缓解手段:SHARP(交换机在网聚合)把 allreduce 的树状流量卸载到交换机,reduce 阶段不再占满主机带宽;Adaptive Routing 让上行带宽被多路径摊平。

工程判断:1.5:1 收敛对训练集群是可接受的工程折中——它买的是"交换机数量减半 + 布线路数减半"。真正要盯的不是收敛比数字,而是NCCL 实测 busbw 是否随节点数线性增长;不线性,先查拓扑局部性,再查 SHARP 是否生效。

4. 单 Leaf 冗余与二期扩展 ​

  • 每 rail 仅 1 台 Leaf:本期冷备 1 台整机即可——IB 交换机无需逐口配置,插上由 SM 自动发现并入网;
  • 二期扩展:新增 Leaf/Spine 后 SM 自动发现,LID 路由表重算,无需人工配表;
  • 扩展边界:48 节点 → 96 节点,按 4 rail 各扩一台 Leaf + 上行扩容;再往上(万卡级),Leaf 层每 rail 多台 + 更大收敛比或 2:1 内折中,需要重新做胖树分层。
规模Leaf/Spine 形态收敛比建议
≤32 节点单层 Leaf(可接受)1:1
48-96 节点4 Leaf + 4 Spine1.5:1
万卡级多 rail 多 Leaf + Spine 全互联≤2:1(靠 SHARP/自适应路由补偿)

5. 交付清单 ​

  1. 每节点 4 口分别入 rail0-3,逐口核对端口归属(错接 rail = 拓扑失效);
  2. Breakout 配置后 ibstat 确认每口 200G 生效;
  3. 开 SHARP:确认交换机聚合引擎在线(sm_poll/交换机侧 SHARP 状态),NCCL_DEBUG=INFO 看是否走了在网聚合;
  4. 基线验证:2 节点 → 4 节点 → 8 节点跑 allreduce,busbw 随规模线性才算拓扑正确;
  5. 冷备 Leaf 上电演练一次 SM 自动发现。

本文基于 384 卡 L40S IB 集群交付实测整理;具体版本号与命令以现场实测为准。

AI-HPC 智算超算专家 · Contact: openaihpc@gmail.com