我想训练具有全批次梯度下降的张量流模型,并并行化多个工人的梯度计算。 每个工作人员应拥有数据的一个子集,并且一个更新步骤应包括
1)工人提取可训练变量的当前值
2)每个工作人员在他的数据份额上计算梯度。这将包括多个小批量操作,这些操作将梯度聚合为局部梯度聚合器。
3)对每个工人的汇总梯度求和并用于更新变量。
这应该是数据并行性的最基本的变体,但它似乎不受tensorflow的支持。
步骤(1)和(2)很容易做到:
但是如何执行步骤(3)?如何让所有人都等到所有工人都完成工作,然后执行更新并开始下一次迭代?
有tf.train.SyncReplicasOptimizers,但这只能确保在更新之前已接收到n个渐变,并且不能区分从不同工作人员接收到的渐变。而且,它没有提供等待“所有”梯度的选项,其中“全部”表示工作人员已经用尽了数据。