
180
|
第
4
章
图
4
-
16
:在异步训练中,每个工作者都在切片的批次数据上执行梯度下降。工作者无须等
待其他工作者对模型的更新。
与同步训练一样,对于每个
SGD
步骤,一个批次的数据被拆分给每个工作者。每个
工作者都会在切片的批次数据上执行前向传播,并计算模型参数的梯度。这些梯度
将被发送到参数服务器,参数服务器执行参数更新,然后将新的模型参数和拆分的
批次数据一起发送回工作者。
同步训练和异步训练之间的主要区别在于,参数服务器不执行全归约。它根据自上
次计算以来收到的梯度更新值定期计算新的模型参数。通常,异步分布比同步训练
可以获得更高的吞吐量,因为速度慢的工作者不会阻碍训练步骤的进行。如果单个
工作者出现故障,该工作者重启后可以继续按计划与其他工作者一起训练。这会导
致丢失训练期间拆分的部分批次数据,从而很难准确地跟踪已处理了多少个轮次的
数据。这是为什么我们在训练大型分布式作业时,通常指定虚拟轮次而不是轮次的
另一个原因。关于虚拟轮次的讨论可参见“设计模式
12
:检查点”。
此外,由于权值更新之间没有同步,因此一个工作者可能基于旧的模型状态来更新
模型权值。但在实际中这不是问题。通常情况下
,
大型神经网络要经过多个轮次的训
练,而这些小的差异最终可以忽略不计。
在
Keras
中,
ParameterServerStrategy
在多台机器上实现异步参数服务器训练。使
用异步训练方法时,某些机器被指定为工作者,而另一些则被保留为参数服务器。
参数服务器保存模型的每个变量,而工作者(通常是
GPU
)执行计算。