跳到主要内容

多跳拓扑建模

核心要点

  • 多跳 $\alpha$ 累加: $T = \sum_i (\alpha_i + M/\beta_i)$, cut-through 可优化为单次 $M/\beta_{\min}$
  • 两层分层公式:节点内 NVLink + 节点间 IB 串行三阶段,跨节点流量压缩 $G_s$
  • 静态竞争$\beta_{\text{eff}} = \beta / \max(1, F/C)$,大规模 AllGather 误差可从 >500% 降至 10-30%
  • 动态拥塞 (DCQCN/PFC):代数模型结构性失效,需包级仿真 (NS-3 / SimAI)
  • Multi-rail 粒度:汇聚 / 按平面 / 按链路三档,ECMP 冲突时只能用按链路

AI 集群的互联网络是分层的 — NVLink (节点内) / InfiniBand 或以太网 (节点间) / 光纤 (机柜间) 构成多层链路。不同并行策略的集合通信在不同层级链路上运行,需要分层建模才能得到准确的延迟预测。

多跳延迟怎么累加

核心问题:通信经 $H$ 跳时,启动延迟和传播延迟怎么叠加?cut-through 优化了什么?

store-and-forward 模式下每跳独立累加

$$\begin{equation} T_{\text{multihop}} = \sum_{i=1}^{H} \left(\alpha_i + \frac{M}{\beta_i}\right) \label{eq:model-multihop-sum} \end{equation}$$

$\alpha_i$$\beta_i$ 分别是第 $i$ 跳的启动延迟和带宽。

cut-through 交换模式 (当前数据包的第一个 flit 到达时即开始转发):

$$\begin{equation} T_{\text{cutthrough}} = \alpha_1 + \frac{M}{\beta_{\min}} + \sum_{i=2}^{H} \alpha_i \label{eq:model-multihop-cutthrough} \end{equation}$$

$\beta_{\min}$ 为路径上的瓶颈带宽,后续跳的 $\alpha$ 与上一跳传输部分重叠。

简化形式 (各跳带宽差异不大时):

$$\begin{equation} T_{\text{multihop}} \approx \alpha_{\text{total}} + \frac{M}{\beta_{\text{bottleneck}}} \label{eq:model-multihop-simplified} \end{equation}$$

$\alpha_{\text{total}} = \sum_i \alpha_i$ 为各跳启动延迟之和,$\beta_{\text{bottleneck}}$ 为路径最窄带宽。

$\alpha$ 各跳的物理分解 (与 6.2 Alpha-Beta 模型 一致):

$$\begin{equation} \alpha = \alpha_{\text{sw}} + \alpha_{\text{NoC}} + \alpha_{\text{DMA}} + \alpha_{\text{PHY}} + \alpha_{\text{link}} + \sum_{j} \alpha_{\text{switch}_j} + \alpha_{\text{mem}} \label{eq:model-multihop-alpha-decomp} \end{equation}$$
分量物理来源典型值
$\alpha_{\text{sw}}$通信库调用 + 描述符准备 (NCCL kernel launch)1–5 $\mu s$
$\alpha_{\text{NoC}}$片上网络路由 (计算核 → DMA 引擎)0.05–0.5 $\mu s$
$\alpha_{\text{DMA}}$DMA 引擎启动 + IOMMU 地址翻译0.2–1 $\mu s$
$\alpha_{\text{PHY}}$SerDes 编解码 + PLL 锁定0.005–0.02 $\mu s$
$\alpha_{\text{link}}$物理链路传播 (电 / 光,$d/v$)0.005–5 $\mu s$
$\alpha_{\text{switch}}$交换机转发延迟 (查表 + 缓冲 + 仲裁)0.1–1 $\mu s$
$\alpha_{\text{mem}}$目的端内存写入首次延迟0.03–0.08 $\mu s$

@tbl-model-multihop-alpha-decomp 多跳 $\alpha$ 各分量物理来源与典型值

两层拓扑的分层公式怎么写

核心问题:节点内 NVLink + 节点间 IB 带宽差异巨大,怎么用 NCCL 三阶段公式建模?

两层拓扑的根本差异:NVLink 带宽约 300–900 GB/s,跨节点 IB / RoCE 带宽约 25–100 GB/s,差异 9–36 倍。若用统一的 $\beta$ 参数建模,误差高达数十倍。

分层 AllReduce 公式 (以 $N_g$ 个节点、每节点 $G_s$ 个 GPU 为例,NCCL 三阶段串行):

$$\begin{equation} T = T_1 + T_2 + T_3 + T_{sw} \label{eq:model-multihop-twolayer-total} \end{equation}$$

三个阶段串行执行 (Phase 2 输入依赖 Phase 1 输出)。

Phase 1 — 节点内 ReduceScatter ($G_s - 1$ 步,走 NVLink):

$$\begin{equation} T_1 = \frac{G_s - 1}{G_s} \cdot \frac{M}{\beta_{NV}} + \alpha_{nv} \label{eq:model-multihop-phase1-nvlink-rs} \end{equation}$$

Phase 2 — 节点间 AllReduce (仅传 $M/G_s$,走 IB):

$$\begin{equation} T_2 = \frac{2(N_g - 1)}{N_g} \cdot \frac{M/G_s}{\beta_{IB}} + \alpha_{ib} \label{eq:model-multihop-phase2-ib-ar} \end{equation}$$

$T_2$ 只传 $M/G_s$ 的原因:Phase 1 完成后每个 GPU 仅保留 $1/G_s$ 的数据分片,跨节点只需同步该部分,IB 流量压缩 $G_s$ 倍。

Phase 3 — 节点内 AllGather ($G_s - 1$ 步,走 NVLink):

$$\begin{equation} T_3 = \frac{G_s - 1}{G_s} \cdot \frac{M}{\beta_{NV}} + \alpha_{nv} \label{eq:model-multihop-phase3-nvlink-ag} \end{equation}$$

合并后的闭合公式 ($N_g = 2$, $G_s = 8$ 为例):

$$\begin{equation} \boxed{T = \underbrace{2\alpha_{nv} + \alpha_{ib} + T_{sw}}_{C} + M \cdot \left(\frac{7/4}{\beta_{NV}} + \frac{1/8}{\beta_{IB}}\right)} \label{eq:model-multihop-twolayer-closed} \end{equation}$$

系数 $7/4 = 2 \times (G_s-1)/G_s = 2 \times 7/8$, $1/8 = 1/G_s$

分层带宽贡献对比 ($G_s = 8$):

阶段带宽参数系数说明
NVLink (两趟)$\beta_{NV} \approx 360$ GB/s$7/4 = 1.75$ReduceScatter + AllGather 各 7/8
IB (一趟)$\beta_{IB} \approx 22$ GB/s$1/8 = 0.125$仅传 $M/8$,流量压缩后系数小

@tbl-model-multihop-twolayer-bw 两层拓扑 NVLink / IB 带宽贡献对比

NVLink 阶段贡献约 $1.75 \times M / 360 = M/206$, IB 阶段贡献约 $0.125 \times M / 22 = M/176$,两者量级相近 — 尽管 IB 带宽是 NVLink 的 1/16,但 IB 阶段的传输量也仅为 $M/8$,大大减轻了 IB 的负担。

带宽竞争怎么修正

核心问题:假设 3 (链路独占) 在哪些场景失效?怎么修?

$\alpha$-$\beta$ 基础模型假设每条链路独占,无竞争。实际上多个并发通信流共享物理链路,有效带宽按流数比例缩减。

静态竞争 (可在分析模型中处理)

多个通信流共享同一物理链路,有效带宽 = 链路带宽 / 并发流数

$$\begin{equation} \beta_{\text{eff},i} = \frac{\beta_i}{\max(1,\ F_i / C_i)} \label{eq:model-multihop-contention-beta-eff} \end{equation}$$

$F_i$ 为链路 $i$ 上的并发流量 (单位:链路容量的倍数),$C_i$ 为链路容量 ($C_i = 1$)。

竞争来源

  • Ring AllReduce 中多个 chunk 同时在环上传输
  • MoE EP AllToAll 中所有 $N \times N$ 节点对同时通信
  • DP AllReduce 与 TP AllReduce 并发 (若不同并行组共享物理链路)

精度改善:加入静态竞争建模后,大规模场景 (512 GPU AllGather) 的误差可从 >500% 降至 10–30% (来源:[SimAI, NSDI'25][1])。剩余误差来自动态拥塞 (DCQCN / PFC),需包级仿真才能消除。

动态拥塞 (分析模型的结构性局限)

拥塞控制算法 (DCQCN / HPCC) 的瞬态行为是非线性动态系统行为,$\alpha$-$\beta$ 从根本上无法捕捉,见 :

类别能否在分析模型中处理精度改善方案
静态竞争可以 (追踪并发流数,缩减 $\beta$)误差 10–30% → 5–10%
动态拥塞不可以 (结构性缺陷)需包级仿真 (NS-3 / SimAI)

@tbl-model-multihop-contention-handle 竞争类型与处理能力

Multi-Rail 建模粒度

建模方式描述适用场景
汇聚所有链路合并为单一等效带宽均匀流量,精度约 5%
按平面每个 NVSwitch 平面独立建模交换机级流量竞争
按链路每条物理链路独立 + 路由非均匀流量 (MoE AllToAll, ECMP 冲突)

@tbl-model-multihop-multirail-grain Multi-rail 建模粒度对照

汇聚模型失效场景:ECMP 哈希冲突 (导致流量非均衡) / MoE AllToAll 的 $N \times N$ 竞争 / 混合操作并发时的链路争用。

Takeaway

知识点核心结论
多跳 $\alpha$ 累加$T = \sum_i (\alpha_i + M/\beta_i)$, cut-through 可优化为 $\alpha_1 + M/\beta_{\min} + \sum_{i\geq2} \alpha_i$
两层分层公式$T = C + M \cdot (1.75/\beta_{NV} + 0.125/\beta_{IB})$ ($N_g=2, G_s=8$),跨节点流量压缩 $G_s$
静态竞争$\beta_{\text{eff}} = \beta / \max(1, F/C)$,大规模 AllGather 误差 >500% → 10-30%
动态拥塞DCQCN / PFC 速率振荡,代数模型结构性失效,需包级仿真
Multi-rail 粒度汇聚 (均匀流) / 按平面 (交换机级) / 按链路 (ECMP 冲突)

参考资料

  1. Wang et al., SimAI: Unifying Architecture Design and Performance Tuning for Large-Scale LLM Training, NSDI 2025. https://www.usenix.org/system/files/nsdi25-wang-xizheng-simai.pdf