RDMA:InfiniBand 与 RoCE
同步训练里,几万张卡每一步都要交换梯度。用传统 TCP/IP 栈做这件事:每次传输要经过内核协议栈、系统调用、内存拷贝、中断——单次延迟几十微秒,CPU 被网络处理占满。RDMA(远程直接内存访问)把这些全部绕开:网卡直接读写对端内存,不经过内核,不拷贝,不打扰 CPU。 这是万卡集群网络的地基。
TCP/IP 栈慢在哪
Section titled “TCP/IP 栈慢在哪”一次传统网络传输的完整路径:
应用 write() → 系统调用 → 内核协议栈处理 → 拷贝到 socket 缓冲→ DMA 到网卡 → 网络 → 对端网卡中断 → 拷贝到内核缓冲 → 协议栈 → 应用 read()四重开销:
| 开销 | 量级 | 说明 |
|---|---|---|
| 系统调用与上下文切换 | ~1–5 μs | 每次传输两次 |
| 协议栈处理 | ~10–30 μs | TCP 分段、确认、重传逻辑 |
| 内存拷贝 | 2–4 次 | 带宽减半起 |
| CPU 占用 | 高 | 每GB/s 需要一两个核处理网络 |
单次往返 50–100 μs,且 CPU 成为瓶颈。 训练里每秒成千上万次集合通信,这条路完全走不通。
RDMA 的三个关键词
Section titled “RDMA 的三个关键词”一、内核旁路(kernel bypass):应用通过用户态队列对(QP)直接向网卡下指令,没有系统调用。
二、零拷贝(zero-copy):网卡 DMA 直接读写应用注册的内存,数据不经过任何中间缓冲。
三、CPU 卸载(offload):可靠传输、重传、流控全部在网卡硬件里完成,CPU 完全不参与数据面。
结果是:单次往返 ~1–2 μs,带宽打满 400 Gbps(50 GB/s)时 CPU 几乎零占用。 差两个数量级。
两个配套概念:
- 内存注册(memory registration):应用先把内存区域"注册"给网卡(锁定物理页、映射地址),之后网卡才能直接访问。这就是为什么数据加载和通信缓冲都要求 pinned memory——可分页内存无法被 RDMA 直接访问。
- GPUDirect RDMA:网卡直接读写 GPU 显存(而不是先到主机内存再拷贝),省一次 PCIe 往返。NCCL 的跨机通信默认走这条路。
InfiniBand 与 RoCE:两条路线
Section titled “InfiniBand 与 RoCE:两条路线”RDMA 有两个承载网络,这是集群组网最重要的选型:
| InfiniBand(IB) | RoCE v2(RDMA over Converged Ethernet) | |
|---|---|---|
| 网络 | 专用 IB 交换机与线缆 | 标准以太网 |
| 丢包处理 | 链路级信用流控,不丢包 | 依赖 PFC/ECN,可能丢包 |
| 路由 | 子网管理器(SM)集中算路 | 标准以太网路由(ECMP) |
| 运维 | 封闭但简单,"插上就通" | 开放但调参复杂 |
| 典型速率 | NDR 400 Gbps,XDR 800 Gbps | 400/800 Gbps 以太网 |
| 主要用户 | 大多数超算与大模型集群 | 云厂商、成本敏感集群 |
核心分歧在丢包:RDMA 的性能假设是"不丢包"(丢包重传会把微秒级延迟打回毫秒级)。IB 用链路级信用机制从物理上保证不丢;RoCE 跑在以太网上,必须靠一组"无损以太网"机制拼出来:
- PFC(优先级流控):下游拥塞时向上游发暂停帧,逼上游停发——拥塞向上游传播,可能形成"PFC 风暴"(一头拥塞,全网络停摆)
- ECN(显式拥塞通知):交换机在队列超阈值时给包打标记,源端 DCQCN 算法降速
RoCE 的运维现实:PFC 风暴、ECN 参数(Kmin/Kmax/P)调优、与普通以太流量的隔离,都是真实的坑。这就是为什么超大规模训练集群普遍选 IB(省心),而云厂商内部自建常选 RoCE(成本与通用性)。
代价模型:一条链路值多少
Section titled “代价模型:一条链路值多少”一条 400 Gbps 链路的实际含义,用 NCCL Ring all-reduce 的代价公式算( 卡,消息 ,链路带宽 ,每卡单链路):
一万卡、7B 模型梯度(14 GB BF16)、每卡一条 400 Gbps(50 GB/s)链路:
每步训练光梯度同步就要半秒以上——这正是真实集群的网络设计起点,也是一系列优化的动机:梯度压缩、ZeRO 分片(把同步量除以卡数)、拓扑映射(让热点流量走快网)、在网计算 SHARP。网络设计不是"越快越好",是让代价公式里的每一项变小。
实践检查清单
Section titled “实践检查清单”- 连通性:
ibstat/ibstatus看链路速率与状态;ib_write_bw/ib_send_bw实测带宽,应达线速 90%+。 - 延迟:
ib_write_lat实测往返延迟,同子网应 < 2 μs。 - GPUDirect:
nccl-tests跨机 all-reduce,确认走 GPU Direct(日志看via P2P/direct而不是 staging)。 - RoCE 专项:确认 PFC 只对 RDMA 流量开启(不吃普通流量)、ECN 参数与交换机一致、无 PFC 风暴(
ethtool -S看 PFC 暂停计数)。 - 拓扑:
ibdiagnet扫全网,检查路由均衡与异常链路。
- RDMA = 内核旁路 + 零拷贝 + CPU 卸载:延迟从 ~50 μs 降到 ~1–2 μs,带宽打满时 CPU 零占用。
- IB 靠链路级信用从物理上不丢包;RoCE 靠 PFC/ECN 拼"无损以太网",省成本但运维复杂。
- 内存必须注册(pinned),GPUDirect 让网卡直读显存,NCCL 默认依赖两者。
- Ring all-reduce 代价 :万卡 7B 梯度同步 ~560 ms,是所有网络优化的出发点。
- 选型:训练集群求稳选 IB,成本敏感与云内自建选 RoCE,但必须配齐无损调参。
- 拓扑:胖树、轨道优化与并行映射 — 下一章:链路如何组织成网络
- NCCL 与集合通信算法 — 代价模型的完整推导
- 数据并行与 ZeRO / FSDP — 把同步量做小的算法侧
- 拥塞、抖动与网络故障 — 无损假设被打破时