InfiniBand
InfiniBand 协议栈的组成,以及与 GPUDirect 的集成方式
核心要点:
- IBTA 定义、NVIDIA/Mellanox 主导实现的 RDMA 高速互联标准
- 22 年 9 代,从 10 Gbps 增至 1.6 Tbps (GDR 规划中)
- 子网由 Subnet Manager 统一管理拓扑、LID 分配、路由
- QP + CQ + Memory Registration 是 RDMA 编程的基本对象
- 硬件天然无损 (信用流控),不依赖 PFC
- SHARP 把 AllReduce 延迟从 O(N) 降到 O(log N)
代际如何演进?
每 3-4 年新一代,带宽大致翻倍。每端口速率以信令 Gbps 标注,实际可用带宽约 80%(8b/10b 或 64b/66b 编码开销),见 @tbl-hw-ib-gen。
| 代际 | 年份 | 每端口线速 | 有效带宽(单向) | 代表 HCA | 典型部署 |
|---|---|---|---|---|---|
| SDR | 2003 | 10 Gbps | ~1 GB/s | ConnectX | 早期 HPC |
| DDR | 2005 | 20 Gbps | ~2 GB/s | ConnectX | 早期 HPC |
| QDR | 2008 | 40 Gbps | ~4 GB/s | ConnectX-2 | HPC 集群 |
| FDR | 2012 | 56 Gbps | ~6 GB/s | ConnectX-3 | HPC / DL 早期 |
| EDR | 2015 | 100 Gbps | ~12.5 GB/s | ConnectX-4 | DGX-1 (V100) |
| HDR | 2019 | 200 Gbps | ~25 GB/s | ConnectX-6 | DGX A100 |
| NDR | 2022 | 400 Gbps | ~50 GB/s | ConnectX-7 | DGX H100/H200 |
| XDR | 2025 | 800 Gbps | ~100 GB/s | ConnectX-8 | DGX B200 |
| GDR | ~2027 | 1600 Gbps | ~200 GB/s | 下一代 | 规划中 |
@tbl-hw-ib-gen InfiniBand 代际规格
关键节点:
- HDR 及之前用 NRZ 信令,NDR 开始用 PAM4,单通道 50 → 100 Gbps
- 高端交换机 (Quantum-2) 提供 64 个 NDR 端口,支持 fat-tree 全双工无阻塞
- XDR 实质是 NDR 升级版,每端口 2×400 Gbps 通道 (2×SerDes bundle) 实现 800 Gbps
子网怎么管理?
每个子网由一个 Subnet Manager (SM) 统一负责拓扑发现、地址分配、路由计算。
- SM 部署:运行在某台主机或专用交换机上
- 地址体系:节点用 GUID(64 位全局唯一标识);LID(16 位本地地址)由 SM 分配,子网内有效;跨子网走 Router,用 GID(128 位,IPv6 基础)
SM 工作流程:
启动 → 拓扑发现 (SMP 协议,子网管理包)
→ LID 分配 (每端口唯一 LID)
→ 路由计算 (fat-tree 线性转发表 LFT)
→ 下发路由 (写入每交换机转发表)
→ 监控心跳 (检测链路变化,触发重路由)
QP / CQ / Memory Registration 怎么协作?
QP 是通信单元,CQ 是完成通知,MR 是 RDMA 可访问内存的句柄。三者构成 RDMA 编程的基础。
Queue Pair (QP) — 发送队列 (SQ) + 接收队列 (RQ),QP 类型见 @tbl-hw-ib-qp。
| QP 类型 | 全称 | 特点 | 适用场景 |
|---|---|---|---|
| RC | Reliable Connection | 面向连接,有序可靠投递,支持 RDMA | MPI 点对点,NCCL P2P |
| UC | Unreliable Connection | 面向连接,不保证可靠,支持部分 RDMA | 较少使用 |
| UD | Unreliable Datagram | 无连接,1:N,不支持 RDMA | 组播,管理流量 |
| XRC | Extended RC | RC 扩展,多端共用 RQ,减少连接数 | 大规模集群 (10万+ 节点) |
@tbl-hw-ib-qp QP 类型
QP 状态机:Reset → Init → RTR (Ready to Receive) → RTS (Ready to Send) → SQE/Error → Reset
WR (Work Request) 投入 SQ/RQ,完成后生成 CQE 写入 CQ。
Completion Queue (CQ) — 应用通过两种方式获取 CQE:
- 轮询 (
ibv_poll_cq):延迟最低,CPU 自旋;NCCL 默认 - 事件驱动 (
ibv_req_notify_cq+ 等待 fd): CPU 友好,适合低频或后台任务
Memory Registration (MR) — RDMA 操作要求目标内存预先注册 (pinned),防止 OS 换页:
ibv_reg_mr(pd, buf, size, IBV_ACCESS_LOCAL_WRITE | IBV_ACCESS_REMOTE_READ | ...)
→ 返回 mr,含 lkey (本地访问 key) + rkey (远端访问 key)
注册本身有开销(OS 页表 pin + HCA 转换表更新),应提前注册并复用内存池。
RDMA 三种传输模型有什么区别?
双边、单边、Atomic 三类。差异在是否需要远端 CPU 参与。
双边 (Two-Sided) — Send/Receive:
- 发送端 Send + 接收端必须提前投 Receive WR
- 两端都产生 CQE,两端都消耗 CPU 周期
- 适合消息大小不确定 / 需接收端流控(如 MPI eager 消息)
单边 (One-Sided, Zero-Copy) — 远端 CPU 不参与,见 @tbl-hw-ib-onesided。
| 操作 | 语义 | 谁产生 CQE |
|---|---|---|
| RDMA Write | 发起端将数据写入远端地址 | 仅发起端 (可选 Immediate 触发远端 CQE) |
| RDMA Read | 发起端从远端地址拉取数据 | 仅发起端 |
| RDMA Write w/ Immediate | Write + 32 位立即数,触发远端 Receive CQE | 发起端 + 远端 |
@tbl-hw-ib-onesided RDMA 单边操作
零拷贝路径:数据在 HCA 和目标内存之间直接 DMA,不经 CPU 或 OS 内核。延迟极低,是 NCCL P2P 通信的底层机制。
Atomic — 远端内存原子读改写,64 位对齐:
- CAS (Compare-and-Swap):若远端值=期望值则替换,返回旧值
- FAA (Fetch-and-Add):远端值+增量,返回旧值
一次端到端消息延迟由什么构成?
注入 + 网络传播 + 序列化 + 目的端处理四段。NDR MPI ping-pong 约 600 ns。
注入延迟 (Injection)
软件开销: ibv_post_send 到 HCA 接收 WR (~100-300 ns)
HCA 处理: WR 解析 + 内存访问 + 组包 (~50-100 ns)
网络传播 (Propagation)
光速传播: 100m 光纤 ~500 ns
交换机转发: 每跳 ~100-200 ns (NDR Quantum-2)
序列化 (Serialization)
= 消息大小 / 链路带宽
NDR 400 Gbps: 1 KB → ~20 ns, 1 MB → ~20 us
目的端处理
HCA 收包 + DMA 写内存 + CQE 生成
应用轮询 CQ 到感知完成 (~100-200 ns)
IB 怎么做拥塞控制?
信用流控做底盘,ECN 处理热点,VL 隔离避免头阻塞。这是 IB 硬件天然无损的关键。
基于信用的流控 (Credit-Based):
- 每条 IB 链路维护信用计数器,接收端为每个 VL (Virtual Lane) 分配信用
- 发送端有足够信用才发包,避免接收端缓冲区溢出
- 信用在链路层 (L1)、相邻节点间逐跳运作 → 天然防止丢包
这是 IB 与 RoCE 最根本的区别:IB 硬件天然无损,不依赖 PFC 等软件机制。
ECN (Explicit Congestion Notification):
- FECN (Forward ECN):拥塞点交换机在包头设置 FECN,通知接收端"上游链路拥塞"
- BECN (Backward ECN):接收端向发送端回送 BECN,通知"降速"
- 发送端收 BECN 后乘性减、随后线性增恢复
虚通道 (Virtual Lane, VL):
- 最多 15 条数据 VL + 1 条管理 VL (VL15)
- 不同流量映射到不同 VL,避免头阻塞 (HoL Blocking)
- 每 VL 独立信用 + 可配置优先级 (QoS)
SHARP 是什么?为什么能把 AllReduce 降到 O(log N)?
SHARP (Scalable Hierarchical Aggregation and Reduction Protocol) 让交换机直接执行归约,免去数据集中节点的多跳传递。
- 大规模 AllReduce 延迟从 O(N) 降至 O(log N)
- NDR 及更高代的 Quantum 交换机原生支持
- NCCL 可自动启用 (
NCCL_ALGO=NVLS的 IB 版本)
AI 集群典型部署长什么样?
Fat-tree 拓扑 + NVLink/IB 分层分工。
Fat-Tree (Clos 网络):
- 全双工无阻塞:核心-汇聚-接入各层带宽对等
- 低直径:3 层中任意节点间最多 5 跳
- 路由:ECMP 散列 + OFED 自适应路由 (AR)
NDR 典型规模见 @tbl-hw-ib-cluster。
| 规模 | 接入层 | 核心层 | 节点数 | GPU/节点 | 总 GPU |
|---|---|---|---|---|---|
| 小集群 | 8×40 端口 | 4×80 端口 | 320 | 8 | 2560 |
| 中集群 | 16×64 端口 | 32×64 端口 | 1024 | 8 | 8192 |
| 大集群 | 32×64 端口 | 128×64 端口 | 4096 | 8 | 32768 |
@tbl-hw-ib-cluster Fat-Tree 集群规模配置 (NDR)
与 NVLink 的分工:
节点内 (同一 DGX,8 GPU)
NVLink 4.0/5.0 — 900/1800 GB/s 每 GPU
角色: Tensor Parallelism AllReduce (延迟敏感)
节点间 (跨服务器)
IB NDR/XDR — 50/100 GB/s 每端口
角色: PP P2P / DP AllReduce / EP AllToAll
关键原则:TP AllReduce 通信量最大且延迟最敏感,必须在 NVLink 层完成;PP P2P 激活传输较小,可跨节点走 IB。
典型配置:
- DGX A100 (HDR 200 Gbps):每节点 8×HDR,接入交换机 Quantum (HDR, 40 端口),典型集群 512 节点 → 4096 GPU
- DGX H100 (NDR 400 Gbps):每节点 8×NDR (ConnectX-7),接入交换机 Quantum-2 (NDR, 64 端口,SHARP v3),典型集群 1024 节点 → 8192 GPU
性能参考数据
核心问题:NDR InfiniBand 在延迟和带宽上的实测参考值是多少?小消息和大消息行为有什么区别?
延迟参考 (@tbl-hw-ib-latency):
| 测试场景 | 数据量 | 延迟 | 备注 |
|---|---|---|---|
| 硬件链路延迟 (单跳) | - | ~100-200 ns | 交换机转发 |
| RDMA Write (单边) | 4 B | ~700 ns | NDR, MPI 实测 |
| MPI ping-pong (RC Send/Recv) | 8 B | ~600 ns | NDR, ib_send_lat |
| MPI ping-pong (RC Send/Recv) | 1 KB | ~650 ns | NDR |
| MPI ping-pong (RC Send/Recv) | 1 MB | ~21 us | NDR,带宽受限 |
@tbl-hw-ib-latency NDR 延迟参考
带宽参考 (@tbl-hw-ib-bw):
| 测试场景 | 数据量 | 带宽 | 备注 |
|---|---|---|---|
| RDMA Write (单向峰值) | 1 MB+ | ~48 GB/s | NDR, ib_write_bw |
| MPI AllReduce (Ring, 8 节点) | 1 GB | ~42 GB/s | NDR, nccl-tests |
| MPI AllToAll (8 节点) | 256 MB/rank | ~35 GB/s | NDR, NCCL |
@tbl-hw-ib-bw NDR 带宽参考
线速利用率:NDR 理论单向 = 400 Gbps × (1 - 64b/66b 开销) / 8 ≈ 48 GB/s。RDMA Write 大消息利用率可达 ~95%,IB 协议头比 NVLink 多,但大消息下可忽略。
NCCL 与 IB 集成:
- 使用 RC QP + RDMA Write (NCCL P2P)
- AllReduce 默认 Ring,启用 SHARP 后走 Tree (延迟更低)
- 推荐环境变量:
NCCL_IB_HCA=mlx5_0,mlx5_1,...
与 RoCE 怎么对比?
IB 延迟低 2-3×,硬件天然无损,但成本高且生态封闭。详细对比见 @tbl-hw-ib-vs-roce,专题见 1.5 RoCE (RDMA over Converged Ethernet)。
| 维度 | InfiniBand NDR | RoCEv2 (200GbE) |
|---|---|---|
| 延迟 (小消息) | ~600 ns | ~1-2 us |
| 峰值带宽 (单端口) | ~50 GB/s (400 Gbps) | ~25 GB/s (200 Gbps) |
| 无损保证 | 硬件天然无损 (信用流控) | 依赖 PFC + ECN 配置 |
| 网内计算 | SHARP (AllReduce 卸载) | 无原生支持 |
| 硬件成本 | 高 (专用 HCA + 交换机) | 低 (复用以太网) |
| 大规模稳定性 | 成熟,SM 统一管理 | PFC 死锁风险,配置复杂 |
| 生态 | NCCL / MPI / OpenUCX 深度支持 | NCCL 支持,部分功能受限 |
| 典型用户 | NVIDIA DGX 集群,国家超算 | Meta,阿里云,<1000 GPU 规模 |
@tbl-hw-ib-vs-roce IB vs RoCE 对比
Takeaway
| 知识点 | 核心结论 |
|---|---|
| 代际演进 | 9 代 22 年,NDR 400 Gbps / XDR 800 Gbps,PAM4 起步 |
| 子网架构 | SM 集中管理拓扑 / LID / 路由;GUID 全局 + LID 本地 |
| RDMA 三模型 | 双边 Send/Recv;单边 Write/Read (零拷贝);Atomic |
| 端到端延迟 | NDR ping-pong ~600 ns,由注入 + 传播 + 序列化 + 目的端构成 |
| 拥塞控制 | 信用流控 + ECN + VL 隔离,硬件天然无损 |
| SHARP | 交换机做归约,AllReduce 延迟 O(N) → O(log N) |
| 与 NVLink 分工 | TP 走 NVLink;PP / DP / EP 走 IB |