通信账:All-Reduce 随规模增长的带宽模型
大模型训练里最容易被低估的账是通信:梯度同步每个 step 都要做,通信时间随规模增长而增长,算力却只随卡数线性增长——两者赛跑,谁赢决定扩展效率。本文把 All-Reduce 的带宽模型推导清楚,方法框架参考开源书稿《深入理解 AI Infra》(Apache-2.0),公式与算例为本站自行推导整理。
1. 一次 All-Reduce 要搬多少数据
训练中每步的梯度全规约(All-Reduce):把 N 张卡各自算出的梯度加起来再广播回去。数据量 = 模型参数量 × 精度字节数:
70B FP16 模型:梯度本身 140 GB,全规约要在所有卡之间交换这 140 GB(按消息总传输量计)。
2. 环状算法的带宽模型
NCCL 默认 ring 算法把 N 张卡串成环,每张卡只和自己的邻居通信。关键结论:
- N 张卡、单链路带宽 BW、消息 Msg;
- 环越大,有效带宽 busbw 越接近 2×BW(理论上限);
- 所以 8 卡机内 ring 的 busbw ≈ 1.75×单链路,不是 8 倍——这是新手最容易算错的账。
| 卡数 N | busbw/BW | 说明 |
|---|---|---|
| 2 | 1.0× | 双向对传 |
| 4 | 1.5× | |
| 8 | 1.75× | 单机上限 |
| 16(跨 2 节点) | 1.875× | 受限于最慢链路(机间 IB) |
3. 为什么大模型训练必须上 IB
梯度 70B×2 字节 = 140 GB/step。若用 25G 以太(≈3 GB/s)做参数面:
而训练一个 step 的计算时间通常只有几秒到几十秒——通信直接吃掉大部分时间,扩展效率趋近于零。换成 4×200G HDR IB(单节点聚合 800Gbps ≈ 100 GB/s):
判断:网络选型的量化标准不是"快不快",是通信时间 vs 计算时间的比值——通信占比 >30% 就该优化拓扑或换网。
4. L40S 无 NVLink 的机内通信上限
L40S 机内 P2P 走 PCIe Gen4×16(≈32 GB/s 单向)。8 卡 allreduce:
对比带 NVLink 的 H 系列机内(≈300-900 GB/s),差一个数量级。这就是 L40S 无 NVLink 一文里"单机通信不是卖点"的量化出处:梯度全规约在 L40S 上机内通信就是瓶颈。
5. 可复算 Python 函数
python
def allreduce_time(msg_gb, bw_gbps, n, comm_overhead=0.1):
"""环 all-reduce 耗时:busbw = 2(n-1)/n × BW;返回秒数与通信占比示例"""
busbw = bw_gbps * (2 * (n - 1) / n) / 8 # GB/s
t = 2 * (n - 1) / n * msg_gb / busbw * (1 + comm_overhead)
return t
allreduce_time(msg_gb=140, bw_gbps=800, n=48) # 4×200G IB 聚合
# ≈ 0.45 s(含 10% 协议开销;实际受 SM/拓扑影响,见 04 章实测)6. 交付清单
- 先算"通信账"再选网:通信时间/计算时间 < 30% 可接受,否则上 IB 或改并行策略;
- 机内通信按 PCIe/NVLink 实际带宽算(L40S 用 ~32 GB/s,不是规格"高速");
- 实测 busbw 与模型对比:偏离 >20% 查拓扑局部性(见 Rail 拓扑)与 SHARP 是否生效;
- 大模型训练梯度账固定后,用 训练资源账 与通信账联合做扩展性预估。
本文为本站自行推导整理,方法框架参考开源书稿《深入理解 AI Infra》(Apache-2.0);具体版本号与实测数据以现场为准。