IBM高級研發工程師武維:如何分散式訓練深度學習模型?
AI 研習社按:隨著深度學習神經網路規模越來越大,訓練一個深度神經網路(Deep Neural Networks, DNNs)往往需要幾天甚至幾周的時間。為了加快學習速度,經常需要分散式的 CPU/GPU 集群來完成整個訓練。本文就就來為大家簡單簡單介紹一下如何進行分散式訓練深度學習模型。
在近期 AI 研習社的線上公開課上,來自 IBM 系統部研發工程師武維博士為大家做了一期主題為「深度學習中的分散式訓練」的在線分享,錯過了直播的同學們如果看了本文有疑惑之處還可以到雷鋒網(公眾號:雷鋒網) AI 慕課學院觀看視頻回放(進入原文閱讀觀看視頻回放)。
武維,IBM 系統部研發工程師,曾就職於華為大數據產品部及 IBM 中國研究院,擔任系統工程師/研究員;西安交通大學系統工程博士,目前主要研發方向為深度學習中的分散式訓練框架與模型。
以下是雷鋒網對視頻直播內容做的簡要回顧:
分享提綱:
為什麼要分散式訓練深度學習模型及分散式TensorFlow架構。
TensorFlow圖內複製和圖間複製。
深度學習模型非同步訓練和同步訓練。
Case Study:如何把單機模型分散式化。
分散式模型訓練性能介紹。
分享內容:
大家好,我是武維,今天分享的第一部分介紹一下為什麼要採用分散式訓練以及分散式 TensorFlow 的架構,第二部分講 TensorFlow 圖內複製和圖間複製,第三部分是關於分散式訓練中的同步訓練和非同步訓練的簡要介紹。第四部分是關於如何把單機模型分散式化成分散式模型,第五部分是關於分散式訓練的性能介紹。
為什麼要採用分散式訓練呢,分散式訓練主要處理什麼問題,以及如何處理的?
下圖是關於TPU架構數據中心的圖
第一個原因,是增加訓練的吞吐量;第二個原因是是針對大模型訓練,大模型通常在一個設備中放不下。
下面左圖中的橫坐標可以認為是 GPU 個數,縱坐標為處理圖片的速度。
針對大模型怎麼去訓練?現在的辦法是把模型拆解到不同的GPU卡裡面,每個GPU卡裡面訓練一部分,這樣就可以把一個大模型分散式訓練起來。
如何實現這個流程
左邊是TensorFlow的一個基本的運行流程。
TensorFlow 的發展過程
分散式TensorFlow架構,它的架構是基於Master 和 Slaver的架構。
以上是從master 和slaver 的角度講深度學習分散式架構,下面從worker 的角度來看:
深度學習首先要訓練參數,在分散式裡面會把參數存放在參數伺服器,如果 worker 需要運算的話,首先從參數伺服器讀取參數到到 CPU 上。目前來說,大多數的深度學習訓練都是在 GPU 設備上進行的,所以需要把讀取的數據複製到 GPU 上,GPU 就可以從左往右開始運算。最後通過求導找到變數所對應的梯度,然後在將梯度複製到機器上所對應的的 CPU 上,CPU 再通過網路通信把他發送給參數伺服器,這是從整個 worker 角度去看分散式架構。
TensorFlow 在分散式訓練裡面有兩個比較重要的概念分別是「圖內複製」和「圖間複製」。分散式訓練意味著有一個集群,先定義一個分散式集群。下面是圖內複製,這種情況適合單機多卡。
如果是多台計算機的時候,分發數據帶來的數據瓶頸就會比較大,如果採用圖內複製,數據傳輸會產生瓶頸。這個時候需要用圖間複製,兩個圖可以中間共享變數,解決了訓練數據分發的問題,這種方式適用於多機多卡訓練。圖間複製有多個客戶端,圖內複製只有一個客戶端。
TensorFlow 封裝了高級 API,會自動把參數部署到參數伺服器上,把運算操作設定到 worker 上,這些就實現了一份代碼可在多個 worker 上運行,簡化了客戶端程序的編寫。
如何分散式尋找最優W?同步訓練和非同步訓練有什麼區別?
隨機梯度下降法:第一個式子數值求偏導,計算量太大,不實際。通常用微積分求導,解析解。
分散式隨機梯度下降法
非同步訓練過程:非同步訓練為TensorFlow上每個節點上的任務為獨立訓練方式,不需要和其他節點在參數伺服器上同步梯度。
同步訓練過程:同步訓練需要和其他節點在參數伺服器上Reduce梯度。
第四部分是如何編寫分散式訓練模型示例,大家可以觀看視頻回放。
下圖是單機版線性回歸模型示例
第五部分是分散式訓練的性能比較
評價指標通常分為模型方面和平台方面。在模型方面常用指標是:準確率、召回率、AP等。平台方面
主要看吞吐量、加速比。
非同步訓練的吞吐量比同步訓練好,所以非同步訓練要比同步訓練的快。
同步演算法和非同步演算法的比較
以上就是本次分享的主要內容,代碼實現部分建議同學們直接觀看回放視頻,也可關注嘉賓武維的GitHub地址。
TAG:AI研習社 |