分布式Tensorflow:谁应用参数更新?

sta*_*010 9 machine-learning tensorflow

我已经使用过TensorFlow但是对于训练模型分发TensorFlow是新手.我的理解是,当前的最佳实践支持使用异步更新的数据并行模型:

Google Brain团队于2016年4月发布的一篇论文对各种方法进行了基准测试,发现使用一些备用复制品进行同步更新的数据并行性是最有效的,不仅收敛速度更快,而且还能产生更好的模型.- 使用Scikit-Learn和Tensorflow进行动手机器学习的第12章 .

现在,我对进一步阅读这个架构的困惑是弄清楚哪个组件应用了参数更新:工作者还是参数服务器?

在下面的插图中,我很清楚工人计算梯度dJ/dw(损失J相对于参数权重w的梯度).但谁应用梯度下降更新规则?

在此输入图像描述

令人困惑的是,这篇关于分布式TensorFlow的O'Reilly文章指出了以下内容:

在更集中的架构中,设备以渐变的形式将其输出发送到参数服务器.这些服务器收集并聚合渐变.在同步训练中,参数服务器计算模型的最新版本,并将其发送回设备.在异步训练中,参数服务器将梯度发送到本地计算新模型的设备.在这两种体系结构中,循环重复直到训练终止.

上段建议在异步培训中:

  1. 工作人员计算渐变并将其发送到参数服务器.
  2. 参数服务器将渐变广播给工作人员.
  3. 每个工作人员接收广播的梯度并应用更新规则.

我的理解是否正确?如果是,那对我来说似乎并不是非同步的,因为工作人员必须等待参数服务器广播渐变.任何解释将不胜感激.

bjo*_*tta 1

我知道这是在 2018 年提出的问题,但让我们尝试一下。

  1. 每个 Worker 计算梯度
  2. 当工作人员完成梯度计算后,会将其发送到参数服务器。
  3. 然后,工作人员会从参数服务器发送新参数,而无需等待其他工作人员。

在同步部分,在每个工作人员将其更新发送到服务器之前,工作人员不会继续训练。

在异步情况下,这意味着每个工作人员可以有稍微不同的梯度,因为他们无需等待每个工作人员更新参数服务器即可获取梯度。