您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

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

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

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

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

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

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

其他 2022/1/1 18:27:17 有549人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶