异步训练在分布式Tensorflow中如何工作?
我已阅读Distributed Tensorflow
Doc,其中提到在异步培训中,
图的每个副本都有一个独立的训练循环,无需协调即可执行。
据我了解,如果我们将参数服务器与数据并行性体系结构一起使用,则意味着每个工作人员都可以计算梯度并更新自己的权重,而无需关心分布式培训神经网络的其他工作人员更新。由于所有权重都在参数服务器(ps)上共享,我认为ps仍必须以某种方式协调(或汇总)所有工作人员的权重更新。我想知道聚合在异步训练中如何工作。或更笼统地说,异步培训如何在分布式Tensorflow中工作?
-
当您在分布式TensorFlow中异步训练时,特定工作人员会执行以下操作:
-
工作程序从PS任务并行 读取 所有共享模型参数,并将它们复制到工作程序任务。这些读取与任何并发写入均不协调,并且不会获取任何锁:尤其是该工作程序可能会看到一个或多个其他工作程序的部分更新(例如,可能已应用了来自另一工作程序的更新的子集,或元素的一个子集)中的变量可能已更新)。
-
工作者 根据 一批输入数据和在步骤1中读取的参数值在本地 计算 梯度。
-
工人 将 梯度为每个变量到适当的PS任务,和 适用 的梯度以它们各自的变量,使用由优化算法(例如SGD,SGD与动量,Adagrad,亚当等)确定的更新规则。更新规则通常使用(大约) 交换 操作,因此它们可以独立地应用于来自每个工作程序的更新,并且每个变量的状态将是接收到的更新序列的运行汇总。
在异步训练中,来自工作程序的每个更新是同时应用的,并且如果在初始化
use_locking=True
各个优化程序(例如tf.train.GradientDescentOptimizer
)时设置了可选标志,则可以在某种程度上协调更新。但是请注意,此处的锁定仅提供两个并发更新的互斥,并且(如上所述)读取不获取锁定;锁定不会在整个更新集中提供原子性。(相比之下,在同步训练中,类似的实用程序
tf.train.SyncReplicasOptimizer
将确保所有工作人员都能读取每个模型参数的相同最新值;并且确保将同步步骤的所有更新汇总后再应用于为此,工作人员通过屏障进行同步,屏障在发送梯度更新后进入,在汇总更新应用于所有变量后退出。 -
-
分布式Tensorflow:CreateSession仍在等待
2021-01-29 关注 0 浏览105 1答案
-
Tensorflow:在分布式培训中使用参数服务器
2021-01-29 关注 0 浏览85 1答案
-
分布式锁和分布式事务如何处理
2021-09-18 关注 0 浏览411 1答案
-
Zookeeper 如何实现分布式锁?
2020-11-26 关注 0 浏览752 1答案
-
如何使用Redis创建分布式锁?
2021-02-01 关注 0 浏览206 1答案
-
分布式幂等性如何设计?
2021-09-18 关注 0 浏览141 1答案
-
redis如何实现分布式锁?
2022-04-13 关注 0 浏览60 1答案
-
如何使用 redis 来实现分布式锁?
2022-09-21 关注 0 浏览13 2答案
-
redis如何实现分布式锁?
2021-12-15 关注 0 浏览165 1答案
-
redis分布式锁如何实现?
2022-07-21 关注 0 浏览43 1答案