2016-10-25 18 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內變量並將它們彙總在主機之間