2250 字
11 分钟
MRC 超算网络协议

MRC(Multipath Reliable Connection)是 OpenAI 与 AMD、Broadcom、Intel、Microsoft、NVIDIA 联合开发的 RDMA 传输协议,已用于 ChatGPT/Codex 前沿模型训练。报告称,它通过多平面拓扑、数据包喷射和 SRv6 静态源路由,在十万卡级超算上实现微秒级故障恢复,并将拥塞降至接近零。


一、动机:为什么需要新协议#

大规模同步预训练(synchronous pretraining)中,每个训练步(step)的耗时受最慢传输影响——即 tail latency(尾延迟)主导性能。GPU 之间需要频繁进行 all-reduce、all-to-all 等集合通信,任何一个数据包的延迟或丢失都会造成整步等待。

随着集群规模扩大,三类问题更加突出:

  1. 流碰撞(flow collision):多条流被 hash 到同一条物理链路上,形成热点拥塞
  2. Incast 拥塞:多个发送方同时向同一目的地发送,在最后一跳形成拥塞
  3. 链路/交换机故障:百万级链路的集群中,链路抖动和交换机故障是常态

MRC 的目标:即使存在故障,也能维持可预测的低尾延迟,让训练作业不受干扰地持续运行。


二、多平面拓扑(Multi-plane Topology)#

2.1 核心思路#

将一张 800Gb/s 的 NIC 按 lane 拆分为 8 个 100Gb/s 端口,各自连接到不同的交换机,构建 8 个独立并行平面(plane)。

方案端口配置交换机层级最大 GPU 数故障影响
传统单平面1 × 800Gb/s3-4 层~64KNIC-交换机链路故障 → 作业崩溃
MRC 多平面8 × 100Gb/s仅 2 层131K+丢失一个平面仅损失 12% 带宽

2.2 多平面优势#

  • 低延迟:最多经过 3 个交换机(vs 传统 5-7 个)
  • 低成本/功耗:仅需传统方案 2/3 的光模块和 3/5 的交换机数量
  • 故障粒度更细:丢失一条 T0-T1 链路损失 0.4% 容量,远小于传统方案的 3%
  • NIC-交换机链路失效可存活:作业不会崩溃,仅降级运行

2.3 挑战#

传统单路径协议(如经典 RoCE)无法利用多平面的路径多样性——每条流只能走一条路径,流碰撞导致严重拥塞。


三、MRC 协议核心机制#

MRC 扩展了 RoCEv2 Reliable Connection (RC) 语义层,借鉴 Ultra Ethernet Transport (UET) 的设计,但保持对 Verbs API 的兼容。仅支持 RDMA write 和 write-with-immediate 操作。

3.1 数据包喷射(Packet Spraying)#

每个 MRC QP(Queue Pair)维护一个 熵值集合(EV set),通常包含 128-256 个 EV。EV 值被打散存储在 UDP 源端口和 IPv6 flow label 中。发送方在每个数据包上轮换使用不同 EV,从而将一条流的数据包同时喷射到数百条物理路径上。

EV 在各平面间均匀分配,确保跨平面负载均衡。每个 EV 对应一条确定的网络路径(特定平面上的特定上行链路)。

3.2 乱序直接写入内存#

每个 MRC 数据包携带 RDMA 虚拟地址(virtual address)和 remote key,接收端 NIC 无论包到达顺序如何,都能直接将数据写入目标 GPU 内存。

3.3 有损以太网模式#

MRC 完全禁用 PFC(Priority Flow Control),使用 best-effort 以太网。原因:

  • 数据包被喷射到数百条路径上,PFC 的反压信号无法正确对应
  • PFC 会在不同集合通信之间造成头阻塞(HOL blocking),恶化尾延迟

3.4 快速选择性重传(Selective Retransmission)#

接收端通过 SACK(Selective ACK) 精确标记哪些包已到达,发送端仅重传丢失的包——类似 TCP SACK 但在 RDMA 层面实现。

3.5 数据包裁剪(Packet Trimming)#

当交换机因拥塞要丢弃一个包时,不再丢弃整个包,而是裁掉 payload 只转发头部到目的地。目的端收到裁剪包后立即发送 NACK,触发发送端快速重传。

裁剪的价值:

  • 区分「拥塞丢包」和「链路故障丢包」
  • 避免误判路径故障(false positive)
  • 加速 incast 场景下的恢复

3.6 ECN 自适应负载均衡#

交换机启用 ECN(Explicit Congestion Notification),但在最后一跳禁用(仅用于检测核心网络拥塞,而非最后一跳的 incast)。接收端将 ECN 标记回传给发送端,发送端据此判断特定路径是否拥塞,临时切换 EV。

不同 MRC 发送端之间无需协调——各自独立做负载均衡,ECN 负责平滑聚合后的不均。

3.7 路径故障检测与恢复#

数据包丢失(非裁剪) → 立即假设路径故障 → 停止使用该 EV
→ 从同平面备用池中激活新 EV
→ 后台发送探测包(probe)
→ 探测成功 → 恢复 EV,重新加入可用池

整个过程在 几十微秒 内完成。


四、SRv6 静态源路由#

4.1 为什么弃用动态路由#

传统数据中心使用 BGP 做动态路由,但:

  • 收敛慢:大规模两层级拓扑中 BGP 收敛极其漫长
  • ECMP 集合膨胀:高基数交换机每个目的地需要维护大量不同 ECMP 集合
  • 与 MRC 冲突:MRC 先避开故障路径 → BGP 重新路由 → ECMP 映射改变 → 干扰负载均衡
  • 控制平面 Bug:数据中心研究表明 17% 交换机故障是软件 bug

MRC 将路径管理交给 NIC,交换机只按静态规则转发。

4.2 uN uSID 格式#

使用 SRv6 uSID(micro-segment ID) 格式,每个 uSID 16 bit,对应沿途一个交换机。采用 uN 风格——路径上每个交换机显式命名。

IPv6 目的地址 = 32-bit locator prefix + 16-bit uSID₁ + 16-bit uSID₂ + ...

4.3 转发流程#

  1. 交换机检查目的地前 48 bit 是否匹配自身 locator + uSID
  2. 匹配 → 将 uSID 部分左移 16 bit,露出下一跳 uSID
  3. 查 静态转发表(配置时写入,永不修改)→ 确定出端口
  4. 线速转发

MRC 包是 IPv6-in-IPv6 封装的:外层地址 = SRv6 路径,内层地址 = 目的 NIC 真实地址。

4.4 EV → SRv6 地址映射#

QP 启动时:

  1. NIC 查节点配置 → 获取 SRv6 地址模板(通用模板,含 dst uSID)
  2. NIC 生成 EV 集合,平分到所有平面,同平面内随机选子集
  3. 每发一个包:从 EV 中提取 plane number、T0 uplink number → 填入模板 → 生成最终 SRv6 地址

这样 EV = 路径的压缩表示,无需同时维护 EV 状态和 SRv6 地址两套数据。


五、运维:Clustermapper 全链路探测#

每个节点上运行 Clustermapper agent,每毫秒探测全网每条链路:

  • 探 T0:源路由到 T0 再回环
  • 探 T1:源路由到 T1 再回环
  • 精准定位:T0 probe OK + T1 probe 异常 → 问题在 T0-T1 链路,不是 NIC-T0 链路

SRv6 让探测包走与数据包完全相同的路径,避免 hash 带来的不确定性。探测经过数据平面,不会给控制面增加高频探测负担。


六、实战数据#

6.1 部署规模#

集群GPU / NIC交换机拓扑
Cluster AGB200 + CX8 800GSP4 & TH52-Tier 4×200G
Cluster BGB200 + CX8 800GSpectrum 52-Tier 8×100G
Cluster CMI355 + Pollara 400GTH52-Tier 4×100G

6.2 性能基准#

场景延迟/带宽
T0-local, 2B5.09 μs
Cross-T1, 2B6.54 μs
T0-local, 32KB~770 Gb/s(96% 峰值)
Cross-T1, 32KB~770 Gb/s
NCCL sendrecv @ 42K GPU92 GB/s

6.3 故障容错实测#

  • T0-T1 链路持续抖动(每分钟多条):训练作业几乎无感知
  • T1 交换机需重启(75K GPU 训前沿模型时发生 4 次):掉 ~580K 包,吞吐量短暂下降后完全恢复,无需与训练团队协调
  • T0 光模块故障,4 链路同时抖动:吞吐量降 ~25%,1 分钟后恢复,作业不崩溃
  • T1 交换机完全停止转发:MRC 避开故障路径,吞吐量基本不受影响
  • ⚠ 单点故障:NIC 光模块(OSFP)自身故障 → 所有端口同时掉 → 无法存活,此类故障较少见

6.4 vs RoCE 对比(64 GPU 小规模)#

集合通信MRC 1QPRoCE 1QPRoCE 16 QP
All-reduce (带宽受限)接近线速~50%~80%(8QP 后不再提升)
All-to-all全面优于 RoCE—QP scaling 无效

带丢包(0.1%):RoCE 大消息勉强撑住,小消息崩溃;MRC SACK 重传大幅优于 RoCE。

6.5 无 PFC 跨作业干扰#

7→1 incast + 并行 victim 流:RoCE + DCQCN 下 victim 被严重拖累;MRC victim 完全不受影响——丢包只发生在 incast 流自身。


七、设计对比#

层面传统方案MRC
拓扑单平面 3-4 层多平面 2 层
路径选择动态路由(BGP)SRv6 静态源路由
负载均衡ECMP hash + QP scaling数据包喷射(128-256 paths)
流量控制PFC + DCQCN禁用 PFC,best-effort
丢包恢复Go-Back-N / 连接中断SACK 选择重传 + NACK 裁剪
故障恢复路由收敛(秒~数十秒)端侧 EV 切换(微秒级)
运维需协调停训再修链路可在线修链路

八、开源与生态#

MRC 超算网络协议
https://blog.lpkt.cn/posts/concepts/mrc-supercomputer-networking/
作者
lollipopkit
发布于
2026-05-06
许可协议
CC BY-NC-SA 4.0