0
本文作者: 楊文 | 2018-01-30 10:47 |
雷鋒網(wǎng)AI研習(xí)社按:隨著深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)規(guī)模越來(lái)越大,訓(xùn)練一個(gè)深度神經(jīng)網(wǎng)絡(luò)(Deep Neural Networks, DNNs)往往需要幾天甚至幾周的時(shí)間。為了加快學(xué)習(xí)速度,經(jīng)常需要分布式的 CPU/GPU 集群來(lái)完成整個(gè)訓(xùn)練。本文就就來(lái)為大家簡(jiǎn)單簡(jiǎn)單介紹一下如何進(jìn)行分布式訓(xùn)練深度學(xué)習(xí)模型。
在近期雷鋒網(wǎng) AI 研習(xí)社的線上公開課上,來(lái)自 IBM 系統(tǒng)部研發(fā)工程師武維博士為大家做了一期主題為「深度學(xué)習(xí)中的分布式訓(xùn)練」的在線分享,錯(cuò)過(guò)了直播的同學(xué)們?nèi)绻戳吮疚挠幸苫笾庍€可以到雷鋒網(wǎng) AI 慕課學(xué)院觀看視頻回放。
以下是雷鋒網(wǎng)對(duì)視頻直播內(nèi)容做的簡(jiǎn)要回顧:
武維,IBM 系統(tǒng)部研發(fā)工程師,曾就職于華為大數(shù)據(jù)產(chǎn)品部及 IBM 中國(guó)研究院,擔(dān)任系統(tǒng)工程師/研究員;西安交通大學(xué)系統(tǒng)工程博士,目前主要研發(fā)方向?yàn)樯疃葘W(xué)習(xí)中的分布式訓(xùn)練框架與模型。
分享提綱:
為什么要分布式訓(xùn)練深度學(xué)習(xí)模型及分布式TensorFlow架構(gòu)。
TensorFlow圖內(nèi)復(fù)制和圖間復(fù)制。
深度學(xué)習(xí)模型異步訓(xùn)練和同步訓(xùn)練。
Case Study:如何把單機(jī)模型分布式化。
分布式模型訓(xùn)練性能介紹。
分享內(nèi)容:
大家好,我是武維,今天分享的第一部分介紹一下為什么要采用分布式訓(xùn)練以及分布式 TensorFlow 的架構(gòu),第二部分講 TensorFlow 圖內(nèi)復(fù)制和圖間復(fù)制,第三部分是關(guān)于分布式訓(xùn)練中的同步訓(xùn)練和異步訓(xùn)練的簡(jiǎn)要介紹。第四部分是關(guān)于如何把單機(jī)模型分布式化成分布式模型,第五部分是關(guān)于分布式訓(xùn)練的性能介紹。
為什么要采用分布式訓(xùn)練呢,分布式訓(xùn)練主要處理什么問(wèn)題,以及如何處理的?
下圖是關(guān)于TPU架構(gòu)數(shù)據(jù)中心的圖
第一個(gè)原因,是增加訓(xùn)練的吞吐量;第二個(gè)原因是是針對(duì)大模型訓(xùn)練,大模型通常在一個(gè)設(shè)備中放不下。
下面左圖中的橫坐標(biāo)可以認(rèn)為是 GPU 個(gè)數(shù),縱坐標(biāo)為處理圖片的速度。
針對(duì)大模型怎么去訓(xùn)練?現(xiàn)在的辦法是把模型拆解到不同的GPU卡里面,每個(gè)GPU卡里面訓(xùn)練一部分,這樣就可以把一個(gè)大模型分布式訓(xùn)練起來(lái)。
如何實(shí)現(xiàn)這個(gè)流程
左邊是TensorFlow的一個(gè)基本的運(yùn)行流程。
TensorFlow 的發(fā)展過(guò)程
分布式TensorFlow架構(gòu),它的架構(gòu)是基于Master 和 Slaver的架構(gòu)。
以上是從master 和slaver 的角度講深度學(xué)習(xí)分布式架構(gòu),下面從worker 的角度來(lái)看:
深度學(xué)習(xí)首先要訓(xùn)練參數(shù),在分布式里面會(huì)把參數(shù)存放在參數(shù)服務(wù)器,如果 worker 需要運(yùn)算的話,首先從參數(shù)服務(wù)器讀取參數(shù)到到 CPU 上。目前來(lái)說(shuō),大多數(shù)的深度學(xué)習(xí)訓(xùn)練都是在 GPU 設(shè)備上進(jìn)行的,所以需要把讀取的數(shù)據(jù)復(fù)制到 GPU 上,GPU 就可以從左往右開始運(yùn)算。最后通過(guò)求導(dǎo)找到變量所對(duì)應(yīng)的梯度,然后在將梯度復(fù)制到機(jī)器上所對(duì)應(yīng)的的 CPU 上,CPU 再通過(guò)網(wǎng)絡(luò)通信把他發(fā)送給參數(shù)服務(wù)器,這是從整個(gè) worker 角度去看分布式架構(gòu)。
TensorFlow 在分布式訓(xùn)練里面有兩個(gè)比較重要的概念分別是「圖內(nèi)復(fù)制」和「圖間復(fù)制」。分布式訓(xùn)練意味著有一個(gè)集群,先定義一個(gè)分布式集群。下面是圖內(nèi)復(fù)制,這種情況適合單機(jī)多卡。
如果是多臺(tái)計(jì)算機(jī)的時(shí)候,分發(fā)數(shù)據(jù)帶來(lái)的數(shù)據(jù)瓶頸就會(huì)比較大,如果采用圖內(nèi)復(fù)制,數(shù)據(jù)傳輸會(huì)產(chǎn)生瓶頸。這個(gè)時(shí)候需要用圖間復(fù)制,兩個(gè)圖可以中間共享變量,解決了訓(xùn)練數(shù)據(jù)分發(fā)的問(wèn)題,這種方式適用于多機(jī)多卡訓(xùn)練。圖間復(fù)制有多個(gè)客戶端,圖內(nèi)復(fù)制只有一個(gè)客戶端。
TensorFlow 封裝了高級(jí) API,會(huì)自動(dòng)把參數(shù)部署到參數(shù)服務(wù)器上,把運(yùn)算操作設(shè)定到 worker 上,這些就實(shí)現(xiàn)了一份代碼可在多個(gè) worker 上運(yùn)行,簡(jiǎn)化了客戶端程序的編寫。
如何分布式尋找最優(yōu)W?同步訓(xùn)練和異步訓(xùn)練有什么區(qū)別?
隨機(jī)梯度下降法:第一個(gè)式子數(shù)值求偏導(dǎo),計(jì)算量太大,不實(shí)際。通常用微積分求導(dǎo),解析解。
分布式隨機(jī)梯度下降法
異步訓(xùn)練過(guò)程:異步訓(xùn)練為TensorFlow上每個(gè)節(jié)點(diǎn)上的任務(wù)為獨(dú)立訓(xùn)練方式,不需要和其他節(jié)點(diǎn)在參數(shù)服務(wù)器上同步梯度。
同步訓(xùn)練過(guò)程:同步訓(xùn)練需要和其他節(jié)點(diǎn)在參數(shù)服務(wù)器上Reduce梯度。
第四部分是如何編寫分布式訓(xùn)練模型示例,大家可以觀看視頻回放。
下圖是單機(jī)版線性回歸模型示例
第五部分是分布式訓(xùn)練的性能比較
評(píng)價(jià)指標(biāo)通常分為模型方面和平臺(tái)方面。在模型方面常用指標(biāo)是:準(zhǔn)確率、召回率、AP等。平臺(tái)方面
主要看吞吐量、加速比。
異步訓(xùn)練的吞吐量比同步訓(xùn)練好,所以異步訓(xùn)練要比同步訓(xùn)練的快。
同步算法和異步算法的比較
以上就是本次分享的主要內(nèi)容,代碼實(shí)現(xiàn)部分建議同學(xué)們直接觀看回放視頻,也可關(guān)注嘉賓武維的GitHub地址。
微信公眾號(hào):「AI 研習(xí)社」長(zhǎng)期提供免費(fèi)視頻直播課程,歡迎關(guān)注!
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。