我编写代码以在具有32个主机的群集中运行分布式同步训练,每个主机具有16个GPU。
我阅读了本教程:https://www.tensorflow.org/versions/r0.8/how_tos/distributed/index.html以及此示例代码:https://github.com/tensorflow/models/tree/master/inception
两者似乎都建议为每个GPU运行一个worker并使用SyncReplicaOptimizer来运行同步训练。
如果我这样做,在每一步之后,每个PS将接收来自32 * 16工人的参数子集的渐变,对吗?
在将平均梯度发送到参数服务器之前,是否可以平均每个主机中16个GPU的梯度?这样每个PS只需要接收32组渐变而不是32 * 16。
如果可以这样做,是否有关于如何执行此操作的示例代码?
答案 0 :(得分:1)
这是可能的,官方cifar10_multi_gpu_train.py
示例显示了如何平均在多个GPU上计算的梯度并将它们保存在单个主机上的RAM中。然后,您可以将它与sync_replicas结合使用以获取RAM变量并在主机之间将它们聚合在一起