分布式张量流中的同步批梯度下降

时间:2018-09-21 12:08:47

标签: python tensorflow distributed-computing

我想训练具有全批次梯度下降的张量流模型,并并行化多个工人的梯度计算。 每个工作人员应拥有数据的一个子集,并且一个更新步骤应包括

1)工人提取可训练变量的当前值

2)每个工作人员在他的数据份额上计算梯度。这将包括多个小批量操作,这些操作将梯度聚合为局部梯度聚合器。

3)对每个工人的汇总梯度求和并用于更新变量。

这应该是数据并行性的最基本的变体,但它似乎不受tensorflow的支持。

步骤(1)和(2)很容易做到:

  • 在每个工作程序上创建本地聚合器变量。
  • 使用tf.data.Dataset.shard为每个工作人员分配数据的子集。
  • 让每个工作人员循环使用其数据份额,计算智能手物并将它们聚合到本地聚合器中。

但是如何执行步骤(3)?如何让所有人都等到所有工人都完成工作,然后执行更新并开始下一次迭代?

tf.train.SyncReplicasOptimizers,但这只能确保在更新之前已接收到n个渐变,并且不能区分从不同工作人员接收到的渐变。而且,它没有提供等待“所有”梯度的选项,其中“全部”表示工作人员已经用尽了数据。

0 个答案:

没有答案