跳到主要内容

DQPLB

通信库如何用 CQE 反馈在多 QP 间动态调度负载

核心要点

  • 决策位置从 ASIC 哈希上移到通信库,按 CQE 反馈动态调度每个 QP 发送速率
  • 按 connection class(rack-local / cross-rack / cross-DC)分配 BDP-aware 的 QP 数 + outstanding
  • 跨 QP 乱序用 IMM opcode 携带 sequence number + 接收端重排序队列保序
  • Meta Llama 4 集群(96K GPU)实测 steady-state step latency -12%,启动 11×

DQPLB(Dynamic QP Load Balancing)是 Meta NCCLX 在 Llama 4 训练(96K+ GPU)中部署的端点驱动路由方案:将每对 GPU 之间的通信拆分到多个 QP(Queue Pair),通过 CQE(Completion Queue Entry)反馈动态调度各 QP 的发送速率。DQPLB 是 E-ECMP + QP Scaling 思路在 100K GPU 规模下的演进——决策粒度从交换机 ASIC 的哈希进一步上移到通信库的运行时调度。

为什么 E-ECMP 在 100K GPU 规模下不够?

E-ECMP 在 100K GPU 规模的局限

E-ECMP 通过将 RoCEv2 BTH 中的 QP Number 纳入 ASIC ECMP 哈希(见 02-ecmp.md §E-ECMP),让每对节点间多个 QP 散列到不同物理路径。Meta SIGCOMM 2024 在 24K GPU 规模下已经把 AllReduce 有效带宽利用率从 60-70% 提升到 80-90%[1]

但在 100K+ GPU 规模下 E-ECMP 仍然面临三个根本约束:

  • 哈希碰撞概率随 QP 数量退化:QP 数从 4-16 提升到 32+ 时,同一 ECMP 组的桶被超线性占据,碰撞概率仍然接近生日悖论上限(见 $\href{/interconnect/路由算法/ecmp}{\text{(3.2)}}$
  • 静态分配无法响应运行时拥塞:E-ECMP 的 QP→path 映射在 QP 建立时由哈希一次性决定,运行时无法感知特定路径的拥塞或链路抖动
  • 连接类别异构:rack-local、cross-rack、cross-DC 三类连接的 BDP(Bandwidth-Delay Product)差异可达 100×,静态 QP 数和 outstanding 上限无法同时适配所有类别

DQPLB 的设计动机正是针对以上三点:保留多 QP 散列的优势,但将"每个 QP 实际发多少数据"这一决策从 ASIC 哈希上移到通信库运行时。

决策点上移:从 ASIC 哈希到通信库主动管理

DQPLB 的核心思想:

  • QP-path 映射仍由 E-ECMP 哈希决定(沿用 ASIC 多路径基础设施,不引入新硬件依赖)
  • 每个 QP 的发送速率由通信库根据 CQE 反馈动态调节——拥塞低的 QP 自动获得更多 segment,拥塞高的 QP 被自然节流

每对通信节点之间,DQPLB 实际由 1 个 control QP + $N$ 个 data QP 构成:

  • Control QP:用于交换内存地址、握手等控制平面消息(单 QP 即可)
  • Data QP 池:承载实际的 RDMA Write 数据流量,是 DQPLB 调度的对象

把 DQPLB 与 ECMP / AR / Packet Spraying 按决策位置对比:

决策位置代表方案拥塞感知部署难度
交换机 ASICECMP / E-ECMP低(通用 ASIC)
交换机 ASICAR per-flowlet有(本地队列深度)中(需 AR ASIC)
端点 NICPacket Spraying无(统计均匀)中(需 UEC NIC)
通信库(host)DQPLB有(CQE 反馈)低(仅软件改造)

@tbl-route-dqplb-decision-position 各路由方案的决策位置对比

DQPLB 的工程优势:仅需通信库改造,不依赖新硬件,可在现有 RoCEv2 + 通用 ASIC 集群上直接部署。

Rail-Optimized 拓扑如何与 DQPLB 耦合?

DQPLB 与 Rail-Optimized 拓扑设计耦合紧密。理解 plane / rail 概念是理解 DQPLB QP 分配策略的前提。

物理结构

以 DGX H100 / Meta GenAI 集群为代表的 Rail-Optimized 节点:每个 GPU 节点(8 GPU)配备 8 个独立的 NIC,每个 GPU 通过 PCIe 绑定一个专属 NIC。

  • 节点内:8 GPU 通过 NVLink 全互联,节点内通信不经过 IB
  • 节点间:每个 NIC 连接到独立的 leaf 交换机,对应一个独立的 leaf-spine 子网(rail)
  • 整个集群有 $R$ 个并行的 rail(典型 $R = 8$

Plane / Rail 概念

一个 rail = 一个 plane——指一组 NIC + 它们连接的专用 leaf-spine 子网。Rail-Optimized 设计中:

  • 同一节点的 GPU $g$$0 \le g < R$)只接入 rail $g$ 上的 NIC
  • 跨节点通信时,GPU $g$ → GPU' $g$ 保持在 rail $g$,不跨 rail
  • 跨 rail 通信(GPU $g_1$ → GPU' $g_2$$g_1 \ne g_2$)需要在节点内经过 NVLink 中转到目标 rail 对应的 NIC

NCCL 默认尽量保持通信在同 rail 内(NCCL_CROSS_NIC=0[2],避免跨 rail 的 NVLink 中转开销。

平面内通信 vs 平面间通信

通信类型路径瓶颈
同 rail(rail-aligned)NVLink (本节点) + IB rail $g$ + NVLink (远端节点)IB rail 单链路带宽
跨 railNVLink (本节点换 rail) + IB rail $g'$ + NVLink (远端)NVLink 跨 rail 中转 + IB 带宽

@tbl-route-dqplb-rail-traffic 平面内 vs 平面间通信路径

集合通信库(NCCL/NCCLX)在算法层做 rail 对齐——AllReduce 的 Ring 拓扑被设计为环路尽量在同一 rail 内闭合。

fabricId 编码

NCCL 2.30+ 引入 fabricId 标识[3],支持多 DC + 多 rail 的二级编码:

$$\begin{equation} \text{fabricId} = \text{DC\_ID} \times \text{MAX\_RAILS} + \text{RAIL\_ID} \label{eq:route-dqplb-fabricid} \end{equation}$$

通过 NCCL_IB_HCA=device:port:fabricID 显式声明每张 NIC 所属的 (DC, rail)。DQPLB 根据通信双方的 fabricId 推断连接类别(同 DC 同 rail / 同 DC 跨 rail / 跨 DC),并对应不同的 QP 数和 outstanding 配置。

DQPLB 的核心算法是什么?

Per-Connection-Class QP 分配

DQPLB 按"连接类别"配置 QP 数和 outstanding segment 上限。每个类别的 outstanding 上限按 BDP 估算:

$$\begin{equation} N_{\text{outstanding}} = \left\lceil \frac{R_{\text{target}} \cdot \text{RTT}}{s_{\text{seg}}} \right\rceil \label{eq:route-dqplb-bdp} \end{equation}$$

其中 $R_{\text{target}}$ 为目标带宽,$\text{RTT}$ 为往返时延,$s_{\text{seg}}$ 为 segment 大小。该公式确保流水线填满 BDP,但不会因过度 in-flight 导致路由器缓冲溢出。

工程推荐范围(基于 $\eqref{eq:route-dqplb-bdp}$ BDP 公式与 Meta 集群部署量级推算,非直引论文具体配置):

连接类别RTT 量级BDP 量级QP 数outstanding
rack-local< 5 μs数十 KB44-8
cross-rack5-20 μs数百 KB8-168-32
cross-DC1-10 ms数十 MB16-3264-256

@tbl-route-dqplb-conn-class 连接类别与 QP/outstanding 工程推荐范围

cross-DC 的 outstanding 比 rack-local 大 2-3 个数量级——这正是静态 QP 配置无法适配的核心原因。

Segment 切分与 Round-Robin 投递

DQPLB 将待发送的消息切分为大小相等的 segment(典型 64 KB - 1 MB),按 round-robin 顺序投递到该连接的 $N$ 个 QP:

消息 M = [seg_0, seg_1, ..., seg_{K-1}]
QP 池 = {QP_0, QP_1, ..., QP_{N-1}}

for i in 0..K:
target_qp = QP_{i mod N}
if outstanding[target_qp] < N_outstanding:
post_send(target_qp, seg_i)
outstanding[target_qp] += 1
else:
pending.append(seg_i) # 该 QP 满,先排队

每个 QP 维护独立的 outstanding 计数。达到 outstanding 上限的 QP 暂停 post,等待 CQE 触发的恢复。

基于 CQE 的动态调度

收到某个 QP 的 CQE(一个 segment 发送完成)后,DQPLB 立即恢复对该 QP 的 segment 投递:

on CQE for QP_k:
outstanding[k] -= 1
if pending != empty:
next_seg = pending.pop_front()
post_send(QP_k, next_seg)
outstanding[k] += 1

关键效果:拥塞低的 QP 完成 segment 快,CQE 返回快,自动获得更多 segment 投递;拥塞高的 QP CQE 慢,segment 投递自动减少。整个负载均衡过程不需要任何显式的拥塞反馈协议,仅依赖 CQE 这一标准 IB verbs 信号

这与 ECMP / E-ECMP 的"决策一次后不变"形成根本区别:DQPLB 在 segment 粒度持续重平衡,控制环路延迟约为 BDP 量级。

保序机制

Round-robin 跨多个 QP 投递必然产生乱序——不同 QP 走不同物理路径,segment 到达顺序无保证。NCCLX 通过三层机制保序:

  • 发送端:每个 segment 携带递增的 sequence number
  • 接收端:维护"下一个期望序号",乱序到达的 segment 缓存到重排序队列,按序号补齐后交付上层
  • IB opcode:典型实现使用 IBV_WR_RDMA_WRITE_WITH_IMM(而非标准 IBV_WR_RDMA_WRITE),利用 IMM 字段携带 sequence number,避免修改 RDMA 数据载荷——NCCLX 论文[4]披露 DQPLB 采用此 opcode 实现保序

接收端重排序队列的最大占用约为:

$$\begin{equation} B_{\text{reorder}} \approx N \cdot N_{\text{outstanding}} \cdot s_{\text{seg}} \label{eq:route-dqplb-reorder-buf} \end{equation}$$

cross-DC 场景下($N=32$$N_{\text{outstanding}}=256$$s_{\text{seg}}=1$ MB)单条连接的重排序缓冲约 8 GB——这是 cross-DC 部署的关键资源约束。

DQPLB 与 NCCL 标准 multi-QP 差在哪?

NCCL 上游版本已支持 multi-QP(通过 NCCL_IB_SPLIT_DATA_ON_QPS[5],但与 DQPLB 有关键差异:

特性NCCL multi-QPDQPLB
QP 分配粒度全局统一(同一 N)Per-connection-class
投递策略静态均分(split)或轮询(round-robin)Round-robin + CQE 反馈
拥塞响应有(拥塞低 QP 自动加权)
Outstanding 控制全局Per-class BDP-aware
异构链路适配强(按 fabricId 分类)
保序机制依赖 IB QP 内有序跨 QP 序号 + IMM opcode

@tbl-route-dqplb-vs-nccl-multiqp NCCL multi-QP 与 DQPLB 对比

NCCL multi-QP 解决了"哈希散列"问题,DQPLB 在此基础上进一步解决"运行时动态均衡 + 异构链路自适应"问题。

DQPLB 与 SHARP / AR 如何分工?

DQPLB 不取代 SHARP / AR,而是与它们正交分工:

层级机制解决的问题
算法层(数据)SHARP(网内规约)减少需要传输的字节数
路径层(交换机)AR per-flowlet单条路径上的多路径拥塞均衡
调度层(host)DQPLB多 QP 之间的速率分配 + 异构链路适配

@tbl-route-dqplb-coordination DQPLB / SHARP / AR 三层分工

三层是正交的,可叠加部署:SHARP 减少数据量,AR 在物理路径上做拥塞规避,DQPLB 决定每个 QP 发多少 segment。

DQPLB 在 Llama 4 训练(96K GPU)实测改进了多少?

实测改进

NCCLX + DQPLB 在 Meta 96K GPU Llama 4 训练集群上相对 NCCL baseline 的改进:

指标改进幅度备注
Steady-state 训练 step latency-12%与 NCCL baseline 对比
训练启动时间11× 加速96K scale 初始化阶段
Llama 4 Maverick 推理 e2e decoding latency-15% ~ -80%不同 distributed 配置区间

@tbl-route-dqplb-llama4 Llama 4 训练实测改进

改进来源分解

NCCLX 论文[4]将上述改进归因于三个层次的协同:

  1. DQPLB 本身:动态 QP 调度减少链路拥塞导致的尾延迟
  2. fabricId-aware 连接分类:让 cross-rack / cross-DC 连接获得适配的 outstanding 配置,避免小 BDP 连接因过度 in-flight 而拥塞
  3. 保序优化:IMM opcode + 重排序队列让 multi-QP 不再受限于 IB 标准的 QP 内有序约束

DQPLB 综合性能特性?

指标DQPLBNCCL multi-QPE-ECMP(对照)
100K GPU AllReduce 有效带宽高(动态平衡)中(哈希碰撞限制)
拥塞响应有(CQE 反馈)
异构链路适配
跨 DC 训练支持
硬件门槛通用 RoCEv2 ASIC通用支持 UDF 的 ASIC
部署复杂度中(通信库改造)

@tbl-route-dqplb-perf 性能特性对比

何时该用 DQPLB,何时不该?

适用场景

  • 100K+ GPU 规模的训练集群
  • 异构连接(rack-local + cross-rack + cross-DC 混合)场景
  • 已有 Rail-Optimized 拓扑 + RoCEv2 + 多 NIC GPU 节点的部署
  • 希望避免引入 AR ASIC 或 UEC NIC 等新硬件的环境

局限

  • 需要通信库(NCCL/NCCLX)改造,NCCL 上游版本尚未集成完整 DQPLB
  • 接收端的重排序缓冲在 cross-DC 场景下需求量大(GB 级,见 $\eqref{eq:route-dqplb-reorder-buf}$
  • CQE 反馈延迟限制了响应速度——sub-RTT 级别的拥塞抖动无法捕捉
  • 依赖 IBV_WR_RDMA_WRITE_WITH_IMM opcode,需要 NIC 固件支持

选型建议

  • Rail-Optimized + 100K GPU + 异构链路:DQPLB 是当前最优选择
  • Rail-Optimized + 24K GPU + 同构链路:E-ECMP + QP Scaling 已足够
  • 单 NIC 节点或非 Rail-Optimized 拓扑:DQPLB 退化为多 QP scaling,收益降低

Takeaway

知识点核心结论
决策上移QP-path 映射仍由 E-ECMP 哈希,但每 QP 发送速率由通信库按 CQE 动态调
Connection classrack-local / cross-rack / cross-DC 三类,按 BDP 配 QP 数 + outstanding
Round-robin + CQE拥塞低 QP CQE 快 → 自动获得更多 segment,无需显式拥塞协议
保序机制IMM opcode 携带 sequence number + 接收端重排序队列
与 SHARP/AR 关系三层正交:SHARP 减数据量 / AR 路径拥塞 / DQPLB 多 QP 速率分配
Llama 4 实测step latency -12%;启动 11×;decoding latency -15~-80%
工程门槛仅通信库改造,无新硬件;cross-DC 重排序缓冲 GB 级是核心约束

参考资料

  1. Gangidi et al., RDMA over Ethernet for Distributed AI Training at Meta Scale, SIGCOMM 2024. https://dl.acm.org/doi/10.1145/3651890.3672233
  2. NVIDIA, NCCL Environment Variables. https://docs.nvidia.com/deeplearning/nccl/user-guide/docs/env.html
  3. NVIDIA, NCCL Deep Dive: Cross Data Center Communication, 2025. https://developer.nvidia.com/blog/nccl-deep-dive-cross-data-center-communication-and-network-topology-awareness/
  4. Collective Communication for 100k+ GPUs, arXiv:2510.20171 (Meta, 2025). https://arxiv.org/abs/2510.20171
  5. NVIDIA, Doubling all2all Performance with NCCL 2.12. https://developer.nvidia.com/blog/doubling-all2all-performance-with-nvidia-collective-communication-library-2-12/