多跳拓扑建模
核心要点:
- 多跳 $\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 冲突) |
参考资料
- 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