- 本地 SGD 是一种分布式训练技术,其中梯度不是每一步都同步。
- 每个进程都会更新自己版本的模型权重,在给定的步数后,通过跨所有进程平均这些权重来同步它们。
- 在底层,本地 SGD 代码禁用了自动梯度同步(但累积仍然如预期工作!)。
- 它每 local_sgd_steps 步(以及在训练循环结束时)平均模型参数。
- 提高了通信效率,并且特别是在计算机缺乏如 NVLink 等更快的互连时,可以显著加速训练。
- 如有必要,本地 SGD 也可以与梯度累积结合使用
- 限制:当前的实现只适用于基本的多 GPU(或多 CPU)训练,例如,没有 DeepSpeed 等