TensorFlow分布式详解
每次 TensorFlow 運算都被描述成計算圖的形式,允許結構和運算操作配置所具備的自由度能夠被分配到各個分布式節點上。計算圖可以分成多個子圖,分配給服務器集群中的不同節點。
強烈推薦讀者閱讀論文“Large Scale Distributed Deep Networks”,本文的一個重要成果是證明了分布式隨機梯度下降算法(SDG)可以運行,在該算法中,有多個節點在數據分片上并行工作,通過向參數服務器發送更新來異步獨立更新梯度。論文摘要引用如下:實驗揭示了一些關于大規模非凸優化的令人驚喜的結果。首先,很少應用于非凸問題的異步 SGD 在訓練深度網絡方面效果很好,特別是在結合 Adagrad 自適應學習率時。
本文本身的一個照片可以很好地解釋這一點:
另一個值得閱讀的文檔是 TensorFlow 白皮書:《Large-Scale Machine Learning on Heterogeneous Distributed Systems》(Martín Abadi等人,2015年11月)。
考慮其中包含的一些示例,可以在下面的圖片中看見,左側顯示的是TensorFlow代碼片段,右側顯示的是對應的圖表:
圖 2 TensorFlow計算圖示例
通過進行本地計算以及在必要時輕松添加計算圖遠程通信節點,計算圖可以被切分覆蓋多個節點,前面提到的論文中的圖可以很好地解釋這個問題:
圖 3 插入接收/發送節點前后的對比圖
梯度下降和所有主要的優化器算法可以以集中方式(下圖左側)或分布式方式(下圖右側)進行計算,后者包括一個 master 進程,它與多個提供 GPU 和 CPU 的 worker 相連:
圖 4 單機模式和分布式模式結構
分布式計算可以是同步的(所有 worker 同時更新數據塊上的梯度)或異步的(更新不會同時發生),后者通常允許更高的可擴展性,更大的圖計算在最優解的收斂方面表現得更好。以下照片同樣來自 TensorFlow 白皮書,如果想了解更多,有興趣的讀者看看這篇論文:
總結
以上是生活随笔為你收集整理的TensorFlow分布式详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TensorFlow分布式(多GPU和多
- 下一篇: VAE变分自编码器实现