我一直在研究Tensorflow图之间的同步训练应用程序。同步训练由SyncReplicasOptimizerV2类实现。从class SyncReplicasOptimizerV2的文档中,我了解到一组梯度队列和一个令牌队列被创建用于同步。
我想知道(1)这些队列在哪里,主要工作人员任务还是ps任务?如果渐变队列是主要工作人员,据我所知,主要工作人员任务也有处理检查点,初始化,摘要...(2)这个单一的主要工作人员任务是否容易成为性能瓶颈? (3)在不同的工作任务(主管除外)之间是否有任何网络通信,如果是,网络通信是什么?
PS:我所有的问题都在于进行图形复制培训的情景,每个任务都在不同的机器上。
提前致谢。
答案 0 :(得分:1)
首先,tf.train.SyncReplicasOptimizerV2
中的同步训练的新实现实际上并没有为变量使用一组队列。它使用一个更有效的有状态对象,称为“条件累加器”,它避免将未聚合的部分梯度存储在内存中,并改善了一些具有陈旧渐变的极端情况下的行为。
每个变量的条件累加器与该变量位于同一设备上,该变量通常位于PS任务(source)上;因此,许多条件累加器将根据用于共享变量的相同策略进行分片。工作人员在开始下一步之前阻塞的同步令牌队列在与全局步骤变量相同的设备上创建,该变量通常也是单个PS任务(source)。
< / LI>通常,主要工作人员必须完成的协调同步培训的工作量很小。在执行同步培训时,没有其他数据流经主要工作人员(在典型设置中,使用例如tf.traing.replica_device_setter()
将设备分配给变量)。
同步培训不会创建任何额外的工作人员之间的网络流量。当然,您可以选择将模型的不同部分放在不同的工作人员上进行模型并行训练,在这种情况下,TensorFlow将添加适当的通信。但是,我们通常使用同步训练的图像模型(例如Inception)不需要模型并行性,并且在单个GPU上运行效率更高。