
大模型训练进入千卡、万卡时代以后一个越来越重要的问题出现了GPU越来越快但GPU之间的网络开始跟不上了。在传统数据中心里只要网络是一个高带宽、无阻塞的 Leaf-Spine 架构我们往往会认为网络已经建设好了服务器接进去就可以使用。但 AI 集群不太一样。GPU 之间存在大量规律性非常强的通信例如AllReduceAllGatherReduceScatterAll-to-All这些通信不仅流量巨大而且具有很强的同步性和周期性。于是一个新的问题出现了既然 GPU 的通信模式是可以预测的为什么还要让这些流量在整个网络里“到处跑”Rail-Optimized Network就是为了解决这个问题。01 什么是 Rail先来看一台典型的多 GPU AI 服务器。假设一台服务器里有 8 张 GPU同时配置了多张高速网卡Server A GPU0 ─ NIC0 GPU1 ─ NIC1 GPU2 ─ NIC2 GPU3 ─ NIC3 GPU4 ─ NIC4 GPU5 ─ NIC5 GPU6 ─ NIC6 GPU7 ─ NIC7另一台服务器也是一样Server B GPU0 ─ NIC0 GPU1 ─ NIC1 GPU2 ─ NIC2 ... GPU7 ─ NIC7如果把很多服务器中相同位置的 GPU/NIC 连接到同一组网络交换设备就会形成一条条纵向的通信“轨道”Server A Server B Server C Server D │ │ │ │ GPU0 GPU0 GPU0 GPU0 │ │ │ │ NIC0 NIC0 NIC0 NIC0 └────────────┴────────────┴────────────┘ │ Rail 0 GPU1 GPU1 GPU1 GPU1 │ │ │ │ NIC1 NIC1 NIC1 NIC1 └────────────┴────────────┴────────────┘ │ Rail 1这就是Rail。简单理解Rail 就是一组位置对应、网络路径也对齐的 GPU/NIC。而所谓Rail-Optimized Network就是让多台 GPU 服务器内部相同位置的网络接口连接到相同的网络 Rail使大量 GPU 集合通信尽可能沿固定 Rail 完成。NVIDIA 对 Rail-Optimized 的描述也非常直接多接口 GPU 节点会将每一条 GPU Rail 连接到不同的第一级 Leaf 网络使节点之间可以利用服务器内部的 NVSwitch再通过距离目标更近的 NIC 进行通信从而避免不必要地跨越更多交换机。02 传统网络和 Rail-Optimized 有什么不同假设有很多台 8-GPU 服务器。传统网络通常更关注服务器怎么均匀接入 Leaf。因此不同 NIC 可能分散连接Spine / | \ Leaf Leaf Leaf │ \ / │ │ \ / │ Server A Server B网络本身可能完全没有问题。但到了 AI 训练阶段GPU 的流量并不是传统互联网业务那种大量随机的小流。它更像GPU0 ↔ GPU0 GPU1 ↔ GPU1 GPU2 ↔ GPU2 GPU3 ↔ GPU3 ...而且不断重复。如果物理网络没有和这种通信关系对齐那么一次本来很简单的 GPU 通信可能需要GPU ↓ NIC ↓ Leaf ↓ Spine ↓ 另一个 Leaf ↓ NIC ↓ GPU经过多个网络设备。Rail-Optimized 做的事情就是重新思考为什么不能把经常互相通信的 GPU放到“同一条路”上于是变成Rail 0 GPU0 ─ NIC0 ─┐ GPU0 ─ NIC0 ─┼── Leaf GPU0 ─ NIC0 ─┼ GPU0 ─ NIC0 ─┘ Rail 1 GPU1 ─ NIC1 ─┐ GPU1 ─ NIC1 ─┼── Leaf GPU1 ─ NIC1 ─┼ GPU1 ─ NIC1 ─┘这就像把原来大量混在一起的车流分到了不同的专用轨道上。这也是为什么它叫Rail-Optimized——“轨道优化型网络”。03 Rail-Optimized 到底优化了什么它最大的价值不是简单地“增加带宽”。而是让计算拓扑和网络拓扑更加匹配。第一减少不必要的网络跳数这是最直观的收益。如果 GPU0 → GPU0 的通信能够一直留在 Rail 0那么数据可能只需要经过较少的交换设备。传统情况GPU ↓ Leaf ↓ Spine ↓ Leaf ↓ GPURail 对齐之后某些通信可以变成GPU ↓ Leaf ↓ GPU少经过交换机意味着什么更低的网络延迟、更少的排队机会也更少受到其他流量干扰。NVIDIA 在其 AI Factory 网络设计中明确提出Rail-Optimized 的目标之一就是为 GPU 通信提供尽可能短的网络路径。04 第二个好处减少网络拥塞和流量干扰这是 Rail-Optimized 更重要的价值。AI 训练流量有几个非常特殊的特点大流、突发、同步、低熵。例如一次 AllReduce 开始时GPU GPU GPU GPU GPU GPU GPU GPU ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ 同一时间开始通信大量 GPU 几乎同时发送数据。如果所有流量在一个大型 Clos 网络里随机选择路径就可能出现Path A ████████████████ 拥塞 Path B ███ 空闲 Path C █████ 较空闲即使整个网络理论总带宽还有剩余也可能因为局部 Hash 冲突、Incast 或热点形成拥塞。Rail-Optimized 相当于提前把部分流量“分轨”GPU0流量 → Rail 0 GPU1流量 → Rail 1 GPU2流量 → Rail 2 GPU3流量 → Rail 3不同通信流之间相互影响的机会就会降低。NVIDIA 对 Rail-Optimized 的总结中也特别提到它能够maximize All-Reduce performance同时 minimize network interference between flows。也就是提高 AllReduce 性能并减少不同流之间的网络干扰。05 第三个好处更容易跑满网络带宽AI 网络最怕什么不是交换机端口标称只有 400G。而是明明是 400G训练真正能用出来的却只有 250G、300G。原因往往不是物理带宽不够而是Hash 不均网络排队路径冲突IncastPFCECN长尾Straggler最终就可能出现理论带宽很高 ↓ 局部网络拥塞 ↓ 某个 Rank 变慢 ↓ Collective 等待 ↓ 所有 GPU 等待 ↓ Step Time ↑ ↓ MFU / Goodput ↓Rail-Optimized 通过让通信关系更加固定和可预测使网络带宽利用更加稳定。因此它追求的不只是Peak Bandwidth而是Effective Bandwidth也就是GPU 真正能够持续使用到的有效通信带宽。06 第四个好处让 AI 网络性能更加可预测传统数据中心网络追求的是任意服务器都可以和任意服务器通信。AI 集群除了要求“能通信”还非常在意每一次通信花多长时间。原因很简单。大规模同步训练具有明显的“木桶效应”。假设 2,048 张 GPU 做一次 CollectiveGPU 1 100 ms GPU 2 101 ms GPU 3 99 ms ... GPU 2047 100 ms GPU 2048 180 ms ← Straggler最终不是平均101 ms。而是大家一起等180 ms。所以 AI 网络特别害怕Long-tail Latency。Rail-Optimized 通过减少路径复杂度和流之间的相互干扰可以使网络行为更加稳定。对于 AI 集群来说稳定的 380G有时候比平均 400G、但不断在 200G400G 之间抖动更有价值。因为最终决定训练性能的是Step Time而不是交换机 datasheet 上的 Peak Bandwidth。07 为什么 Rail-Optimized 特别适合 AllReduce这和 AI Collective Communication 的特点有关。例如分布式训练里常见的 Ring AllReduceGPU0 → GPU1 → GPU2 → GPU3 ↑ ↓ └────────────────────┘通信对象和通信顺序高度规律。不像互联网业务User A → Server X User B → Server M User C → Server QAI 训练的数据流很多时候是可预测的。既然计算软件已经知道哪些 GPU 需要互相通信网络就不一定非要完全按照传统“Any-to-Any”思想设计。于是Logical Communication Topology ↓ NCCL topology ↓ GPU / NIC mapping ↓ Physical Network四者可以开始协同设计。这其实就是 Rail-Optimized 背后更重要的思想Compute-Network Co-design算网协同设计。08 那是不是所有流量都永远不能跨 Rail当然不是。这也是理解 Rail-Optimized 时一个很重要的地方。比如 MoE 模型大量使用All-to-All。这时候GPU0 ├→ GPU1 ├→ GPU2 ├→ GPU3 ├→ GPU4 ├→ GPU5 └→ GPU7GPU 需要和很多其他 GPU 通信。显然不可能所有流量都天然处于同一条 Rail。怎么办这里就要发挥服务器内部高速网络的作用。以 NVIDIA 的 PXNPCI × NVLink机制为例数据可以先通过服务器内部的 NVLink/NVSwitchGPU A │ │ NVLink / NVSwitch ↓ 另一张 GPU │ 对应 Rail 的 NIC ↓ Network也就是说如果自己的 NIC 不在最合适的 Rail可以先在服务器内部“换轨”然后再从更合适的 NIC 发出去。为什么这么做因为服务器内部 NVLink/NVSwitch 的带宽非常高。因此与其让数据Leaf ↓ Spine ↓ 另一个 Leaf在外部网络绕路有时不如GPU ↓ NVLink ↓ GPU/NIC ↓ 正确的 Rail先在服务器内部完成一次数据移动。NVIDIA 在 NCCL PXN 的设计中就利用了这一思路并通过消息聚合减少网络连接和额外交换跳数。借助 PXN对于某一个特定的目标节点同一节点上的所有 GPU 会先将各自的数据搬移到其中一个 GPU 上。这样网络层就能够通过一个新的multireceive多接收 功能对多个消息进行聚合。该功能使远端 CPU Proxy 能够在所有消息都准备就绪后将这些消息一次性发送出去。例如假设某个节点上的一个 GPU 正在执行All-to-Allall2all 操作并且需要从远端节点的 8 个 GPU 接收数据那么 NCCL 会调用一次 multireceive并传入 8 个 buffer 及其对应的数据大小。在发送端网络层可以等待这 8 个发送操作全部准备完成然后一次性发送这 8 条消息。这样可以显著降低消息发送速率message rate方面的压力提高网络通信效率。消息聚合的另一个重要变化是对于某一个特定目标节点同一节点上的所有 GPU 现在可以共享连接connections。这意味着需要建立的连接数量更少。不过这也可能影响路由效率。如果底层路由算法原本依赖大量不同的连接来提供足够的哈希熵entropy那么连接数量减少后可用于 ECMP 等负载均衡机制的流量熵也会下降从而可能影响网络路径之间的流量均衡效果。下图对比了在启用和未启用 PXN 的情况下完成 All-to-Allalltoall集合通信操作所需的时间。09 所以 Rail-Optimized 的核心不是 TP有一种常见理解是Rail-Optimized 是不是主要为了 Tensor Parallel并不完全准确。TP 的通信频率很高因此确实非常关注网络带宽和延迟。但 Rail-Optimized 真正解决的问题更加通用把 GPU Collective Communication 的逻辑拓扑与物理网络拓扑进行对齐。因此涉及的可能包括TP ↓ AllReduce / AllGather DP ↓ AllReduce / ReduceScatter EP / MoE ↓ All-to-All 各种并行策略 ↓ 不同 Collective ↓ 不同网络 Traffic Matrix所以 Rail-Optimized 的本质不是“专门优化 TP”。而是“面向 AI Collective Communication 优化网络拓扑”。10 Rail-Optimized 能不能降低网络成本还有一个容易被忽略的优势有可能。传统 Clos 网络为了保证任意位置之间都有很高的无阻塞带宽往往需要非常完整的 Spine 带宽。但如果大量 GPU 通信都能够保持在同一 RailRail 0 │ Rail 1 │ Rail 2 │ Rail 3 │ │ │ 大量流量在 Rail 内完成那么跨 Rail 的网络连接承担的流量就可能降低。NVIDIA 在介绍 Rail-Optimized topology 时也明确指出由于 Rail 之间可以采用相对轻量的连接这种设计还可能降低网络成本。所以 Rail-Optimized 实际上同时考虑了Performance Predictability Scalability Cost11 Rail-Optimized 不等于一种新的网络拓扑这也是最后一个特别容易误解的地方。Rail-Optimized 并不是要彻底抛弃Leaf-Spine / Clos / Fat Tree。实际上 NVIDIA 当前很多 AI Factory 和 DGX SuperPOD 设计仍然采用Leaf-Spine Fat Tree Rail-Optimized。所以更准确地说Clos / Fat Tree │ │ 解决 ↓ 网络如何规模化互联 Rail-Optimized │ │ 解决 ↓ GPU/NIC应该怎样映射到网络两者不是替代关系。而是在传统高性能网络拓扑之上进一步根据 GPU 通信规律优化服务器、NIC 和交换网络之间的映射关系。12 一张图看懂 Rail-Optimized如果只记住一张图可以记住下面这个变化AS-IS网络独立于计算GPU Communication ↓ NIC ↓ Clos Network ↓ ECMP / Hash / Routing ↓ NIC ↓ GPU网络只负责把数据送过去。TO-BE算网协同模型结构 ↓ 并行策略 ↓ Collective ↓ GPU通信关系 ↓ GPU / NIC Mapping ↓ Rail-Optimized Network ↓ 更短路径 更少冲突 更稳定带宽 ↓ Collective Time ↓ ↓ Step Time ↓ ↓ MFU / Goodput ↑这才是 Rail-Optimized 真正值得关注的地方。写在最后Rail-Optimized 看起来只是“把同编号的 NIC 接到一起”。但它背后反映的是 AI 数据中心网络设计思路的一次重要变化。传统数据中心强调网络应该尽可能通用。而 AI 集群开始强调网络应该理解计算。因为大模型训练的 Traffic Matrix 不再完全随机而是由模型结构 → 并行策略 → Collective Communication共同决定。当这些通信规律能够被提前知道以后网络设计也就不需要继续把所有流量都当作“随机流量”处理。Rail-Optimized 的价值本质上就是用计算的确定性降低网络的不确定性。最终目标也不是简单地让交换机跑得更快而是让 GPU 少等待让 Collective 更稳定让每一张昂贵的 GPU 真正发挥出它应有的算力。一句话总结Rail-Optimized Network 通过将 GPU/NIC 与网络 Rail 对齐让可预测的 AI 集合通信尽量沿更短、更独立的路径传输从而减少网络跳数、流量干扰和性能抖动提高有效带宽与训练性能。参考资料NVIDIA Technical BlogDoubling all2all Performance with NVIDIA Collective Communication Library 2.12NVIDIA Enterprise Reference ArchitectureHGX AI Factory — Networking Physical TopologiesNVIDIA DGX SuperPOD Reference ArchitectureNVIDIA InfiniBand Cluster Bring-up Procedure