趋近智
训练超大模型或使用巨量数据集,对单机优化提出了重大挑战。即使是像SAG和SVRG这样的方差减小算法,它们通过减小梯度噪声来改进标准随机梯度下降 (gradient descent),也往往不足以应对所需的规模。因此,并行化是必不可少的。将工作负载分散到多个处理单元(CPU或GPU),甚至多台机器上,对使训练时间切实可行非常重要。
一种并行化SGD的直接方法是同步方式:多个“工作器”并行地在不同的mini-batch数据上计算梯度。然而,它们必须全部等待彼此完成,然后才能聚合它们的梯度(通常通过平均)并对模型参数 (parameter)应用一次单一的组合更新。这种同步方法确保每次更新都基于从相同参数状态计算的梯度。主要缺点是什么?整个过程的速度仅与最慢的工作器(“拖后腿者”问题)相当。同步所需的网络通信也可能成为一个主要瓶颈,特别是工作器数量很多时。
异步随机梯度下降(ASGD)提供了一种不同的并行化方法,旨在最大化硬件利用率,并通过消除同步等待来潜在地加快实际训练时间。
在典型的ASGD设置中,多个工作进程独立地执行以下循环:
ASGD的定义特点是工作器互不等待。工作器1可能基于参数 计算其梯度,而工作器2同时基于 计算其梯度(因为工作器3已推送了更新)。当工作器1最终推送其更新时,它被应用于当前的参数状态,例如 ,这可能比它最初用于梯度计算的参数 超前好几步。
这种缺乏同步带来了ASGD中的主要问题:陈旧梯度。如果一个梯度是使用比当前正在应用更新的参数 (parameter)更旧(更“陈旧”)的参数值计算的,则认为它是陈旧的。
想象工作器A获取参数 。它需要一些时间来计算其梯度 。在这段时间内,工作器B和C分别获取参数 和 ,计算它们的梯度,并推送它们的更新,使中心参数变为 。当工作器A最终完成并推送其从 导出的更新时,它被应用于 。这个更新是基于关于模型状态的过时信息。
陈旧程度取决于诸如工作器数量、每个梯度的计算时间以及通信延迟等因素。陈旧梯度会给优化过程带来噪声。这种噪声可能:
选择同步或异步并行化涉及权衡:
| 特性 | 同步SGD (SyncSGD) | 异步SGD (ASGD) |
|---|---|---|
| 工作器等待 | 是(等待最慢工作器) | 否(独立更新) |
| 梯度 | 一致(基于相同参数 (parameter)) | 可能陈旧(基于旧参数) |
| 吞吐量 (throughput) | 受拖后腿者和同步成本限制 | 可能高很多 |
| 收敛 | 通常更稳定,分析更简单 | 噪声更大,每次更新步可能更慢 |
| 实际运行时间 | 在大型/异构系统中可能较慢 | 由于更高吞吐量通常整体更快 |
| 调优 | 适用标准SGD调优 | 更复杂,对陈旧性效应敏感 |
下图显示了时间线差异:
三个工作器的同步SGD和异步SGD时间线比较。在同步SGD中,所有工作器必须在更新发生前完成计算并同步。在异步SGD中,工作器独立计算和更新,带来更高的吞吐量,但也可能应用陈旧的梯度。
尽管存在陈旧梯度的问题,ASGD仍能有效。吞吐量 (throughput)的增加通常超过每次更新效率的降低,从而在实际运行时间上带来更快的收敛,特别是在通信延迟高或工作器速度不均的环境中(例如,CPU集群)。
然而,ASGD的调优需要细心:
尽管ASGD是一项重要技术,特别是结合参数 (parameter)服务器架构(在第5章进一步讨论),但高速互连(如GPU的NVLink)和高效同步算法(如环形全约化,在第5章介绍)的进步,使得同步方法在现代深度学习 (deep learning)集群中极具竞争力,并常被选用。然而,掌握ASGD的原理和权衡对于理解分布式优化策略的全面情况很有帮助。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造