2016-10-25 70 views
1

我正在编写代码以在具有16个GPU的32个主机的集群中运行分布式同步训练。在发送给参数服务器之前对主机进行参数平均

我阅读本教程:https://www.tensorflow.org/versions/r0.8/how_tos/distributed/index.html与此示例代码:https://github.com/tensorflow/models/tree/master/inception

似乎都建议运行GPU每一个工人,并使用SyncReplicaOptimizer运行同步训练。

如果我这样做了,在每一步之后,每个PS将接收来自32 * 16个工作人员的参数子集的梯度​​,对吗?

在将平均梯度发送到参数服务器之前,是否可以平均每台主机中16个GPU的梯度?这样每个PS只需要接收32组渐变而不是32 * 16。

如果可以做到这一点,是否有示例代码的地方如何做到这一点?

回答

1

可以这样做,官方cifar10_multi_gpu_train.py示例显示如何平均在多个GPU上计算出的梯度并将它们保存在单个主机上的RAM中。然后,您可以将其与sync_replicas结合使用以获取RAM内变量并将它们汇总在主机之间