2016-09-18 49 views
5

簡短版本:我們不能將變量存儲在其中一個工作者中而不使用參數服務器嗎?在分佈式張量流學習中使用參數服務器的原因是什麼?

長版本: 我想在張量流中實現神經網絡的同步分佈式學習。我希望每位工作人員在培訓期間都有完整的模型副本。

我讀過distributed tensorflow tutorialcode of distributed training imagenet並沒有得到爲什麼我們需要參數服務器。

我看到它們用於存儲變量的值,而replica_device_setter注意變量在參數服務器之間均勻分佈(可能它做了更多的事情,我無法完全理解代碼)。

問題是:爲什麼我們不使用其中一個工人來存儲變量?我會做到這一點,如果我使用的

with tf.device('/job:worker/task:0/cpu:0'): 

代替

with tf.device(tf.train.replica_device_setter(cluster=cluster_spec)): 

爲Variaibles? 與參數服務器解決方案相比,如果這樣做有缺點嗎?

回答

14

使用參數服務器可以爲您提供更好的網絡利用率,並允許您將模型擴展到更多機器。

一個具體的例子,假設你有250M參數,每個worker需要1秒的時間計算梯度,並且有10個worker。這意味着每個工作人員必須每秒向其他9名工作人員發送/接收1 GB數據,這需要每位工作人員72 Gbps的全雙工網絡容量,這是不切實際的。

更爲現實的,你可以有每個工人10 Gbps的網絡容量。通過使用參數服務器分割8臺機器來防止網絡瓶頸。每個工人機器與每個參數機器通信的參數爲1/8。

0

另一種可能性是使用TensorFlow的一個分佈式的版本,其由在後端使用MPI自動處理在多個節點上的數據分發和執行。

我們最近開發一個這樣的版本在MATEX:https://github.com/matex-org/matex和紙張描述https://arxiv.org/abs/1704.04560

它做同步訓練,並提供了幾個數據集並行讀寫格式。

如果您需要更多幫助,我們將竭誠爲您服務!

相關問題