0

我一直在研究 Tensorflow 图间同步训练应用程序。同步训练由 SyncReplicasOptimizerV2 类实现。从SyncReplicasOptimizerV2 类的文档中,我了解到一组梯度队列和一个令牌队列是为同步而创建的。

我在想

  1. 这些队列位于哪里,主要工作任务或 ps 任务?如果梯度队列是主要工作人员,据我所知,主要工作人员任务还必须处理检查点、初始化、摘要......
  2. 这个单一的首席工作者任务容易成为性能瓶颈吗?
  3. 不同的工作任务(除了负责人)之间是否有任何网络通信,如果是,网络通信的存在是什么?

PS:我所有的问题都是在进行图间复制训练的场景中,每个任务都在不同的机器上。

4

1 回答 1

1

首先,同步训练的新实现,在 中tf.train.SyncReplicasOptimizerV2,实际上并没有为变量使用一组队列。它使用了一种更高效的有状态对象,称为“条件累加器”,它避免了将未聚合的部分梯度存储在内存中,并改善了在某些具有陈旧梯度的极端情况下的行为。

  1. 每个变量的条件累加器与该变量位于同一设备上,通常位于 PS 任务()上;因此,许多条件累加器将根据用于共享变量的相同策略进行分片。用于同步的令牌队列,工作人员在开始下一步之前阻塞在该队列上,与全局步骤变量在同一设备上创建,这通常也是单个 PS 任务()。

  2. 通常,主工任务协调同步培训所要做的工作很少。执行同步训练时,没有额外的数据流经主工人(在典型设置中,例如使用tf.traing.replica_device_setter()将设备分配给变量)。

  3. 同步训练不会产生任何额外的工作人员之间的网络流量。当然,您可以选择将模型的不同部分放在不同的工作人员上进行模型并行训练,在这种情况下,TensorFlow 会添加适当的通信。但是,我们常用同步训练的图像模型(如 Inception)不需要模型并行,在单个 GPU 上运行效率更高。

于 2016-12-05T16:42:16.597 回答