2016-06-09 75 views

回答

23

這取決於你從哪個角度看它。在任何多重設置中,無論是多GPU還是多機器,您都需要決定如何在並行資源之間分配計算。在單節點多GPU設置中,有兩個非常合理的選擇:

(1)模型內並行性。如果一個模型具有長而獨立的計算路徑,那麼您可以將模型分割到多個GPU中,並且每個計算都是其中的一部分。這需要仔細瞭解模型和計算依賴關係。

(2)複製式培訓。啓動模型的多個副本,訓練他們,然後同步他們的學習(應用於他們的權重&偏差的漸變)。

我們的released Inception model在自述文件中有一些很好的圖表,顯示了多GPU和分佈式培訓如何工作。在多GPU設置中,通常通過將權重存儲在CPU(以及在其連接的DRAM中)來同步更新模型通常是最好的。但在多機設置中,我們經常使用單獨的「參數服務器」來存儲和傳播權重更新。要將其擴展到大量副本,可以在多個參數服務器之間分割參數。

多GPU和參數的服務器,你會發現自己使用的結構,如with tf.device('/gpu:1')要更小心設備配置,或放置重物使用tf.train.replica_device_setter分配它/job:ps/job:worker參數服務器上。通常,在一臺機器上對一堆GPU進行培訓要高效得多 - 它需要16個以上的分佈式GPU才能在一臺機器上實現8個GPU的性能 - 但分佈式培訓可以讓您擴展到甚至更大的數量,並利用更多的CPU。

+0

非常感謝您的解釋! – xyd

+0

啓動鏈接已損壞。 [Here](https://github.com/tensorflow/models/blob/16e4679834e1bf3e805703b197d377e35504fa09/tutorials/image/cifar10/cifar10_multi_gpu_train.py)是另一個例子。 – Albert

0

直到最近,還沒有張量流的開源集羣版本 - 只有零個或更多GPU的單個機器。 新版本v0.9可能會或可能不會改變事物。 原始發佈文檔(2015年10月)中的文章顯示Google具有基於羣集的解決方案 - 但他們尚未開源。

這裏是什麼whitepaper說:

3.2多設備執行一旦系統具有多個設備,有兩個主要的併發症:決定哪些設備放置計算爲圖表中的每個節點,並然後管理這些 放置決定所隱含的跨設備邊界的所需數據通信。本小節討論這兩個問題

+0

感謝您的回答!然而,他們宣佈他們發佈了分佈式tensorflow與他們的v0.8,他們有一個教程頁面:https://www.tensorflow.org/versions/r0.8/how_tos/distributed/index.html。那不是真正的分佈式張量流? – xyd

+0

這是個好消息! - 讓我們希望有人能夠在這個問題上接近誰是「炙手可熱」的。 – GavinBrelstaff

相關問題