OpenAI Deploys MRC and SRv6 Protocols to Eliminate AI Network Outages

Live from SCCC - Resilient AI Supercomputer Networking using MRC and SRv6 | Jitendra Padhye, OpenAI — @Scale

@Scale

OpenAI's Multipath Reliable Connection and static SRv6 routing maintain cluster throughput during hardware failures by spraying packets across host-selected paths and bypassing network drops within a single round-trip time.

AI-assisted summary of Live from SCCC - Resilient AI Supercomputer Networking using MRC and SRv6 | Jitendra Padhye, OpenAI — original source. Check the original for full context.

Source published:

Detailed notes

## Background Published on YouTube by @Scale on August 27, 2026, this presentation features OpenAI's Jitendra Padhye presenting at the SCCC event. The video description highlights OpenAI's three-pronged approach to eliminating tail latency in large-scale AI pretraining using a new RDMA transport protocol called MRC paired with static SRv6 source-routing.

## TL;DR Jitendra Padhye outlines how OpenAI overcomes tail-latency bottlenecks and fabric failures during large-scale synchronous AI training across tens of thousands of GPUs. Traditional RoCE networks bound connections to single paths, causing ECMP hash collisions and capped utilization. MRC (Multipath Reliable Connection) solves this by spraying packets across all available healthy network paths, leveraging out-of-order memory placement via virtual addresses, and using static SRv6 source routing. This host-driven design allows training jobs running across 75,000 GPUs to seamlessly ride out silent switch failures and link flaps without interrupting workloads.

## Atmosphere & style The presentation blends technical depth with approachable, self-deprecating humor, anchored by Padhye's lighthearted opening joke about his son's interpretation of 'MRC'. The tone is pragmatic, grounded, and authoritative, reflecting real-world operational insights from managing frontier AI infrastructure. Listening to the talk feels like an insider look into modern hyperscale engineering, where high-stakes cluster stability is transformed from a stressful on-call nightmare into a routine, resilient system behavior.

## Key takeaways - [00:03](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=3s) MRC stands for Multipath Reliable Connection, a data center scale-out transport protocol developed by OpenAI, Microsoft, AMD, Broadcom, and Nvidia to replace Infiniband and RoCE. - [00:42](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=42s) Synchronous AI training efficiency across thousands of GPUs is governed entirely by worst-case tail latency rather than average performance. - [05:41](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=341s) Standard RoCE fabrics bound to single static paths rely on load-unaware ECMP, creating hash collisions that cap theoretical fabric utilization at around 66%. - [07:22](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=442s) MRC eliminates network hotspots by spraying packets across all available healthy fabric paths. - [07:22](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=442s) To handle out-of-order packet arrivals resulting from packet spraying, MRC embeds Virtual Memory Addresses (VA) in headers so receiving GPU NICs can place payloads directly into memory. - [10:53](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=653s) Static source routing is implemented via SRv6 using micro-SIDs, leaving the network switches completely passive without dynamic routing control planes. - [10:53](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=653s) When intermediate link failures occur, switches drop packets without in-network rerouting, allowing end hosts to detect drops and adjust paths within 1 RTT. - [16:52](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=1012s) End hosts maintain active QPs, backup QPs, and a demoted set for bad paths to instantly reroute around packet loss without stalling workloads. - [16:52](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=1012s) Network operators can apply regex denylists on source hosts to direct traffic away from targeted hardware ahead of scheduled maintenance. - [18:11](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=1091s) In production environments with 75,000 GPUs, MRC successfully rode out silent 'zombie' router failures and optical transceiver link flaps without interrupting training runs.

## Detailed walkthrough Here is the detailed walkthrough of the first part of the presentation:

[00:03](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=3s) Introduction and the Meaning of MRC

Jitendra Padhye from OpenAI opens his talk following an inspiring introduction by previous speaker Omar, joking that his teenage son provided a reality check during a dry run by suggesting "MRC" actually stands for "the most ridiculous concept." Padhye clarifies that MRC stands for **Multipath Reliable Connection**, a specialized scale-out transport protocol for AI training within the data center created through a massive joint effort between OpenAI and industry partners including Microsoft, AMD, Broadcom, and Nvidia. Designed to replace traditional Infiniband and RoCE (RDMA over Converged Ethernet) setups, MRC targets data center-level scale-out interconnects rather than host-internal scale-up fabrics. Its core purpose is to make giant AI training clusters robust against fabric failures and eliminate network bottlenecks.

- MRC stands for **Multipath Reliable Connection**. - It is a data center scale-out transport protocol designed to replace RoCE and Infiniband. - Developed collaboratively by OpenAI, Microsoft, AMD, Broadcom, and Nvidia. - Relies on three foundational architectural pillars: **packet spraying**, **source routing**, and **multi-planar networks**.

[00:42](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=42s) The Tail Latency Problem in Synchronous AI Training

Padhye breaks down the mechanics of large-scale ML training, emphasizing that thousands of GPUs operate synchronously step-by-step. Each training iteration alternates between local GPU computation and collective data exchanges (such as AllReduce). Because GPUs cannot progress to step $N+1$ until every single GPU finishes step $N$, the overall system efficiency is entirely dictated by tail latency. In standard cloud workloads, P95 or P99 metrics might suffice, but in synchronous AI pretraining, any single congested link or packet stall freezes the entire cluster. If a failure occurs, the whole step must be discarded and retried.

- ML pretraining requires synchronized lock-step execution across thousands of GPUs. - Overall efficiency depends strictly on worst-case tail latency rather than average latency or P95/P99 metrics. - A single congested link stalls all GPUs, preventing the cluster from starting the next step. - The sole objective of the transport network is to "keep the job stepping."

[05:41](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=341s) Limitations of Standard RoCE Fabrics

Standard RoCE Queue Pairs (QPs) assign all packets within a flow to a single network path because RoCE cannot natively tolerate out-of-order packet delivery or packet loss. In a multi-tier Clos network, running many QPs simultaneously inevitably causes hash collisions when using traditional, load-unaware Equal-Cost Multi-Path (ECMP) routing. When multiple QPs randomly collide on the same physical link, that link becomes a bottleneck while neighboring links sit idle, capping theoretical fabric utilization to roughly 66%.

- Standard RoCE QPs bind a connection to a single static path. - Standard ECMP routing is load-unaware, creating hash collisions when multiple QPs pick the same path. - Hash collisions create localized hot spots, limiting total network throughput even when idle capacity exists elsewhere. - Theoretical fabric utilization bounds for uncoordinated single-path ECMP sit around **66%**.

[07:22](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=442s) MRC Packet Spraying and Out-of-Order Packet Handling

MRC solves hash collisions by taking the single QP requested by the application and spraying its constituent packets across all available healthy paths in the network. Because packets take different paths, they arrive out of order due to tiny differences in wire lengths or transient delays. Standard RoCE degrades under out-of-order arrivals because its headers lack direct destination buffer offsets, triggering unnecessary retransmissions. MRC solves this by embedding the explicit Virtual Memory Address (VA) into every packet header, allowing the receiving GPU NIC to immediately place incoming out-of-order payloads directly into the correct location in memory.

- MRC sprays packets from a single QP across all available fabric paths to eliminate hotspots. - Packet headers carry direct Virtual Memory Addresses (VA) to handle out-of-order arrivals gracefully. - The receiving NIC places out-of-order payloads into memory immediately as they arrive. - A completion signal is generated only once all packets forming the full buffer (e.g., packets 1 through 5) have landed.

[10:53](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=653s) Static Source Routing via SRv6

Instead of relying on dynamic in-network ECMP, MRC leverages **SRv6 (Segment Routing over IPv6)** to implement static source routing. The source host maintains full knowledge of the topology and explicitly encodes the exact path of switches and routers into the packet header using micro-SIDs (16-bit router identifiers). As a packet traverses the network, each switch reads its designated micro-SID, shifts the destination address left by 16 bits, and forwards the packet to the next predetermined hop. The fabric network remains entirely passive and static; if a link along the route fails, the switch simply drops the packet, leaving retransmission and path selection entirely to the end hosts.

- Packets use SRv6 with up to six **16-bit micro-SIDs** embedded inside a 32-bit locator structure. - Switches perform static forwarding and bit-shifting without maintaining dynamic control planes or state tables. - If an intermediate link fails, switches drop the packet immediately without attempting in-network rerouting. - End hosts detect drops and deterministically steer traffic away from bad paths within **1 round-trip time (RTT)**. - SRv6 allows end hosts to run deterministic loopback probes (e.g., source $\rightarrow$ T0 $\rightarrow$ T1 $\rightarrow$ T0 $\rightarrow$ source) to continuously monitor network path health.

[16:52](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=1012s) Dynamic Path Management and Preventive Maintenance via Denylists

The core beauty of static source-routing combined with Multi-path RDMA Transport (MRC) lies in the host’s total awareness of the network environment. The source host maintains full knowledge of the static physical topology and dynamically tracks which paths are currently alive and performing well. To illustrate how path selection operates in practice, consider a network topology offering 128 potential end-to-end paths:

1. **Active Paths:** The host creates 32 active Queue Pairs (QPs) to immediately spray and balance traffic across 32 available paths. 2. **Backup Pool:** It maintains 32 backup QPs in reserve while leaving the remaining 64 potential paths unassigned. 3. **Loss Handling & Probing:** If a path experiences packet loss, the host immediately demotes that QP to a designated "bad path" set for continuous probing and monitoring. 4. **Instant Promotion:** A spare QP from the backup pool is promoted to active duty instantly—without waiting for pre-testing—ensuring unmanaged flow degradation never stalls the host.

Beyond reactive recovery, this approach enables proactive network management. Because path selector values and micro-ETs (Ethertypes/encapsulations) are fully mapped, network operators can schedule maintenance events without impacting active workloads. Engineers can program regular expressions directly into source hosts to define "denylists." When specific switches or links are slated for maintenance, these regex patterns ensure that traffic completely avoids the affected infrastructure ahead of time, preventing any artificial drops or latency spikes during router servicing.

[18:11](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=1091s) Real-World Resiliency: Riding Out Zombie Routers and Link Flaps

In production environments, MRC has repeatedly demonstrated its ability to prevent network anomalies from disrupting massive AI training runs. During a training job utilizing approximately 75,000 production GPUs, a Tier 1 (T1) switch experienced a "zombie" failure—a scenario where the router remains powered on and attempts to forward traffic, yet silent corruption or drop behavior occurs with zero indication in standard telemetry. Despite impacting 25% of the active QPs and dropping roughly half a million packets before system-wide detection, MRC's end-to-end telemetry allowed hosts to independently identify failing path selector (PS) values and move them into the bad path set.

``` [Host Spraying Traffic] / | \ [Path A] [Path B] [Path C (Zombie T1)] │ │ │ ▼ ▼ x (Silent Drops) (Active) (Active) │ ▼ [Host Detects Drop] │ ▼ [Quarantine PS Value to Bad Set] │ ▼ [Promote Backup QP Instantly] ```

Although the graph was plotted at a minute granularity to obscure exact recovery figures, MRC shifts paths on the scale of a single Round-Trip Time (RTT). Full throughput recovered near-instantly, allowing the job to continue uninterrupted while the faulty switch eventually rebooted. A similar incident occurred on a Tier 0 (T0) switch due to a flapping optical transceiver across four links. Under traditional architectures, losing a T0 or T1 switch triggers job-hurting tail latency or complete pretraining failures; with MRC and static SRv6 routing, it manifests as nothing more than a minor, unnoticeable blip.

- **On-Call Impact:** Operating large-scale AI fabrics becomes significantly less stressful for network engineers, as jobs automatically sustain high throughput even when underlying links flap or drop unexpectedly. - **Hardware Integration & Vendors:** The architecture is supported in ASIC and NIC hardware from major vendors, including NVIDIA, AMD, and Broadcom. - **Speed Profiles:** MRC is deployed and operational across both 400G and 800G fabric speeds. - **OpenAI Production Scale:** Deployed across multi-tier, multi-plane production clusters configured in both $4 \times 200\text{G}$ and $8 \times 100\text{G}$ setups. - **Debugging & Tooling:** Traditional network diagnostics such as `ping` and `traceroute` continue to work alongside specialized tools like Cluster Mapper to debug degraded hardware while jobs run unimpeded. - **Research Paper:** Detailed technical specifications regarding compact data structures, congestion control, and multi-plane fabric designs are published in the MRC paper available on arXiv.

<FollowUp label="Want to explore how MRC's congestion control algorithms interact with static SRv6 source-routing?" query="Explain the congestion control mechanisms used in OpenAI's MRC and how they interact with static SRv6 source-routing."/>

## Notable quotes > [00:03](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=3s) the most ridiculous concept — Jitendra Padhye

> [00:03](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=3s) Multipath Reliable Connection — Jitendra Padhye

> [00:42](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=42s) keep the job stepping — Jitendra Padhye

## Mentioned Jitendra Padhye, OpenAI, Microsoft, AMD, Broadcom, Nvidia, Infiniband, RoCE, MRC, SRv6, ECMP, Cluster Mapper, arXiv

[Source](https://www.youtube.com/watch?v=gTqeU9cCxKQ)

中文简报

OpenAI部署MRC与SRv6协议以消除AI网络故障 OpenAI的多路径可靠连接(MRC)与静态SRv6路由通过在主机选择的路径上喷洒数据包,并在单个往返时间内绕过网络丢包,在硬件故障期间维持集群吞吐量。 Jitendra Padhye概述了OpenAI如何在涉及数万张GPU的大规模同步AI训练中克服尾部延迟瓶颈和架构故障。传统的RoCE网络将连接绑定至单一路径,从而导致ECMP哈希冲突并限制了利用率。MRC(多路径可靠连接)通过将数据包喷洒至所有可用的健康网络路径、利用虚拟地址实现乱序内存放置,以及采用静态SRv6源路由来解决该问题。这种主机驱动的设计使得运行在75,000张GPU上的训练任务能够无缝抵御交换机静默故障和链路抖动,而不会中断工作负载。 OpenAI 联合微软、AMD、Broadcom 和 Nvidia 推出了专为 AI 超算设计的规模化扩展传输协议 MRC(Multipath Reliable Connection),旨在替代传统 RoCE 与 Infiniband,消除大规模同步训练中的长尾延迟瓶颈。 (0:03) 针对标准 RoCE 因 ECMP 哈希冲突导致网络利用率上限约 66% 的缺陷,MRC 采用数据包喷洒(packet spraying)技术均衡负载,并通过在包头嵌入虚拟内存地址(VA)实现乱序数据包直接写入 GPU 显存。 (7:22) 网络架构采用基于 SRv6 micro-SID 的静态源路由机制,交换机保持完全被动转发且不维护动态路由状态,遇故障直接丢包,由终端主机在 1 个 RTT 内自主感知并完成路径重定向。 (10:53) 在约 75,000 颗 GPU 的生产训练集群中,MRC 成功抵御了静默丢包的“僵尸交换机”以及光纤抖动等突发故障,依托主备 QP 池无缝切换隔离故障路径,确保前沿模型训练全程零中断。 (18:11)

Reading summary

Jitendra Padhye of OpenAI presents Multipath Reliable Connection (MRC), a scale-out transport protocol developed with Microsoft, AMD, Broadcom, and Nvidia to replace RoCE and InfiniBand in AI training. MRC addresses the extreme tail-latency sensitivities of synchronous supercomputing by coupling packet spraying with host-managed SRv6 static source routing. Synchronous Training Vulnerabilities and RoCE Bottlenecks (0:42) Synchronous machine learning pretraining alternates between local GPU computation and collective exchanges, such as AllReduce, across thousands of GPUs. Because no worker can begin step N+1 until every GPU completes step N, overall cluster efficiency is governed strictly by worst-case tail latency rather than average or high-percentile (P95/P99) performance. Any localized link congestion or packet delay halts the entire cluster, risking discarded steps. Conventional RDMA over Converged Ethernet (RoCE) ties each Queue Pair (QP) to a single static path. In multi-tier Clos networks, load-unaware Equal-Cost Multi-Path (ECMP) routing causes random hash collisions where multiple QPs congest a single physical link while alternative routes remain idle. Padhye notes that this uncoordinated allocation caps theoretical fabric utilization at approximately 66%. Packet Spraying with Direct Memory Placement (7:22) To eliminate hash collisions, MRC sprays the individual packets of a single application QP across all available healthy paths in the network fabric. Because variable physical link lengths and transient delays cause packets to arrive out of order, standard RoCE implementations would suffer severe degradation and trigger redundant retransmissions due to a lack of buffer offset information. MRC overcomes this limitation by encoding the explicit Virtual Memory Address (VA) directly into each packet header. The destination GPU NIC reads this address and places out-of-order payloads directly into memory upon arrival. A completion signal is delivered to the host only after every packet comprising the buffer has landed. Static Source Routing Through SRv6 Micro-SIDs (10:53) Rather than relying on dynamic in-network routing decisions, MRC implements static source routing using Segment Routing over IPv6 (SRv6). The sending host maintains full visibility of the physical topology and encodes up to six 16-bit micro-SIDs inside a 32-bit locator structure within each packet header. Intermediate switches operate statelessly, executing a 16-bit left shift on the destination address and statically forwarding the packet without maintaining control planes or routing state tables. If an intermediate link fails, the switch immediately drops the packet instead of attempting local rerouting. End hosts independently detect packet loss via continuous deterministic loopback probes and steer traffic away from degraded paths within one round-trip time (RTT). Host-Driven Path Recovery in Production Environments (16:52) MRC manages path availability by organizing network routes into dynamic pools. In an illustrative 128-path topology, the host activates 32 QPs across active paths, holds 32 backup QPs in reserve, and leaves 64 unassigned. If packet loss is detected, the host demotes the impaired path to a monitored bad-path set and immediately promotes a reserve QP to maintain throughput. For planned maintenance, operators can inject regular-expression denylists into source hosts to proactively route traffic around specific switches without packet loss. In an OpenAI production run across roughly 75,000 GPUs, a Tier 1 switch suffered a 'zombie' failure, silently dropping around 500,000 packets across 25% of active QPs without generating switch-level telemetry. MRC host telemetry isolated the failing path selectors and promoted backup paths within a single RTT, preventing job disruption. Similar fault isolation successfully mitigated Tier 0 optical transceiver link flaps across 400G and 800G fabrics. Padhye asserts that shifting routing and failover responsibilities from switch hardware to host-driven software eliminates single-point fabric failures in large-scale AI clusters. Supported by ASICs and NICs from Nvidia, AMD, and Broadcom, the architecture is operational in OpenAI's 400G and 800G production systems, with detailed congestion control mechanisms and compact data structures documented in OpenAI's published research paper.

精炼阅读摘要

OpenAI网络研究员Jitendra Padhye指出,在大规模同步AI训练中,系统的算力效率完全由最坏情况下的尾部延迟决定;为此,OpenAI联合微软、AMD、博通与英伟达研发了多路径可靠连接(MRC)与SRv6静态源路由架构,旨在通过端主机流量喷洒与毫秒级故障旁路,替代传统RoCE并消除网络热点与集群停顿。 同步训练尾部延迟与RoCE架构瓶颈 (0:42) 在数万张GPU参与的机器学习预训练中,所有计算卡均以步调一致的锁步模式运行,交替进行本地计算与AllReduce等集合数据通信。由于整个集群必须等待最后一张GPU完成计算后才能进入下一步,平均延迟或P95/P99指标在此时失效,任何单条链路拥塞引发的数据包停顿都会直接卡死整个训练任务。传统RoCE网络将每个队列对(QP)固定绑定在单一路径上,且依赖无负载感知的ECMP哈希分发;当多个QP在多层Clos网络中发生哈希碰撞时,会导致特定物理链路过载而邻近链路闲置,使网络整体理论利用率被限制在约66%,同时RoCE缺乏对数据包乱序与丢包的原生容忍能力。 MRC数据包喷洒与显存直写机制 (7:22) 为了消除局部热点并最大化吞吐,MRC打破了连接与单一物理链路的绑定关系,将上层应用请求的单个QP拆分成离散数据包,随机喷洒(spray)到数据中心所有可用的健康路径上。这种分流策略必然导致数据包因物理线缆长度微差或瞬时延迟而乱序到达接收端,而标准RoCE在遇到乱序到达时会因缺乏内存偏移信息而引发不必要的全局重传。MRC的解决方案是在每个数据包头部直接嵌入显式虚拟内存地址(Virtual Memory Address, VA),接收端GPU网卡在接收到乱序数据包后可立即将其精准写入对应的显存地址中,仅在构成该缓冲区的全部数据包均落盘后才向上层发出完成信号,彻底解耦了有序传输与高吞吐的冲突。 基于SRv6的主机静态源路由架构 (10:53) MRC彻底摒弃了交换网络内部的动态自适应路由,转而利用基于IPv6的分段路由(SRv6)实现完全由发送端主机掌控的静态源路由。源主机拥有数据中心物理拓扑的全局视图,会在数据包头部嵌入由16位路由器标识符(micro-SIDs)组成的精简路径指令(32位定位器中最多容纳6个micro-SID);沿途交换机仅需读取对应的micro-SID并执行固定的左移转发操作,无需维护复杂的动态控制平面或庞大的状态转发表。在这一架构下,网络中间链路发生故障时交换机直接丢包,不执行网内重路由;端主机可在约1个往返时间(1 RTT)内敏捷感知丢包,并主动将流量重新规划至健康路径,同时端主机还能利用确定性回环探测全天候监视各级拓扑的健康状态。 动态路径管理与大规模生产容错实证 (16:52) 在路径运行机制上,主机维护着活动路径与备用路径池。例如在具备128条端到端路径的环境中,主机会创建32个活动QP分散承载流量,预留32个备用QP,其余64条路径处于未分配状态;一旦活动路径遭遇丢包,受损QP会立刻被降级至坏路径集合供探针持续监控,备用QP则瞬间上线承接业务而无需等待预热测试。此外,工程师可在源主机上预先部署正则表达式黑名单,在交换机计划内停机维护前将流量无感导离。在OpenAI部署约75,000张生产GPU的实机训练中,一台T1交换机曾发生供电正常却静默丢弃50万数据包的“僵尸交换机”隐蔽故障,波及25%的活动QP;依靠端到端遥测,MRC在单RTT时间尺度内完成了流量重定向并即刻恢复全额吞吐,规避了大规模预训练因网络抖动被迫重算的风险。 Padhye强调,MRC与SRv6架构已由英伟达、AMD及博通在ASIC和网卡硬件层实现原生支持,并在OpenAI的多层生产集群(涵盖400G与800G网络,以及4×200G和8×100G配置)中成熟运行,显著降低了运维大型AI集群的网络压力;不过该方案要求终端节点对物理拓扑具备高度感知与强控制力,其在异构多租户公有云环境下的普适性与深层拥塞控制交互细节,仍有待学界与产业界进一步验证。

Detailed notes — zh

## Background 本内容由 @Scale 频道于 2026 年 9 月 3 日发布在 YouTube 平台,记录了来自 OpenAI 的 Jitendra Padhye 在 SCCC 会议上的现场演讲。页面描述指出,在大规模同步预训练中尾部延迟决定了整体性能,本场演讲详细介绍了 OpenAI 应对该瓶颈的三管齐下策略:采用基于 RDMA 的新型 MRC 传输协议实现跨路径喷洒与主动负载均衡以消除流冲突,结合基于 SRv6 的静态源路由使端侧能自主绕过故障,并分享了该架构在训练前沿模型生产环境中的实战运行经验。 ## TL;DR Jitendra Padhye 深入剖析了传统 RoCE 和 ECMP 哈希冲突导致的网络热点与带宽浪费,阐述了同步训练中尾部延迟对全局计算效率的决定性制约。为了破解这一困境,OpenAI 携手微软、英伟达、AMD 和博通联合研发了新型底层传输协议 MRC(Multipath Reliable Connection),通过在数据包头部显式携带目标内存虚拟地址,实现了无损的全路径细粒度数据包喷洒与零重传乱序直写。同时,系统彻底摒弃了交换矩阵的动态路由与 ECMP,改用 SRv6 微段标识符(Micro-SID)将转发控制权完全下放至端侧主机,交换机只做无状态的极简位移查表与坏链路即时丢包。在 OpenAI 生产集群长达 7.5 万张 GPU 规模的高压预训练实测中,MRC 展现出毫秒级故障自愈能力,成功在交换机“僵尸死锁”与光模块剧烈抖动时平滑剔除坏死路径,保障了大模型训练的全程零中断稳健步进。 ## Atmosphere & style 整场演讲氛围专业硬核却又松弛风趣,开场借由儿子吐槽 MRC 是“最荒谬概念”的家庭趣事瞬间拉近了与现场同行的距离,随后又调侃自己的 RoCE 观点可能会被丢石头,展现出老牌网络架构师的从容与幽默。叙事节奏层层递进,从严密的协议报文解析一路推进到 7.5 万卡生产环境实战监控曲线的峰回路转,当提到系统在静默丢弃 50 万个包后实现毫秒自愈、让自己的 On-call 值班彻底踏实下来时,言谈间充满了对工程自研成果的笃定与自豪。对于观看者而言,这场分享既有扎实的 Wireshark 抓包细节和微段转发硬核推演,又洋溢着顶级 AI 超算背后的工程极客魅力,听来令人拍案叫绝、极为过瘾。 ## Bulletin - [00:03](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=3s) OpenAI 联合微软、AMD、博通及英伟达共同研发了面向大规模 AI 训练的新型传输协议 MRC(Multipath Reliable Connection),结合静态 SRv6 源路由替代传统 RoCE 与 InfiniBand,从根本上解决同步训练中的尾部延迟与硬件故障中断痛点。 - [07:20](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=440s) MRC 采用单 QP 全路径数据包细粒度喷洒(Packet Spraying),并在数据包头显式携带目标 GPU 虚拟内存地址以支持乱序直写,彻底打破了传统 RoCE 受 ECMP 哈希碰撞导致 66% 理论带宽利用率上限的枷锁。 - [10:53](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=653s) 网络架构弃用交换机动态路由与 ECMP,将交换矩阵推至极致静态与“无状态”化,通过 SRv6 微段标识符(Micro-SID)逐跳位移转发并在丢包时直接硬性丢弃,全面将路径选择、探测及毫秒级故障重定向归还给端侧网卡。 - [18:10](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=1090s) 该体系已在 OpenAI 部署有 7.5 万张 GPU 的生产集群中实战验证,在脊交换机发生静默丢包(累计丢弃 50 万个包、波及 25% QP)及光模块剧烈抖动等事故下,均在数个 RTT 内自愈绕行,保障万亿参数前沿模型的预训练作业完全不中断。 ## Key takeaways - [01:39](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=99s) 大规模同步 AI 训练遵循严格的木桶原理,P95 或 P99 延迟指标失去参考价值,通信阶段的最慢尾部延迟直接决定了训练步长和全局 GPU 算力利用率。 - [04:34](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=274s) 传统 RoCE 绑死单路径且依赖无负载感知的 ECMP 哈希分配,导致严重的物理链路哈希碰撞与局部热点,集群理论有效带宽利用率上限仅为 66% 左右。 - [07:20](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=440s) MRC 保持上层应用单 QP 抽象,底层网卡将流量均匀喷洒至全网所有可用链路,从物理机制上彻底消除网络拥塞热点。 - [10:23](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=623s) 为解决数据包喷洒引发的乱序问题,MRC 在每个分片包头(包括 Write Middle)显式携带目标 GPU 虚拟内存地址,接收端网卡支持无序直写,免去重组缓冲与丢包重传开销。 - [10:53](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=653s) 架构全面弃用交换机 ECMP,将交换矩阵变为纯静态的无状态转发节点;若遇到坏链路交换机直接丢弃数据包,坚决贯彻端到端(End-to-End)系统设计原则。 - [11:52](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=712s) 基于 SRv6 的转发机制依赖 32 位 Locator 与 16 位 Micro-SID,交换机仅需识别并移除自身标识后左移地址字段,彻底消除分布式控制平面的微环路与收敛震荡。 - [13:35](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=815s) 端节点利用对称拓扑结构引入“路径选择器”(Path Selector),仅需提取少量比特位即可近乎零开销合成完整的 SRv6 IPv6 报头,并支持离线静态全网路由配置验证。 - [15:31](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=931s) 端到端源路由支持精细的主动自检(如跨平面环回探测),告别了传统公有云网络依赖多层 IP-in-IP 隧道去盲猜链路拓扑的困境,实现毫秒级静默故障感知。 - [17:02](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=1022s) MRC 维护 32 个活跃、32 个备用与 64 个冷备的 QP 状态池,遭遇丢包单 RTT 内即可秒级拉起备用 QP 顶替,保障总吞吐量始终拉满。 - [17:02](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=1022s) 日常硬件停机割接维护时,运维只需向端节点下发基于 Micro-SID 的正则表达式黑名单(Deny-lists),即可在设备断电前实现流量无感热规避。 - [18:10](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=1090s) 在 7.5 万张 GPU 预训练集群的实战中,面对 T1 交换机静默丢弃 50 万个包的“僵尸”故障,各节点在数个 RTT 内自发剔除故障路径,模型训练全程零中断。 - [19:56](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=1196s) 生产机房遭遇 T0 交换机光模块剧烈抖动导致 4 条物理链路瘫痪时,MRC 毫秒级剥离受损路径,吞吐曲线仅微幅波动,将灾难性故障降维为无害扰动。 - [20:45](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=1245s) 系统配套重构了基于 SRv6 的传统运维工具链(ping、traceroute)与 Cluster Mapper 拓扑发现系统,确保端侧高容错的同时底座硬件仍可被精准运维。 - [21:26](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=1286s) MRC 与 SRv6 方案已获得 Nvidia、AMD 与 Broadcom 主流硬件巨头的全力落地支持,并全面覆盖 400G 与 800G 网络规格。 - [21:26](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=1286s) 该体系已在 OpenAI 内部 4×200G 与 8×100G 的双层多平面生产网络中全量落地,稳定承载最前沿 Frontier 模型的超大规模分布式预训练作业。 ## Detailed walkthrough ### [00:03](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=3s) 开场轶事与 MRC 协议的诞生背景 Jitendra Padhye 代表 OpenAI 登台演讲,在致谢前一位讲者 Omar 充满感染力的开场时,他打趣说自己坐在后排听得直起鸡皮疙瘩,很难超越那样的演讲。与宏大愿景相比,他今天带来的是一个更微观、更具体的议题——传输协议。这套由 OpenAI 携手行业伙伴共同研发的新型传输协议名为 MRC,并结合了 SRv6(基于 IPv6 的段路由技术)。关于 MRC 这个缩写,Padhye 讲了一则风趣的家庭轶事:在正式参会前,他拉着自己十几岁的儿子听了一遍试讲,“这是个巨大的错误,千万别这么干”。儿子听完毫不客气地吐槽说:“老爸,MRC 显然代表的是‘最荒谬的概念’(Most Ridiculous Concept)。”Padhye 笑称希望台下的同行们能够口下留情。 实际上,MRC 代表的是“多路径可靠连接”(Multipath Reliable Connection),是专为大规模 AI 训练设计的底层传输协议。这项研究是产业界多方深度合作的成果,在已发布的 arXiv 论文中署名作者众多,涵盖了来自 OpenAI、微软(Microsoft)、AMD、博通(Broadcom)以及英伟达(Nvidia)的顶尖工程师与研究者,并且相关协议实现已由多家硬件供应商提供支持。 - **全称与定位**:MRC(Multipath Reliable Connection,多路径可靠连接),面向大规模 AI 训练后端 Scale-out 网络的全新高性能传输协议。 - **合作生态**:OpenAI 牵头,与微软、AMD、博通、英伟达等核心网络及计算芯片厂商联合攻关并实现多厂商落地。 --- ### [01:39](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=99s) 核心主旨:以尾部延迟与容错为中心的 AI 训练网络 用一张幻灯片总结 MRC 的核心目标:它专注于数据中心内部的大规模横向扩展网络(Scale-out),旨在替代传统 AI 超算中由 InfiniBand 和经典 RoCE(RDMA over Converged Ethernet)所承担的角色。研发 MRC 的驱动力非常直接:在大规模集群中,网络物理拓扑的链路和设备故障是常态,必须保障 AI 训练任务的高可用性(Job Uptime),并支撑构建规模更加庞大的算力集群。MRC 的核心技术支柱包括三项:数据包喷洒(Packet Spraying)、源路由(Source Routing)以及多平面网络(Multi-plane Networks)。 在大规模机器学习训练中,成千上万张 GPU 以同步模式协同工作,流程高度节拍化:每张 GPU 先在本地执行计算,随后通过 AllReduce 等集合通信原语(Collective Operations)互相交换梯度或权重数据,只有当所有 GPU 都完成当前步骤的通信后,整个训练才能推进到下一个 Step。这意味着集群的整体计算效率完全被通信的“尾部延迟”(Tail Latency)所卡死。任何一个网络拥塞点、任何一张 GPU 的数据延迟,都会导致全局停滞;而一旦发生网络中断或丢包故障,往往需要回滚至上一个 Checkpoint 重新计算。Padhye 提到自己在微软管理公有云网络的经历:在传统通用云中,网络优化看重的是 P95 或 P99,但在大规模 AI 训练场景下,这些指标毫无意义,唯有绝对的尾部延迟决定了整体产出。 ```mermaid flowchart TD accTitle: AI 同步训练步骤与尾部延迟瓶颈 accDescr: 展示两张 GPU 并行计算与同步通信的阶段,只有尾部延迟最低的节点完成通信后,全局才能进入下一个 Step。 subgraph Step_N ["当前训练步骤 (Step N)"] direction TB subgraph GPU1 ["GPU 1"] C1["本地计算 (Compute)"] --> T1["集合通信数据交换 (AllReduce)"] end subgraph GPU2 ["GPU 2 (遭遇拥塞/延迟)"] C2["本地计算 (Compute)"] --> T2["集合通信慢拖尾 (Tail Latency)"] end end SyncBarrier{"全局同步屏障\n(全部完成方可推进)"} NextStep["进入下一步骤 (Step N+1)"] T1 --> SyncBarrier T2 --> SyncBarrier SyncBarrier --> NextStep ``` - **业务核心痛点**:同步训练遵循木桶理论,任何单点慢流都会通过同步屏障(Barrier)放大为全局计算资源的空转浪费。 - **传统指标失效**:P95、P99 延迟对于大规模同步任务没有参考价值,决定训练步长耗时(Step Time)的唯有极限最慢尾部。 --- ### [04:34](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=274s) 经典 RoCE 的致命缺陷:哈希冲突与吞吐黑洞 AI 训练对网络的要求可以极简化为一句话:“让任务持续推进(Keep the job stepping)”。在 OpenAI 内部,甚至有一个专门的 Slack 图标,专门在训练任务因网络故障中断后重新恢复步进时发出。为了实现这一目标,传输协议必须做到两点:第一,充分压榨并利用网络中所有健康的可用带宽,防止任何 GPU 沦为吞吐瓶颈;第二,在数万至数十万 GPU 构成的庞大网络中,面对频繁发生的交换机与光纤链路故障,网络必须能够“极其迅速且全自动地绕过故障”。Padhye 强调,在这样的大规模与毫秒级时间尺度下,人工介入根本不可行。 Padhye 直言,这正是经典 RoCE 无法胜任的地方(他开玩笑说这番话可能会让 Meta 的 RoCE 专家们“朝他扔石头”)。传统的 RoCE 队列对(Queue Pair, QP)绑定在单一网络路径上。在标准的双层 Clos 拓扑结构中,单条连接内部的所有数据包都走同一路径;当集群中存在海量并发 QP 时,底层交换机依赖 ECMP(等价多路径路由)根据五元组哈希分配路径。然而,经典 ECMP 完全缺乏负载感知能力(Load-unaware),不可避免地会发生严重的哈希碰撞(Hash Collision)——多条重载 QP 被散列到同一条物理上行链路上相互挤占,而相邻的其它链路却完全处于闲置状态。学术界与工业界早有明确的理论计算证明:在此类模式下,网络的理论预期带宽利用率上限仅约为 66%,造成了严重的算力与带宽浪费。 ```mermaid flowchart LR accTitle: 经典 RoCE 在 ECMP 下的哈希碰撞缺陷 accDescr: 展示两组 GPU 的 QP 经由 ECMP 哈希后挤占在同一物理链路上,导致拥塞与带宽浪费。 subgraph Hosts_Src ["源端服务器"] H1["GPU Server A (QP 1)"] H2["GPU Server B (QP 2)"] end subgraph Leaf_Layer ["Leaf 交换机 (T0)"] L1["Leaf Switch"] end subgraph Spine_Layer ["Spine 核心层 (T1)"] S1["Spine 1 (过载热点/冲突)"] S2["Spine 2 (空闲闲置链路)"] end H1 --> L1 H2 --> L1 L1 -- "ECMP 碰撞散列" --> S1 L1 -. "无流量分配 (利用率受限)".-> S2 ``` - **网络单一职责**:保障训练不中断(Keep the job stepping),消除人工干预。 - **经典 RoCE 瓶颈**:单 QP 单路径路由,对乱序和丢包极度敏感,严重受制于 ECMP 无感知哈希冲突。 - **利用率上限**:受哈希冲突影响,无负载感知网络织网的平均有效带宽利用率仅有约 66%。 --- ### [07:20](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=440s) MRC 的破局策略:无感知的全路径数据包喷洒与乱序重组 为了彻底终结哈希碰撞导致的局部热点,MRC 采用了数据包喷洒(Packet Spraying)机制。在应用层看来,操作逻辑没有改变,上层通信库依旧只开启一个 QP;但在底层传输层,MRC 会将该 QP 产生的所有数据包动态、均匀地“喷洒”到所有可用的健康网络路径上。以典型的 Clos 架构为例,数据包从服务器上行至 ToR/Leaf(T0)交换机后,MRC 会充分利用通往所有 Spine(T1)路由器的上行链路,同时下行送达目的地。即使有多个 QP 并发传输,大家也都在均匀共享整个拓扑的所有可用物理链路,从而在根源上消除了局部网络拥塞和热点(Hotspots)。 然而,数据包喷洒在网络界向来是“知易行难”。它会立刻引发两大挑战:首先是不可避免的乱序到达(Out-of-order Arrival),因为即便网络没有拥塞,不同物理跳数的走线长度与交换机时延也存在微小差异;其次是工程实现上的路径选择与控制策略。针对乱序到达问题,传统 RoCE 会直接丢弃乱序包并触发重传及拥塞退避,导致吞吐断崖式下跌,因为传统 RoCE 数据包报头并未携带目标内存虚拟地址(Virtual Address, VA),网卡不知道如何直接落盘乱序数据。MRC 在协议设计上进行了革新:每个数据包报头均显式携带其在 GPU 内存缓冲区中对应的虚拟地址偏移。当数据包 1 之后紧接着乱序到达数据包 3 时,接收端网卡凭借报头地址直接将包 3 写入 GPU 缓冲区的正确槽位中,无需任何缓冲等待或重传;当数据包 2、4、5 陆续到达填满整个缓冲区后,系统直接产生完成信号(Completion),以极简且高效的方式化解了乱序难题。 - **透明单 QP 喷洒**:上层应用仍按标准建立单条 QP,底层网卡将流量细粒度喷洒至全网所有可用链路,从机制上杜绝网络热点。 - **乱序直写(Direct Placement)机制**:MRC 数据包自带 GPU 虚拟内存地址,接收端网卡支持乱序到达即时写入,彻底摆脱传统 RoCE 的乱序重传开销。 ### [10:23](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=623s) 乱序接收与数据包格式:Wireshark 视角的 RDMA 扩展 在 RDMA 传输中,解决乱序到达的核心在于让每个数据包都自带上下文信息。正如讲者调侃道,“没有任何一场网络技术演讲能在缺少 Wireshark 抓包图的情况下算得上完整”,屏幕上随即展示了一条真实线路上抓取的数据包细节。传统的 RDMA 架构中,目标虚拟内存地址(Virtual Address)通常仅包含在分片的起始包(RDMA Write First)之中,而在这套被称为 MRC 的协议实现中,即使是中间包(RDMA Write Middle)的头部也明确携带着该数据包应该写入内存的具体虚拟地址。这意味着网络即便出现严重乱序,网卡接收端也能直接依据数据包自带的地址完成精准落盘与内存写入,处理乱序包变得非常直接明了,无需复杂的重组等待缓冲。 - **显式内存寻址**:每个分片数据包(包括 Write Middle)均携带目标虚拟地址,彻底消除对严格按序到达的依赖。 - **线缆格式精简**:数据包头仅附加必要的扩展路由与内存定位信息,在保持极低开销的同时实现完全乱序容忍。 ### [10:53](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=653s) 抛弃 ECMP:基于 SRv6 源路由的端到端网络架构 解决了乱序接收后,核心决策落在了如何为每个数据包选择传输路径上。如果遵循传统的 MRC 或 Ultra Ethernet 规范(UCC/UET),底层通常依赖等价多路径路由(ECMP)。然而,ECMP 意味着主机将转发路径的决定权完全交给了交换网络,主机不仅会受制于网络内部黑盒哈希引发的流冲突,而且一旦某条路径发生静默故障,端节点根本无法主动绕开坏死链路,“完全受制于 Fabric 的摆布”。OpenAI 团队选择了一条截然不同的路径:彻底弃用 ECMP,采用成熟的 IPv6 分段路由(SRv6)推行端到端源路由(Source Routing)。 在这套架构下,计算节点(Host)完全掌握网络的基准物理拓扑,并直接在数据包头部预先编排好完整的转发路径。与之相对,整个交换机矩阵(Fabric)被推到了“彻底变笨”(Completely Dumb)的极致:交换机内部不运行复杂的动态路由控制平面,只做纯静态的转发查找。如果主机选定的路径恰好经过了一条已经故障宕掉的物理链路,交换机不会进行动态重路由,而是直接将数据包丢弃。丢包的感知、路径惩罚以及重传调度全部由发送端主机负责。这正是系统架构设计中经典的“端到端原则”(End-to-End Principle)在现代超大规模 AI 数据中心里的极致重现。 ### [11:52](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=712s) SRv6 转发机制与微段标识符(Micro-SID)逐跳位移 为了让观众清晰理解源路由如何在网络硬件中流转,讲者给出了一个精练的 SRv6 运行原理解析。当一个数据包从发送端网卡发出时,它的 IPv6 目的地址实际上已经承载了整条转发路径的完整信息。该地址由一个 32 位的定位符(Locator)和一系列 16 位的微段标识符(Micro-SID,即路由器标识)级联而成。数据包从源网卡发出后,首先进入直连的源端接入交换机(Source T0),随后根据 Micro-SID 指定的序列,跨越特定的一组叶交换机或脊交换机(T1),再下行到达指定的目标端接入交换机(Destination T0),最终抵达目标服务器网卡。 在数据包穿越交换矩阵的过程中,每个交换节点执行的操作极度精简且高度一致:当源 T0 收到数据包,它识别出匹配自身的 Micro-SID,在确认自己是当前跳的执行者后,直接将这个 16 位的 Micro-SID 移除,并将后续整个地址字段向左位移 16 位;此时暴露出下一个 16 位的 Micro-SID(即指定的 T1 交换机标识),T0 依照预先烧录的静态映射表将数据包直接推送到该 T1。沿途的交换机不维护动态路由协议,没有复杂的控制平面协商,如果通往特定下游端口的链路损坏,交换机不做本地绕障,直接丢包。端节点随后通过 ACK 超时或丢失反馈意识到路径不可用,并在下一次重传时主动切换至健康路径。 ```mermaid flowchart TD accTitle: SRv6 Micro-SID 逐跳位移转发流程 accDescr: 展示数据包从源端网卡发出,经过 T0、T1 静态位移 Micro-SID 并最终下行到达目标网卡的过程。 subgraph SourceHost["源端主机"] NIC1["源网卡 (NIC)<br/>封装 SRv6 地址: [Locator | T0 | T1 | D-T0 | D-NIC]"] end subgraph Fabric["极简静态交换矩阵 (Fabric)"] T0["源端 T0 交换机<br/>识别自身 Micro-SID,左移 16 位<br/>静态转发至指定 T1"] T1["脊交换机 (T1)<br/>识别自身 Micro-SID,左移 16 位<br/>静态转发至下行 D-T0"] DT0["目的端 T0 (D-T0)<br/>识别自身 Micro-SID,左移 16 位<br/>推向目标网卡"] end subgraph DestHost["目的端主机"] DNIC["目的端网卡 (D-NIC)<br/>接收并校验数据包落地内存"] end NIC1 -->|"匹配首个 SID"| T0 T0 -->|"静态引流"| T1 T1 -->|"若链路故障直接丢包 / 正常则转发"| DT0 DT0 -->|"末跳投递"| DNIC ``` - **地址构成**:32 位 Locator 前缀加上若干个 16 位 Micro-SID,每个 Micro-SID 对应一跳路由器的静态动作。 - **交换机无状态化**:交换机仅依据当前顶层 16 位 Micro-SID 执行查表与左移(Shift),完全摆脱分布式路由计算。 - **故障确定性**:路径中断立即硬性丢包,彻底避免了传统动态网络中黑洞路由震荡或微环路(Micro-loops)带来的隐蔽长尾延迟。 ### [13:35](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=815s) 路径选择器(Path Selector)与确定性地址生成 既然路径由端节点决定,主机如何高效率地表达和挑选海量路径?在实际部署中,主机虽然知道全网拓扑,但并不需要用冗长笨重的显式路由表来占用内存。网络结构具备天然的几何对称性与拓扑规律,“我们构建的不是随意的混乱网络”,因此分配的 Micro-SID 本身具有结构化特征。端节点引入了“路径选择器”(Path Selector,简称 PS)的概念——每个 PS 在逻辑上就是一个紧凑的数字编号,能够直接映射到一条确定性的物理路径。 在建立 QP(Queue Pair)连接时,MRC 会从所有可选的路径选择器池中挑选一个子集,并在发送时动态将该数字的对应位字段(Bits)提取并写入 IPv6 地址模板中。例如,在配备 8×100G 网卡的计算节点中,数据包面对 8 台直连源 T0 交换机,主机只需从 Path Selector 中提取 3 个比特即可决定选择哪一个 T0;随后面对上层的 128 台脊交换机(T1),提取 7 个比特便锁定了具体的 T1;而下行到达目标主机的路径则是拓扑收敛的确定结构。通过这种比特位的直接映射拼接,网卡能以近乎零计算开销合成完整的目标 IP 地址。全网不需要任何 ECMP 参与,所有路径全部静态可测、可验证,网络工程师甚至可以在集群上线阶段通过静态校验确认整网路由器配置完全正确,无需人工排查动态发散问题。 ### [15:31](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=931s) 主动探测与拓扑自省:告别 Azure 时代的折衷技巧 基于 SRv6 的源路由能力还解锁了一项令讲者兴奋不已的杀手级功能——高保真度的网络自省与主动探测。回忆起早年在微软 Azure 团队的工作经历,讲者坦言当时在 ECMP 网络中进行网络探活非常痛苦:因为发送的探测数据包会经过交换机内部未知的哈希分流,工程师“不得不依靠猜测去推导探测包究竟走了哪条物理链路”。为了迫使数据包走向特定链路,他们不得不使用极其扭曲的方案,比如采用多层 IP-in-IP 隧道封装,让数据包从网卡发到 T0,解封装后再强行指定发往某台 T1。 而在 MRC 和 SRv6 的组合下,主机对数据包轨迹拥有 100% 的绝对控制力。端节点可以随心所欲地为数据包编排任意合法的巡检路径,甚至可以做到“给自己发 Ping 包进行自测”:主机将探测包发向指定的 T0,让它上升到特定的 T1,随后借由 SRv6 路径指令直接折返到该 T0,并重新送回自己网卡;或者让数据包横穿到对端的交换机再经由另一组网络平面绕回本机。这种端到端的精准探测能力,使得主机节点在任意时刻不仅完全掌握数据中心的静态拓扑,还能持续对活体链路进行细粒度测量,建立起极度清晰的全网实时连通性图谱。 ``` 常规探测(自测回环): 源网卡 ──> T0[A] ──> T1[X] ──> 静态折返 ──> T0[A] ──> 回到源网卡 跨平面自省巡检: 源网卡 ──> T0[A] ──> T1[X] ──> 跨越转发 ──> T0[B] ──> T1[Y] ──> 降落回环 ──> 源网卡 ``` - **确定性流控**:主机在遭遇单次丢包后,在一个 RTT(往返时延)内就能根据该包使用的 Path Selector 锁定故障路径,立即停用该 PS 或将其降级隔离。 - **零盲区链路探测**:告别伪随机哈希探测,利用 SRv6 环回测试实现毫秒级硬件静默故障与链路劣化定位。 ### [17:02](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=1022s) 队列对(QP)状态池管理与无损维护黑名单 在具体的传输控制上,MRC 将主机到目标端的通信分解为多个多路径 QP,并划分为活跃池、备用池和冷备池进行动态轮换。假设网络在两台主机之间存在 128 条潜在通路,MRC 在初始化时会建立 32 个活跃 QP(Active QPs)用于实时并发喷洒流量,同时创建 32 个备用 QP(Backup QPs)随时待命,剩下的 64 个路径选择器作为冷备资源保留。当网络开始向这 32 条活跃路径分发流量时,一旦其中某个 QP 遭遇丢包,主机不再原地盲目重传,而是果断将该 QP 移入“故障路径池”(Bad Path Set)转入低频后台探测;同时,直接从备用池中拉出一个崭新的备用 QP 顶替上线,瞬间恢复满打满算的 32 条并发信道。 更进一步,该机制还完美解决了超大规模集群中最头痛的日常停机维护难题。当数据中心需要对一批交换机或光模块进行割接维护时,由于网络拓扑与 Micro-SID 的分配具有严格规律,受影响设备的 Path Selector 与 Micro-SID 编码提前可知。运维团队可以直接向所有训练计算节点下发一段正则表达式规则(Regex),将涉及即将下线交换机的所有路径选择器加入“禁止列表”(Deny-lists)。所有端节点网卡在编码发包时便会直接跳过这批路径,生产流量在底层交换机断电维护前就已经平滑规避,整个硬件维护过程对正在高速运行的千亿/万亿参数大模型预训练作业实现完全零扰动。 - **三级 QP 容灾池**:32 个活跃并发、32 个热备、64 个冷备,遭遇丢包秒级热替换,保障聚合吞吐不掉速。 - **正则化维护黑名单(Deny-lists)**:通过规则拦截包含计划内维护设备的 Micro-SID,网络升级割接对上层 AI 作业实现 100% 透明。 ### [18:10](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=1090s) 生产实战验证:7.5 万张 GPU 规模下的“僵尸路由器”故障自愈 在演讲的高潮部分,讲者展示了这套体系在真实超大规模生产环境中的威力。现场展示的案例发生在一个“规模不算太大、大约 7.5 万张生产 GPU”("a smallish job, about 75,000 production GPUs")的超大训练集群中。在训练过程中,一台 T1 交换机突然陷入了“僵尸”(Zombie)状态——交换机控制面保持心跳正常,但在硬件数据面上却开始大规模静默丢弃转发的数据包,且交换机自带的遥测告警系统(Telemetry)没有任何异常指标上报。在传统的网络架构中,这种无法被监控感知的灰度故障往往会导致跨节点同步(All-Reduce / All-to-All)长时间卡死,引发大规模作业超时崩溃。 而在 MRC 与 SRv6 协同工作的体系下,受影响的端节点在短时间内共计被该坏死交换机丢弃了约 50 万个数据包,但训练作业完全没有中断。分布在各个计算节点的 MRC 传输层各自独立感知到了部分 Path Selector 上的高频丢包,所有受牵连的主机在没有任何中央控制面介入的情况下,高度默契且独立地将对应的 PS 扔进了坏死路径集合中,瞬间切换到健康的备用路径。受影响的 QP 占比一度高达 25%,但集群的有效聚合吞吐在极短时间内完全恢复。讲者指着监控曲线解释,为了避免泄露真实的毫秒级自愈性能,展示图表特意将时间轴压缩到了分钟级别,实际在几个 RTT 之后,所有流经该僵尸路由器的流量就已全部完成自愈重定向。随后这台交换机被运维系统触发重启并恢复正常,而上层的模型训练始终在平稳运行,讲者由衷感慨:“作为一名网络工程师,正是得益于 MRC,我的 On-call 值班终于变得前所未有地轻松与踏实。” - **集群生产验证**:在 75,000 张 GPU 预训练任务中成功扛住脊交换机硬件静默死锁。 - **50 万丢包零中断**:虽然累计产生 50 万个静默丢弃数据包且 25% 的 QP 受到波及,全网主机在数个 RTT 内自发完成故障剔除与流量绕行。 - **分钟级监控曲线下的毫秒级恢复**:即使底层硬件离线重启长达 10 分钟,上层 AI 预训练作业全程稳健推进,无须人工介入或重滚 Checkpoint。 ### [19:56](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=1196s) 链路抖动容灾与 T0 交换机故障的自愈实战 Jitendra Padhye 带着轻松幽默的语气坦言:“我们根本不在乎链路是否在抖动——好吧,我其实是在乎的,我们当然不希望链路发生抖动,但退一步讲”,在现场亲眼目睹 MRC 的实际表现确实令人惊叹。他分享了一个真实的生产事故案例:机房中某台 T0 交换机的光模块(transceiver)发生了剧烈抖动,导致 4 条物理链路瞬间失效。在传统架构下,T0 或 T1 交换机宕机往往会直接演化为导致整个分布式训练任务崩溃中断的“灾难性事件”(job-hurting event)。但在 MRC 的调度下,系统在探测到异常后迅速将受损路径剥离剔除,网络吞吐量几乎在瞬时便完全恢复。整个监控曲线只出现了一道“极其微小的波动”,训练任务完全不受干扰,直接平稳前行。 这种强悍的抗故障能力深刻印证了三种底层设计的结合威力:“这就是数据包喷洒(packet spraying)的威力,这就是 SRv6 的威力,也是完全采用端到端(end-to-end)控制方法所带来的威力”。通过将网络路径选择和状态感知交由端侧主机自主掌控,网络无需等待传统路由协议漫长且脆弱的重新收敛,从而真正将致命的硬件中断降维为无害的瞬态扰动。 ```mermaid flowchart TD accTitle: MRC与SRv6故障自愈流程 accDescr: 展示T0交换机光模块故障后MRC如何快速切断坏路径并恢复吞吐量 subgraph Failure["故障发生"] A["T0 交换机光模块抖动"] --> B["4 条物理链路异常失效"] end subgraph MRC_Reaction["端侧响应与自愈"] B --> C["MRC 快速感知链路异常"] C --> D["动态剔除受损 SRv6 转发路径"] D --> E["数据包自动喷洒至健康备用路径"] end subgraph Impact["生产表现"] E --> F["仅产生毫秒级极微小波动"] F --> G["训练任务无中断继续运行并恢复全带宽"] end ``` - **故障实录**:生产环境某 T0 交换机光模块出现抖动,导致 4 条链路瘫痪。 - **自愈效果**:MRC 毫秒级剥离受损路径,吞吐量迅速拉满,训练作业无需重启,平滑穿越硬件抖动期。 - **核心哲学**:将原本足以让作业崩溃(job-hurting)的 T0/T1 故障,转化为业务无感知的瞬态微小波动(small blip)。 ### [20:45](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=1245s) 支撑体系:多平面架构、拥塞控制与运维工具链 在核心传输协议之外,Jitendra Padhye 指出系统背后还凝结了大量工程创新与软硬件设计细节。整个方案涵盖了高度协同的多平面网络架构设计(multi-plane fabric design)以及针对大规模节点的紧凑型数据结构设计,以满足在大规模拓扑下快速计算和下发 SRv6 路由头部的需求。此外,端到端的拥塞控制机制也是保障极低排队延迟与公平性的关键环节。 与此同时,常常容易被工程界忽视的底层支撑工具链(support tools)起到了决定性的兜底作用。尽管基于 SRv6 的端到端自愈机制让训练任务可以无视瞬态网络故障,但这并不代表运维团队可以放任硬件损坏不顾。传统的网络排障基石如 ping 与 traceroute 必须在新型架构下无缝兼容,保证基础运维能力不受破坏;OpenAI 还专门构建了 Cluster Mapper 等工具进行拓扑自动化发现与映射。Jitendra 提到,涉及多平面寻址、紧凑数据结构、拥塞控制和规模化部署的全部设计细节均已在他们发布于 arXiv 的学术论文中完整公开,供业界深入查阅与探讨。 - **多平面架构与寻址**:通过优化数据结构压缩路由状态,适配超大规模超算网络拓扑。 - **运维与调试生态**:保留并重构了适配 SRv6 转发模型的经典网络诊断工具(ping、traceroute),并依托 Cluster Mapper 实现精准故障定位。 - **学术公开**:完整的协议细节、拓扑映射及部署架构已发表在 arXiv 预印本论文中。 ### [21:26](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=1286s) 行业生态落地与 OpenAI 超大规模生产集群部署现状 在演讲的尾声,Jitendra Padhye 正式同步了该技术方案的产业落地与生产部署成果。这项技术并非仅停留在实验室阶段的原型,而是已经获得了主流芯片与硬件巨头的全力支持:Nvidia、AMD 和 Broadcom 均已完成针对 MRC 与静态 SRv6 的硬件及系统级支持。Padhye 还向现场致谢,指出参与这套系统协同研发的多位关键芯片与固件工程师此时就坐在观众席中。 在硬件速率演进方面,该方案同时成熟支持 400G 与 800G 网络标准。而在 OpenAI 内部的生产环境中,MRC 与 SRv6 已经实现了极大规模的实际落地,深度部署在基于 4×200G 以及 8×100G 构架的两层(two-tier)多平面生产集群之中。Jitendra 充满信心地总结道,整套系统在大模型预训练任务的高压负载下表现得“极其出色”(working wonderfully),为最前沿 Frontier 模型的稳定、高效产出奠定了坚不可摧的网络底座。 - **多芯片厂商支持**:Nvidia、AMD 与 Broadcom 三大巨头均已提供成熟实现与深度生态支持。 - **网络规格适配**:全面覆盖 400G 与 800G 网络标准。 - **OpenAI 生产集群规模**:已在基于 4×200G 与 8×100G 的双层多平面(two-tier multi-plane)集群上实现超大规模全量部署,持续承载前沿模型的高强度预训练作业。 ## Notable quotes > [00:03](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=3s) 老爸,MRC 显然代表的是‘最荒谬的概念’(Most Ridiculous Concept)。 — Jitendra Padhye > [04:34](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=274s) 让任务持续推进(Keep the job stepping) — Jitendra Padhye > [10:23](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=623s) 没有任何一场网络技术演讲能在缺少 Wireshark 抓包图的情况下算得上完整 — Jitendra Padhye > [10:53](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=653s) 完全受制于 Fabric 的摆布 — Jitendra Padhye > [13:35](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=815s) 我们构建的不是随意的混乱网络 — Jitendra Padhye > [15:31](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=931s) 不得不依靠猜测去推导探测包究竟走了哪条物理链路 — Jitendra Padhye > [18:10](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=1090s) 作为一名网络工程师,正是得益于 MRC,我的 On-call 值班终于变得前所未有地轻松与踏实。 — Jitendra Padhye > [19:56](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=1196s) 我们根本不在乎链路是否在抖动——好吧,我其实是在乎的,我们当然不希望链路发生抖动,但退一步讲 — Jitendra Padhye > [19:56](https://www.youtube.com/watch?v=gTqeU9cCxKQ&t=1196s) 这就是数据包喷洒(packet spraying)的威力,这就是 SRv6 的威力,也是完全采用端到端(end-to-end)控制方法所带来的威力 — Jitendra Padhye ## Mentioned Jitendra Padhye, OpenAI, Omar, Microsoft, AMD, Broadcom, Nvidia, Meta, MRC (Multipath Reliable Connection), SRv6, RoCE, InfiniBand, Ultra Ethernet (UCC/UET), ECMP, Micro-SID, Cluster Mapper, Wireshark, arXiv ## Video description Tail latency dominates the performance of synchronous pretraining jobs when running at very large scales. We describe a three-pronged approach: (1) a new RDMA-based transport protocol, MRC, sprays across many paths and actively load-balances between them, eliminating the issue of flow collisions and (2) the use of static source-routing using SRv6 to allow MRC the freedom to bypass failures by itself. We describe our experiences running MRC and static SRv6 routing in production in OpenAI, where it has been used to train frontier models. We demonstrate how MRC allows AI training jobs to ride out many network failures that previously would have interrupted training. Learn more about the @Scale conferences here: https://atscaleconference.com/ [Source](https://www.youtube.com/watch?v=gTqeU9cCxKQ)

Source quotes

[0:03] Jitendra Padhye: 老爸,MRC 显然代表的是‘最荒谬的概念’(Most Ridiculous Concept)。 [4:34] Jitendra Padhye: 让任务持续推进(Keep the job stepping) [10:23] Jitendra Padhye: 没有任何一场网络技术演讲能在缺少 Wireshark 抓包图的情况下算得上完整 [10:53] Jitendra Padhye: 完全受制于 Fabric 的摆布 [13:35] Jitendra Padhye: 我们构建的不是随意的混乱网络 [15:31] Jitendra Padhye: 不得不依靠猜测去推导探测包究竟走了哪条物理链路 [18:10] Jitendra Padhye: 作为一名网络工程师,正是得益于 MRC,我的 On-call 值班终于变得前所未有地轻松与踏实。 [19:56] Jitendra Padhye: 我们根本不在乎链路是否在抖动——好吧,我其实是在乎的,我们当然不希望链路发生抖动,但退一步讲 [19:56] Jitendra Padhye: 这就是数据包喷洒(packet spraying)的威力,这就是 SRv6 的威力,也是完全采用端到端(end-to-end)控制方法所带来的威力

Source quotes

[0:03] Jitendra Padhye: the most ridiculous concept [0:03] Jitendra Padhye: Multipath Reliable Connection [0:42] Jitendra Padhye: keep the job stepping

Original transcript

[0:03] All right, thank you guys. Uh, good [0:05] morning everyone. Um, I'm Chitendra Pad. [0:08] I work at OpenAI and um, it's going to [0:11] be very hard to top the wonderful, [0:13] wonderful introduction that Omar gave. [0:15] Um, it was so inspiring. I was sitting [0:16] at the back listening and I had [0:17] goosebumps. Um, so I'm going to talk [0:20] about a much smaller vision. Now we [0:22] going to talk about transport protocols. [0:23] You heard Omar say this is the new [0:25] transport protocol called MRC uh that we [0:29] have developed at OpenAI along with our [0:31] partners um and SRV6. So what does MRC [0:34] stand for? Let me tell you a little bit [0:36] of a story. Um I gave a I made my [0:40] teenage son listen to the dry run this [0:43] talk. Big mistake. Don't do that. He [0:46] listened to the talk and he said, "Dad, [0:48] MRC clearly stands for the most [0:50] ridiculous concept." So uh hopefully you [0:54] guys will be more kind. Hopefully you [0:55] guys will be more kind. Okay. Uh okay. [0:58] So MRC stands for multipath reliable [1:00] connection by the way. Uh it's a [1:02] protocol transfer protocol for uh AI [1:05] training that we had developed with a [1:08] large team. Uh I'm here merely as a [1:12] representative. You can see how many [1:13] authors are on our archive paper. And [1:15] that's again just a small subset of [1:17] people who worked on it. Some of these [1:19] guys are in the audience. Okay. So at [1:21] OpenAI we work with Microsoft, AMD, [1:24] Broadcom, Nvidia and this is really um [1:27] keeping up with the spirit of Atscale. [1:29] This is a joint you know this is a joint [1:31] work this is collaboration we work with [1:33] the community and the protocol is [1:35] available from multiple vendors as you [1:37] will see. Okay, [1:39] so TDR one slide if you're going to [1:42] listen to only one slide. What is MRC? [1:44] Multipath reliable connection. It's a [1:47] new transport protocol uh for scale out [1:51] networks for AI training. As Omar [1:53] mentioned, this is within the data [1:54] center. This is not um scale up. This is [1:59] a replacement for the job that was [2:01] traditionally done by Infiniband and [2:03] Rocky. Uh why did we do it? because we [2:07] want it to be robust to fabric failures. [2:10] Obviously, like everybody else, we want [2:12] better job uptime. We want to build [2:14] bigger clusters. All of these things. [2:16] And hopefully as the talk goes, you guys [2:18] will see how we accomplish all these [2:19] objectives, right? There are two or [2:22] three key technologies that come into [2:24] play. Packet spreading, [2:28] source routing, and then multiplaner [2:30] networks. I'll talk about the first two. [2:32] I'll allude only a little bit to the [2:34] last one uh just because we don't have [2:36] enough time but I'm around. Happy to [2:38] talk more anytime you guys want. Okay. [2:42] So here's the outline of the talk. [2:46] You guys are all familiar with ML [2:48] training but just to kind of put the [2:50] talk in context and for the sake of [2:52] completeness sort of an ELI level uh [2:55] overview of what ML training is. [2:59] Then the two key technologies uh that [3:01] make MRC possible uh packet spraying and [3:04] source routing. I'll give you I'll show [3:08] you how MRC um achieves these goals sort [3:11] of show you MRC in action. Couple of [3:12] examples uh from our training runs and [3:16] then conclude with current status. Okay. [3:19] So at a very high level and this is [3:22] nothing new to anybody in this audience. [3:25] uh ML training is essentially thousands [3:27] of GPUs uh synchronous training working [3:30] one step at a time. Okay. Uh every GPU [3:34] think of it maybe as they all reduce or [3:36] some other sort of collective. Every GPU [3:38] does some comput computation locally [3:41] then they all exchange data with each [3:44] other. Uh and those are the light blue [3:46] boxes. Uh and the key thing is that you [3:49] can't start the next step until the [3:51] previous step is finished. Okay. So your [3:54] step time and therefore your efficiency [3:56] overall is governed by the tail latency. [4:00] Okay, if the network is congested, if [4:02] one GPU can't extend data fast enough, [4:04] what have you, the entire step stalls [4:07] and you can't start the next one. That's [4:09] the key thing. That's the key takeaway. [4:11] Um I come from Microsoft where I ran M, [4:13] you know, Microsoft's public cloud [4:14] network. That was not the constraint. [4:16] This is the main learning here, right? [4:17] It's tail latency matters. P95, P99 not [4:20] useful tail latency. Uh and if you are [4:23] failure that's even worse because then [4:25] you basically have to repeat the whole [4:26] step right go back to the previous step [4:28] start from the next one. Uh and that's [4:30] the key thing to take away. Okay. So [4:34] what does this mean? This means that the [4:37] network has one job and one job only. [4:39] Keep the job stepping. That right below [4:42] is our opens icon that we post in Slack [4:45] when the job has stopped stepping and it [4:47] starts stepping again. So that's our [4:49] icon right there. Right. And so If [4:52] that's the job of the network to keep [4:54] the job stepping a transport protocol [4:57] effectively has to do two things. It has [5:00] to use all healthy capacity right and [5:04] that's to make sure that no GPU is [5:06] bottleneck available all healthy [5:08] capacity and then failures are going to [5:12] happen it's a big fabric as you heard [5:13] big numbers hundreds of thousands of [5:15] GPUs how many routers how many links [5:18] quickly and automatically route around [5:19] it right and both quickly and [5:22] automatically are keywords obviously [5:24] human intervention at this time scale is [5:26] out of the window and you have to even [5:28] automatic has to network as fast as [5:30] possible. Okay, so this is how um we [5:33] think about the goals of transport [5:34] protocols and this is what MRC is trying [5:37] to achieve. Okay, now this is where all [5:41] the meta rocky people are probably going [5:42] to throw rocks at me. Um I'm going to [5:46] claim that regular Rocky can't achieve [5:47] this goal. I mean they might agree but [5:49] they'll claim that you know they they [5:51] can do better and you'll hear about it [5:52] in the next two talks. Okay, so the [5:54] regular Rocky QP you guys all know this [5:56] it uses a single path. Okay. Uh Rocky is [6:00] can't stand packet reordering, can't [6:02] stand packet loss. Uh and if you have [6:05] just one QP, this is fine, right? This [6:07] is a standard two-tier glass network. [6:10] And uh if there is just one QP, fine. [6:13] Anyway, your bottleneck is from the [6:14] server to the tower or the leaf uh [6:18] switch anyways. And so if you have one [6:19] path, you haven't lost anything. It's [6:21] all good, right? Um all packets in the [6:25] QB follow the same path. Okay? And but [6:29] what happens when you have multiple QPS? [6:31] When you have multiple QPS, if you have [6:34] enough of them, sooner or later there is [6:36] going to be a hash collision. Again, [6:37] this is something that you guys are all [6:39] familiar with. Uh that is because we are [6:41] relating the fabric ECMP choose the path [6:45] and it's not in the classic rocky [6:48] fabric. The ECMP is not load aware. So [6:51] it's going to choose path without [6:52] knowing current load or future load or [6:54] anything like that. And once you have [6:56] hash collisions, you might have two QPS [6:59] or more QPS sharing a particular link. [7:01] That's going to limit your throughput [7:02] even though the rest of the fabric is [7:04] lying idle. And in this particular case, [7:07] you can't use all available capacity by [7:08] definition. Okay. In fact, there's a [7:10] beautiful result out there that if you [7:11] do the right calculations, the expected [7:13] bound is around 66% for fabric [7:15] utilization. So this is a well-known [7:17] result. Okay. So this is all good. So [7:20] what's the answer to this? Very simple. [7:22] Packet spring. Okay. So the key here is [7:27] that MRC opens only one QP. So the [7:29] application is not aware. The [7:30] application is still going to open one [7:32] QP except we are going to spray all the [7:37] packets from this QP onto all available [7:40] paths or at least multiple available [7:41] paths. All is a bit much. But the first [7:44] hop obviously there is no choice. I'm [7:46] just assuming a single plane arrow here. [7:48] First hop there is no choice. So you go [7:50] up to the T0 or the leaf switch and then [7:53] you typically have choice of multiple [7:55] spine routers or T1 routers and you [7:57] spray the packets and you use all [8:00] available links. Okay. And then on the [8:02] way down obviously again you have no [8:03] choice so you come down on that path. [8:04] Okay. Um so essentially every MRCQP uses [8:08] all available paths and essentially all [8:11] available healthy links and that's what [8:14] that's what when the uh the packet [8:16] spring. What happens when you're two [8:18] QBs? Well, that's great. That QP is also [8:21] using our level of blocks. Okay. So, the [8:24] end result here is that by definition [8:27] there are no hotspots in the network [8:28] like we saw for the Rocky case earlier [8:33] because you are spraying packets you are [8:35] using all available capacity and as long [8:38] as there is capacity in your network [8:39] there are no hotspots. Right? So, this [8:42] is very simple. That's what avoids [8:44] essentially the hash collision problem [8:47] in that that you have in the rocky [8:49] world. Okay, [8:52] this is easier said than done. Of [8:54] course, everybody's aware that packet [8:56] spraying creates problems and now we [8:58] have to deal with it. The first is [9:00] obviously reordering and that's going to [9:03] happen no matter what simply because [9:05] sometimes the length of your wires is a [9:07] little bit different even if you have no [9:08] congestion in your network. And then the [9:11] second one is more sort of engineering [9:13] decision. Um it's easy to say you spray [9:15] packets. Wow, there are many choices. [9:17] You could still rely on the fabric for [9:19] ECMP. Then you might have the same [9:21] problems again or you can do something [9:23] else. I'll tell you how we solve both [9:25] those problems. Okay, so the first out [9:27] of order arrivals. This is fairly [9:29] straightforward. Um a rocky QP is not [9:32] tolerant of out of order arrivals as we [9:34] all know. uh it doesn't tolerate because [9:37] the packet headers don't carry the VA [9:39] address doesn't know when out of where [9:41] to place the out of order packet as a [9:43] result it will typically lead to [9:45] retransmissions and then maybe you know [9:47] congestion signals and so forth um in [9:50] MRC we solve this problem very simply [9:52] each packet carries the address where [9:54] it's supposed to go in the GPU buffer so [9:56] as soon as the packet arrives it's [9:58] placed in the right place so in this [10:00] particular example that I have shown [10:01] here packet one arrives after that [10:03] packet three arrives So packet three [10:06] normally rocky wouldn't know where to [10:08] place it but because the address exists [10:09] MRC knows where to place it it's placed [10:11] in the right place and then two and so [10:13] forth eventually finally when packet [10:16] five arrives the buffer is complete and [10:19] then they can generate a completion okay [10:21] so essentially by making every packet [10:23] carry the address where it should go in [10:25] the memory out of order packet arrival [10:27] can be handled fairly straightforwardly [10:29] okay and because no networking talk is [10:31] ever complete without a wireshark [10:32] diagram here is a wireshark screenshot. [10:35] Uh this is how it looks like on the [10:37] wire, right? There's re error and that [10:39] header simply carries the V address. As [10:41] you can see, that's a right middle [10:43] packet. Uh normally this address would [10:45] be only in the right first and so that's [10:46] that. Okay, so nothing fancy about it. [10:50] This is great, right? [10:53] Here is the key thing. How are you going [10:54] to choose the path of each packet? So we [10:56] had two choices. If you look at the [10:57] original MRC spec or the UC spec, uh [11:00] packets were originally you can do ECMP [11:04] but then you still have dependency on [11:05] the fabric and you are not going to be [11:08] able to route around the failures. [11:09] You're at the mercy of the fabric. What [11:11] we do instead is we source route the [11:14] packets using SRV6. SRV6 is a well-known [11:17] technology, right? And the idea here is [11:19] that the host knows the base topology [11:23] and it essentially puts the source [11:25] routed path of the packet and the fabric [11:27] is completely dumb. The fabric simply [11:30] forwards the packet in a static manner [11:32] and if you try to shoot a packet on a [11:35] path where the links are down, so be it. [11:37] Packet is dropped and it's the host jobs [11:40] to deal with it. The fabric does not [11:42] intervene. Everything is end to end. So [11:44] if you think you know you guys might [11:45] have heard of the end to end principle, [11:47] this is sort of the really data center [11:49] version of it. Okay. So quick SRV6 [11:53] primer in case you guys are not familiar [11:55] with it. Uh when the packet leaves the [11:57] source uh it contains the complete [12:00] destination address. It consists of a [12:02] 32-bit locator. What that is? We can [12:04] ignore that for now. And then it [12:06] consists of a series of microsids up to [12:08] six uh 16 bits. And these are [12:12] essentially router identifiers. Okay, so [12:14] when the packet leaves there is a source [12:16] T0. So obviously it's going to go up to [12:18] source T0. Uh there is typically no [12:20] choice here. Uh then you have potential [12:24] choices of several leaves. So you can [12:25] put one of those microetss up there. [12:28] Then you have a choice of only one [12:29] destination T0. It's done now. The [12:31] packet is coming down. Uh and then the [12:33] nick the destination itself has its own [12:36] microite. Okay. So that's what the [12:38] address looks like when the packet [12:40] leaves the source nick. And at each hop [12:45] the address is shifted. So the T0 gets [12:47] the packet. Okay, this is my microet. [12:49] This is my this is the packet I'm [12:51] supposed to forward. Fine. It drops that [12:53] shifts everything left by 16 bits and [12:56] then oh okay this is the T1 I'm supposed [12:58] to send the packet to. It sends the [13:00] packet to that particular T1 because it [13:01] knows what the mapping is. So [13:02] essentially static routing at each hop. [13:04] Okay, you have no control play, no [13:06] nothing. Everything is programmed [13:07] statically up front. So the fabric now [13:10] really has no role to play apart from [13:12] simply forwarding the packet. What [13:14] happens if the link to this particular [13:16] T1 is down? I drop the packet. Simply [13:19] the router simply drops the packet and [13:21] now the source has to realize that the [13:23] packet has been dropped. It has [13:24] generated a potentially bad path and on [13:28] the next retransmission maybe do [13:30] something else. Okay. So everything is [13:32] end to end. That's the key idea. [13:35] All right. So to do this, we'll walk [13:39] through this a little bit quickly. Uh [13:42] for each destination, the source knows [13:44] what are all possible paths available in [13:46] the network. Okay. Uh obviously all of [13:48] this information is compacted. I'm just [13:50] going to make it sound like you are [13:52] really doing everything right. So you [13:53] have a set of path selectors. Uh each [13:56] path selector maps to a particular path. [13:58] Uh you can think of it as effectively a [14:00] number. Uh and then once you know the [14:04] source and the destination, you know how [14:06] many paths there are. You can think of [14:07] them as numbers and then each path [14:10] selector [14:12] because there is a structure to the [14:14] microsets that we assign. The numbers [14:16] work out in such a way that they can be [14:18] bits from that number can be copied to [14:20] generate the appropriate microsets. [14:23] That's you know because there is a [14:24] structure to the network. We are not [14:25] building random networks here. Right? [14:27] Okay. So at the QP setup time, MRC [14:29] chooses a subset of those uh eligible [14:32] path selectors, right? And so for [14:35] example, and it builds the address at [14:37] the same time. So for example, if you [14:40] have this particular setup, let's say [14:42] it's a 8x100 nick, you will have a [14:44] choice I I've been saying that you have [14:47] choice of only one T0, but obviously [14:48] it's a multiple network. So you'll have [14:50] a choice of eight T0. You pick one. So [14:52] that's essentially a three-bit choice. [14:54] So right so you pick the right three [14:56] bits from your path selector and you [14:58] copy them there. That gives you the [15:00] first T0 micro you might have a choice [15:02] of whatever 128 T1s or whatever it might [15:05] be. Now you have seven bits you pick [15:07] those. The destination you can go from [15:10] that's fixed and the uh destination T0 [15:13] is also fixed. So here you have created [15:16] a path right. uh so selected PS supplies [15:19] the plane and the nick and the result is [15:22] that you have effectively a complete IP [15:26] address there is no ECMP involved okay [15:28] that's it it's very simple and the [15:31] benefits here is as I've been saying [15:34] repeatedly the network stays very simple [15:36] the switches just forward traffic [15:38] everything is static right our [15:40] configuration is very simple it allows [15:42] us to verify that at setup time right uh [15:46] we know whether the router is correctly [15:47] configured. There is no need to ask any [15:48] questions. Very easy verification, [15:50] right? End host can deterministically [15:52] steer traffic. I'll show a little [15:54] example within one roundtrip time [15:55] because now you know that there is a [15:56] loss. You know what was the path [15:58] selector value you use for that packet. [16:00] Why don't use it again. That's it. [16:01] You're done. Or put it on the back [16:03] burner, probe it separately, what have [16:05] you, right? Um [16:07] the most interesting thing here is that [16:09] it allows you to do because of SRV6 [16:12] something that I always wanted to do. So [16:14] when I was back at Microsoft, you know, [16:16] in Azure, it was hard for us to prove [16:18] our network effectively because we used [16:19] DCMP, right? If you generate synthetic [16:21] traffic, you always had to guess where [16:23] the packet went. So we resorted to [16:24] tricks like IP and IP encapsulation. You [16:26] go from a nick to a T0 decap go to a [16:30] particular T1 and so forth. But here you [16:32] can do whatever you want. You can probe [16:33] yourself, right? You can go source to T0 [16:37] to T1 back to the same T0 back to [16:39] yourself. You can probe ping yourself if [16:43] you want. You can go T 0 T1 some other [16:45] T0 some other T1 back to your T0 back [16:47] down here. Right? So this is beautiful. [16:49] Allows you to build a very clear picture [16:52] of the network. The host at all time not [16:55] only knows the static topology but [16:56] potentially even what's alive in the [16:58] network. So that's the beauty. Okay. So [17:02] the source the way this works is it has [17:04] a set of let's say you had let's just [17:06] pretend that you had 128 potential paths [17:08] in the network. What you would do is you [17:10] would create 32 active QPS, 32 backup [17:13] QPS, then leave the other 64 aside and [17:16] you start by spreading traffic on 32 [17:18] paths. Let's say you have a loss. That's [17:21] okay. You take that QP, chuck it into [17:22] the bad path. You keep proving it. You [17:25] know, you can prove it in many number of [17:26] ways. Uh and then bring one spare that [17:29] you had from the backup. No need to even [17:31] test it. It was in backup. You bring it. [17:33] If it experiences loss, you can chuck [17:35] that into backup path also. Right? And [17:37] you can continue like this. So this is [17:39] what it does and um because you even [17:43] form an idea of what is bad in the [17:45] network right you can tell ahead of time [17:47] let's say you have a maintenance event [17:48] coming up so many switches are going to [17:50] go down but their path selector values [17:52] are known their microetss are known you [17:55] can effectively program in regular [17:56] expressions in all the sources so that [17:58] those switches are never used so your [18:00] you know your traffic is not affected by [18:02] the routers that are under maintenance [18:03] or by the links that are under [18:04] maintenance. So these are called [18:05] denless. That's also another beautiful [18:07] thing you can do with this. Okay. So now [18:11] let me show you glimpses of MRC in [18:13] action and how beautifully this all [18:15] works. Okay. So this one, yeah, it's a [18:18] smalish job about 75,000 production [18:21] GPUs. Uh we had a T1 that went zombie. [18:25] I'm sure all of you guys have dealt with [18:27] zombie routers. The router stayed up and [18:28] started forwarding packets and you know [18:30] no indication in the telemetry that [18:32] anything was wrong with the router. MRC [18:35] happily removed the path throughput [18:37] recovered the switch rebooted. Yeah, we [18:39] had 25% of the QPS that were affected [18:42] but MRC fully recovered because as you [18:44] saw in that diagram earlier well it it [18:46] didn't know that a particular T1 was [18:48] bad. It just realized that certain PS [18:50] values were bad and those were not used. [18:52] They all went into the bad set and that [18:54] was done by every route every host [18:56] independently. So the network just [18:58] recovered no issues. Okay. There were [19:00] about half a million packets that were [19:01] dropped by the bat switch by the time [19:03] everybody figured out what was going on. [19:04] But so be it, right? This is what it [19:06] look like, right? On the on the x-axis [19:08] there is time. And this graph is [19:10] deliberately plotted at a minute [19:12] granularity because you didn't want to [19:14] give away how quickly we recover, but [19:15] it's on the scale of one round trip [19:17] time. Obviously, uh time zero is when [19:19] the switch rebooted. It had gone bad [19:22] about 10 minutes earlier. Uh so that's [19:24] when you see a little bump in the packet [19:26] loss and there a little dip in the [19:27] throughput [19:29] within a few roundtrip times. All hosts [19:32] that were sending traffic through this [19:34] had recovered chucked along the switch [19:37] rebooted and then it came back as [19:39] normal. Who knows what it was doing [19:40] right? Yeah it's great nothing happened. [19:43] This is the beautiful part right and as [19:45] a network engineer my on call has become [19:48] really really painless because of MRC. [19:51] So like I don't have to worry about how [19:53] much of the narrow is up as long as [19:54] substantial number of links are up. I [19:56] don't care if the links are flapping. I [19:58] mean I do care. We don't want links [19:59] flapping but nonetheless nonetheless [20:02] right you know um it's it's really [20:05] amazing to watch MRC doing this. Uh [20:08] here's another example. We had a T0 [20:10] switch uh where the switch transceiver [20:12] was flapped. Uh four links uh went bad. [20:16] MRC removed the path and full throughput [20:18] return. Again the same thing you can see [20:21] there's just a tiny blip and we carried [20:24] on. Previously a T0 going down a T1 [20:28] going down is potentially a job hurting [20:30] event because of MRC it just translates [20:33] to a small blip and full recovery. [20:35] That's the power of packet spreading. [20:37] That's the power of SRV6. That's the [20:39] power of having entirely an end to-end [20:42] approach to doing this. Okay. And so [20:45] with this um there's a lot more [20:47] multiplaner fabric design addressing we [20:50] developed fairly compact data structures [20:52] to do all this. There is condition [20:54] control that we can talk about if you [20:55] guys are interested at some point. The [20:58] last bit that gets always unsaid support [21:00] tools right it's easy to say hey this is [21:02] my transport protocol and this is a [21:04] service wonderful these are all [21:05] standards we're paying trace route right [21:07] our standard debugging tools still have [21:09] to work right even though we I said that [21:11] network blips don't matter we still have [21:13] to debug it so we build these tools [21:15] cluster mapper I talked about it uh [21:17] deployment is a somewhat of an issue so [21:19] our paper that's on archive uh has all [21:21] these details uh so happy to talk more [21:24] about this if you guys have questions [21:26] okay so I'll leave you with the status [21:28] um it's implemented it's available from [21:30] Nvidia AMD and Broadcom again many of [21:33] those guys many of the engineers who [21:34] helped build uh helped us build this [21:37] they are in the audience uh uh available [21:40] for both 400 and 800 and at open AI it's [21:43] deployed at a very large scale uh both [21:45] at 4x200 and 8x100 [21:48] uh two-tier multiplane production [21:50] clusters has been working wonderfully so [21:53] thank you