同步数据并行 · Ring All-reduce · 强扩展

GPU 越加越多,训练为什么没有线性变快?

固定同一个全局 batch,GPU 增多会缩短每张卡的计算,却不会让梯度同步免费。我们把一个 step 拆开算,你会看到实际曲线从哪里开始偏离理想直线。

T计算(n)=T₁/n T通信(n)=2(n−1)α+2(n−1)G/(n·BW) E(n)=T₁/[n·Tstep(n)]

先把一个同步 step 拆成计算与 All-reduce

场景预设
35 ms
320 MB
50 GB/s
20 μs

“单卡计算时间”指一张 GPU 处理 256 个样本的纯计算时间;全局 batch 变大时,本模型按样本数线性增加计算量。

Step 时间
有效样本吞吐 全局 batch ÷ step 时间
加速比 · 并行效率

当前一步花在哪里

通信占比

计算 All-reduce 通信

理想曲线只缩短计算,实际曲线还要支付通信

理想加速比 S(n)=n 当前通信条件下的实际加速比

收益转薄判据

看扩展效率,也看下一次翻倍带来多少吞吐

固定当前全局 batch,比较 1–64 张 GPU 的强扩展结果。橙色标记表示下一次翻倍的吞吐增幅首次低于 25%。
GPU Step 时间 通信占比 加速比 并行效率

梯度累积是在同步前多做计算

同一份梯度只归约一次,而每次更新包含更多 micro-batch,通信占比会下降。它能缓解显存和通信摊销问题,却不保证达到同一质量所需的样本数不变。

高速互联只在通信真是瓶颈时值钱

带宽更高、启动延迟更低,会把实际曲线推近理想线。若单卡本来就在等数据,或者模型计算占绝大多数,先修输入管线通常更直接。