0
雷鋒網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地址。
微信公眾號:「AI 研習社」長期提供免費視頻直播課程,歡迎關注!
雷峰網原創文章,未經授權禁止轉載。詳情見轉載須知。