深度学习分布式训练小结
分布式訓(xùn)練本質(zhì)上是為了加快模型的訓(xùn)練速度,面對(duì)較為復(fù)雜的深度學(xué)習(xí)模型以及大量的數(shù)據(jù)。單機(jī)單GPU很難在有限的時(shí)間內(nèi)達(dá)成模型的收斂。這時(shí)候就需要用到分布式訓(xùn)練。
分布式訓(xùn)練又分為模型并行和數(shù)據(jù)并行兩大類(lèi)。
1. 數(shù)據(jù)并行
數(shù)據(jù)并行在于將不同batch的數(shù)據(jù)分別交給不同的GPU來(lái)運(yùn)算。如下圖所示,灰色部分表示數(shù)據(jù),藍(lán)色表示模型。
數(shù)據(jù)并行中的一類(lèi)就是參數(shù)平均,比如將第一個(gè)Batch的256個(gè)數(shù)據(jù)交給第一個(gè)U
第二個(gè)batch的256個(gè)數(shù)據(jù)交給第二個(gè)U
參數(shù)平均就是在他們分別通過(guò)整個(gè)神經(jīng)網(wǎng)絡(luò)計(jì)算出結(jié)果后取平均值,再修改模型中的參數(shù)。這樣實(shí)現(xiàn)實(shí)際上在不考慮多GPU與CPU的通信成本上,與單GPU以batchsize為512來(lái)進(jìn)行訓(xùn)練是一樣的,但因?yàn)橥瑫r(shí)進(jìn)行了兩個(gè)batch的運(yùn)算,運(yùn)算速度在理想情況下是線性增加的。參數(shù)平均同時(shí)也是一個(gè)同步更新的過(guò)程,多個(gè)GPU的運(yùn)算結(jié)果會(huì)統(tǒng)一結(jié)束并計(jì)算平均參數(shù),這在我們使用同算力GPU的時(shí)候可以做到效率最大化。
除了同步更新,我們還有異步隨機(jī)梯度下降。這意味著不同的GPU不需要等待每一個(gè)epoch中所有GPU的運(yùn)算完畢就可以直接更新參數(shù)。這很顯然進(jìn)一步提升了多個(gè)U的效率,因?yàn)槲覀儾辉傩枰WC多個(gè)GPU的同步性,更大加快了模型的收斂。但不可避免地是,由于異步的特點(diǎn),當(dāng)某一個(gè)GPU完成運(yùn)算并更新參數(shù)的時(shí)候,可能這時(shí)候模型中的全局參數(shù)已經(jīng)經(jīng)過(guò)了多次的改變,這可能會(huì)導(dǎo)致絕對(duì)誤差的放大,優(yōu)化過(guò)程可能不穩(wěn)定。
2. 模型并行
說(shuō)完了數(shù)據(jù)并行,我們來(lái)看一下專門(mén)用于優(yōu)化非常復(fù)雜的深度學(xué)習(xí)網(wǎng)絡(luò)的模型并行。與數(shù)據(jù)并行不同的是,這次我們通過(guò)將模型拆分為幾個(gè)小的部分,分別交給多個(gè)GPU來(lái)進(jìn)行運(yùn)算。每次仍然給每個(gè)模型一個(gè)batch的數(shù)據(jù)來(lái)進(jìn)行計(jì)算,將多個(gè)GPU作為節(jié)點(diǎn)。最后將運(yùn)算結(jié)果進(jìn)行合并。實(shí)際上是一種將模型切割為幾個(gè)子模型按順序計(jì)算的過(guò)程。
參考文本 :
【深度學(xué)習(xí)】— 分布式訓(xùn)練常用技術(shù)簡(jiǎn)介
【分布式深度學(xué)習(xí)part1】:神經(jīng)網(wǎng)絡(luò)的分布式訓(xùn)練
總結(jié)
以上是生活随笔為你收集整理的深度学习分布式训练小结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: pip国内加载速度慢解决方法
- 下一篇: 人脸识别经典方法