异步训练在分布式Tensorflow中如何工作?

发布于 2021-01-29 17:06:50

我已阅读Distributed Tensorflow
Doc
,其中提到在异步培训中,

图的每个副本都有一个独立的训练循环,无需协调即可执行。

据我了解,如果我们将参数服务器与数据并行性体系结构一起使用,则意味着每个工作人员都可以计算梯度并更新自己的权重,而无需关心分布式培训神经网络的其他工作人员更新。由于所有权重都在参数服务器(ps)上共享,我认为ps仍必须以某种方式协调(或汇总)所有工作人员的权重更新。我想知道聚合在异步训练中如何工作。或更笼统地说,异步培训如何在分布式Tensorflow中工作?

关注者
0
被浏览
97
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    当您在分布式TensorFlow中异步训练时,特定工作人员会执行以下操作:

    1. 工作程序从PS任务并行 读取 所有共享模型参数,并将它们复制到工作程序任务。这些读取与任何并发写入均不协调,并且不会获取任何锁:尤其是该工作程序可能会看到一个或多个其他工作程序的部分更新(例如,可能已应用了来自另一工作程序的更新的子集,或元素的一个子集)中的变量可能已更新)。

    2. 工作者 根据 一批输入数据和在步骤1中读取的参数值在本地 计算 梯度。

    3. 工人 梯度为每个变量到适当的PS任务,和 适用 的梯度以它们各自的变量,使用由优化算法(例如SGD,SGD与动量,Adagrad,亚当等)确定的更新规则。更新规则通常使用(大约) 交换 操作,因此它们可以独立地应用于来自每个工作程序的更新,并且每个变量的状态将是接收到的更新序列的运行汇总。

    在异步训练中,来自工作程序的每个更新是同时应用的,并且如果在初始化use_locking=True各个优化程序(例如tf.train.GradientDescentOptimizer)时设置了可选标志,则可以在某种程度上协调更新。但是请注意,此处的锁定仅提供两个并发更新的互斥,并且(如上所述)读取不获取锁定;锁定不会在整个更新集中提供原子性。

    (相比之下,在同步训练中,类似的实用程序tf.train.SyncReplicasOptimizer将确保所有工作人员都能读取每个模型参数的相同最新值;并且确保将同步步骤的所有更新汇总后再应用于为此,工作人员通过屏障进行同步,屏障在发送梯度更新后进入,在汇总更新应用于所有变量后退出。



推荐阅读
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看