AI多种并行算法
AI多種并行算法
并行模型
? 模型并行( model parallelism ):分布式系統(tǒng)中的不同機(jī)器(GPU/CPU等)負(fù)責(zé)網(wǎng)絡(luò)模型的不同部分 —— 例如,神經(jīng)網(wǎng)絡(luò)模型的不同網(wǎng)絡(luò)層被分配到不同的機(jī)器,或者同一層內(nèi)部的不同參數(shù)被分配到不同機(jī)器;[14]
? 數(shù)據(jù)并行( data parallelism ):不同的機(jī)器有同一個模型的多個副本,每個機(jī)器分配到不同的數(shù)據(jù),然后將所有機(jī)器的計算結(jié)果按照某種方式合并。
? 當(dāng)然,還有一類是混合并行(Hybrid parallelism),在一個集群中,既有模型并行,又有數(shù)據(jù)并行,例如,可以在同一臺機(jī)器上采用模型并行化(在GPU之間切分模型),在機(jī)器之間采用數(shù)據(jù)并行化。
數(shù)據(jù)并行
數(shù)據(jù)并行化式的分布式訓(xùn)練,在每個工作節(jié)點上,存儲一個模型的備份,在各臺機(jī)器上處理數(shù)據(jù)集的不同部分。數(shù)據(jù)并行化式訓(xùn)練方法,需要組合各個工作節(jié)點的結(jié)果,在節(jié)點之間同步模型參數(shù)。各種方法之間的主要區(qū)別在于:
- 參數(shù)平均法 vs. 更新式方法
- 同步方法 vs. 異步方法
- 中心化同步 vs. 分布式同步
參數(shù)平均 model averaging
參數(shù)平均是最簡單的一種數(shù)據(jù)并行化。若采用參數(shù)平均法,訓(xùn)練的過程如下所示: - 基于模型的配置隨機(jī)初始化網(wǎng)絡(luò)模型參數(shù)
- 將當(dāng)前這組參數(shù)分發(fā)到各個工作節(jié)點
- 在每個工作節(jié)點,用數(shù)據(jù)集的一部分?jǐn)?shù)據(jù)進(jìn)行訓(xùn)練
- 將各個工作節(jié)點的參數(shù)的均值作為全局參數(shù)值
- 若還有訓(xùn)練數(shù)據(jù)沒有參與訓(xùn)練,則繼續(xù)從第二步開始
上述第二步到第四步的過程如下圖所示。在圖中,W表示神經(jīng)網(wǎng)絡(luò)模型的參數(shù)(權(quán)重值和偏置值)。下標(biāo)表示參數(shù)的更新版本,需要在各個工作節(jié)點加以區(qū)分。
參數(shù)平均法在數(shù)學(xué)意義上,等同于用單個機(jī)器進(jìn)行訓(xùn)練;每個工作節(jié)點處理的數(shù)據(jù)量是相等的。(實際上如果采用momentum等技術(shù),不是嚴(yán)格相等的)
假設(shè)該集群有n個工作節(jié)點,每個節(jié)點處理m個樣本,總共是對nxm個樣本求均值。如果在單臺機(jī)器上處理所有nxm個樣本,學(xué)習(xí)率設(shè)置為α,權(quán)重更新的方程為:
假設(shè)把樣本分配到n個工作節(jié)點,每個節(jié)點在m個樣本上進(jìn)行學(xué)習(xí)(節(jié)點1處理樣本1,……,m,節(jié)點2處理樣本m+1,……,2m,以此類推),得到:
參數(shù)平均法聽上去非常簡單,但事實上并沒有看上去這么容易。
首先,應(yīng)該如何求平均值?簡單將每輪迭代之后的參數(shù)進(jìn)行平均。一旦這樣實現(xiàn)了,會發(fā)現(xiàn)此方法在計算之外的額外開銷非常巨大;網(wǎng)絡(luò)通信和同步的開銷許就能抵消額外機(jī)器帶來的效率收益。因此,參數(shù)平均法通常有一個大于1的平均周期averaging period(就每個節(jié)點的minibatch而言)。如果求均值周期太長,每個節(jié)點得到的局部參數(shù)更多樣化,求均值之后的模型效果非常差。想法是N個局部最小值的均值并不保證就是局部最小:
什么樣的平均的周期算是過高呢?這個問題還沒有結(jié)論性的回答,和其它超參數(shù)攪和在一起之后變得更為復(fù)雜,比如學(xué)習(xí)率、minibatch的大小,和工作節(jié)點的數(shù)量。有些初步的研究結(jié)論,建議平均的周期為每10~20個minibatch計算一次(每個工作節(jié)點),能夠取得比較好的效果。隨著平均的周期延長,模型的準(zhǔn)確率則隨之下降。
另一類額外的復(fù)雜度則是與優(yōu)化算法相關(guān),比如adagrad,momentum和RMSProp。這些優(yōu)化方法,在神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過程中,能夠顯著提升收斂的特性。這些updater都有中間狀態(tài)(通常每個模型參數(shù)有1或2個狀態(tài)值)—— 需要對這些狀態(tài)值求均值嗎?對每個節(jié)點的中間狀態(tài)求均值可以加快收斂的速度,犧牲的代價則是兩倍(或者多倍)增加網(wǎng)絡(luò)的傳輸數(shù)據(jù)量。有些研究在參數(shù)服務(wù)器的層面應(yīng)用類似的“updater”機(jī)制,而不僅僅在每個工作節(jié)點。
參考鏈接:
https://blog.csdn.net/xbinworld/article/details/74781605
總結(jié)
- 上一篇: LLVM与Clang局部架构与语法分析
- 下一篇: 自动微分原理与示例