深度學習TensorFlow如何使用多GPU並行模式?

shenmanli發表於2017-08-17
TensorFlow可以用單個GPU,加速深度學習模型的訓練過程,但要利用更多的GPU或者機器,需要了解如何並行化地訓練深度學習模型。


常用的並行化深度學習模型訓練方式有兩種:同步模式和非同步模式。


下面將介紹這兩種模式的工作方式及其優劣。


如下圖,深度學習模型的訓練是一個迭代的過程。

在每一輪迭代中,前向傳播演算法會根據當前引數的取值,計算出在一小部分訓練資料上的預測值,然後反向傳播演算法,再根據損失函式計算引數的梯度並更新引數。


非同步模式的訓練流程圖

在並行化地訓練深度學習模型時,不同裝置(GPU或CPU),可以在不同訓練資料上,執行這個迭代的過程,而不同並行模式的區別在於,不同的引數更新方式。


非同步模式的訓練流程


從非同步模式的訓練流程圖中可以看到,在每一輪迭代時,不同裝置會讀取引數最新的取值。
–但因為不同裝置,讀取引數取值的時間不一樣,所以得到的值也有可能不一樣。


根據當前引數的取值,和隨機獲取的一小部分訓練資料,不同裝置各自執行反向傳播的過程,並獨立地更新引數。
–可以認為非同步模式,就是單機模式複製了多份,每一份使用不同的訓練資料進行訓練。


同步模式深度學習訓練


在同步模式下,所有的裝置同時讀取引數的取值,並且當反向傳播演算法完成之後同步更新引數的取值。

單個裝置不會單獨對引數進行更新,而會等待所有裝置都完成反向傳播之後再統一更新引數。


分析


圖中在每一輪迭代時,不同裝置首先統一讀取當前引數的取值,並隨機獲取一小部分資料。

然後在不同裝置上執行反向傳播過程得到在各自訓練資料上引數的梯度。

當所有裝置完成反向傳播的計算之後,需要計算出不同裝置上引數梯度的平均值,最後再根據平均值對引數進行更新。


3多GPU並行


下面將給出具體的TensorFlow程式碼,在一臺機器的多個GPU上並行訓練深度學習模型。

–因為一般來說一臺機器上的多個GPU效能相似,所以在這種設定下,會更多地採用同步模式,訓練深度學習模型。

下面將給出具體的程式碼,在多GPU上訓練深度學習模型解決MNIST問題。

–樣例程式碼將沿用mnist_inference.py程式,來完成神經網路的前向傳播過程。
–新的神經網路訓練程式是mnist_multi_ gpu_train.py


執行樣例

執行MNIST樣例程式時GPU的使用情況

–因為定義的神經網路規模比較小,所以在圖中顯示的GPU使用率不高。

–如果訓練大型的神經網路模型,TensorFlow將會佔滿所有用到的GPU。


相關文章