深度學習TensorFlow如何使用多GPU並行模式?
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。
本文出自 “中科院計算所培訓” 博客,謝絕轉載!
深度學習TensorFlow如何使用多GPU並行模式?