秦智勇
摘要:
建立在大型數(shù)據(jù)集上的現(xiàn)代神經(jīng)網(wǎng)絡(luò)體系結(jié)構(gòu)在各個(gè)應(yīng)用領(lǐng)域取得不錯(cuò)的效果,雖然硬件設(shè)備性能不斷提升,但是在一臺(tái)機(jī)器上進(jìn)行網(wǎng)絡(luò)模型訓(xùn)練可能會(huì)花費(fèi)很長時(shí)間。本文介紹了如何使用并行計(jì)算從而實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)的高效分布式訓(xùn)練,以望為之后的研究者提供一定的參考。
關(guān)鍵詞:
分布式;計(jì)算并行;數(shù)據(jù)并行;模型并行
中圖分類號(hào):
TP183
文獻(xiàn)標(biāo)識(shí)碼:
A
文章編號(hào):
1672-9129(2020)15-0032-01
分布式機(jī)器學(xué)習(xí)的目標(biāo)是使機(jī)器學(xué)習(xí)算法通過使用計(jì)算機(jī)集群來從大數(shù)據(jù)中訓(xùn)練具有良好性能的大模型,為此,需要將計(jì)算任務(wù),訓(xùn)練數(shù)據(jù)和模型放入分布式內(nèi)存中,在匹配硬件資源和數(shù)據(jù)模型規(guī)模后,進(jìn)行分布式訓(xùn)練,分布式訓(xùn)練可分為并行計(jì)算,數(shù)據(jù)并行模式和模型并行模式。
1計(jì)算并行分布式訓(xùn)練
計(jì)算并行分布式訓(xùn)練中每個(gè)節(jié)點(diǎn)都有權(quán)讀取和寫入內(nèi)存中的數(shù)據(jù),因此在這樣的系統(tǒng)中實(shí)現(xiàn)分布式學(xué)習(xí)算法,我們不必特殊處理數(shù)據(jù)和模型,我們只需要關(guān)注如何使用適當(dāng)?shù)膬?yōu)化算法即可,這種工作節(jié)點(diǎn)共享內(nèi)存的并行模式稱為計(jì)算并行。
2模型并行分布式訓(xùn)練
如果訓(xùn)練的模型太大而不能存儲(chǔ)在本地存儲(chǔ)中,則需要對(duì)其進(jìn)行切割劃分,此時(shí)可以根據(jù)數(shù)據(jù)的緯度將數(shù)據(jù)劃分在不同的工作節(jié)點(diǎn)上,對(duì)于高度非線性的神經(jīng)網(wǎng)絡(luò),每個(gè)工作節(jié)點(diǎn)都無法獨(dú)立地進(jìn)行參數(shù)形成和更新,需要與其它節(jié)點(diǎn)相結(jié)合。
2.1線性模型。根據(jù)維度將模型和數(shù)據(jù)均勻劃分到不同的工作節(jié)點(diǎn),采用坐標(biāo)下降法對(duì)每個(gè)工作節(jié)點(diǎn)進(jìn)行優(yōu)化,對(duì)于線性模型,每個(gè)變量的目標(biāo)函數(shù)是可分離的,即特定維度的更新或梯度參數(shù)更新僅取決于與目標(biāo)函數(shù)值相關(guān)的一些全局變量,而不取決于其他維度的參數(shù)值。要更新本地參數(shù),我們只需要對(duì)這些全局變量進(jìn)行通信而無需與其他節(jié)點(diǎn)的模型參數(shù)通信。
2.2神經(jīng)網(wǎng)絡(luò)。由于神經(jīng)網(wǎng)絡(luò)的強(qiáng)非線性,參數(shù)之間的依賴性遠(yuǎn)遠(yuǎn)大于線性模型。它不能輕易共享,我們也不能使用諸如線性模型之類的功能來通過中間全局變量并行實(shí)現(xiàn)高效模型。但是,神經(jīng)網(wǎng)絡(luò)的層級(jí)也給并行模型帶來了一些便利,例如,可以通過神經(jīng)網(wǎng)絡(luò)的網(wǎng)絡(luò)層進(jìn)行橫向或縱向的劃分,通信內(nèi)容和通信量因不同的分區(qū)模式而有所不同。
2.3橫向按層劃分。當(dāng)神經(jīng)網(wǎng)絡(luò)的層數(shù)很多時(shí),有一種簡單且有效的并行方式是將整個(gè)神經(jīng)網(wǎng)絡(luò)橫向地劃分為k個(gè)部分,每個(gè)工作節(jié)點(diǎn)承擔(dān)一層或多層計(jì)算任務(wù),如果某個(gè)計(jì)算節(jié)點(diǎn)沒有計(jì)算所需的信息,它可以向其他工作節(jié)點(diǎn)請(qǐng)求相應(yīng)的信息,在橫向劃分模型時(shí),我們通常會(huì)結(jié)合每一層中的節(jié)點(diǎn)數(shù),以盡可能地平衡每個(gè)工作節(jié)點(diǎn)的計(jì)算量。
2.4縱向跨層劃分。除了寬度之外,神經(jīng)網(wǎng)絡(luò)還具有深度。因此,除了橫向劃分網(wǎng)絡(luò)層之外,還可以縱向劃分網(wǎng)絡(luò)層,即每個(gè)層的包含的節(jié)點(diǎn)可以分配給不同的工作節(jié)點(diǎn),工作節(jié)點(diǎn)存儲(chǔ)并更新這些縱向的網(wǎng)絡(luò)層參數(shù),在正向和反向傳輸中,當(dāng)需要激活函數(shù)和子誤差傳播值時(shí),可以向?qū)?yīng)的工作節(jié)點(diǎn)來請(qǐng)求更新這些參數(shù),橫向劃分網(wǎng)絡(luò)和縱向劃分網(wǎng)絡(luò)在傳輸量和傳輸時(shí)間上存在著一定的差異,在真實(shí)的應(yīng)用場景中,可以根據(jù)具體的網(wǎng)絡(luò)結(jié)構(gòu)選擇合適的網(wǎng)絡(luò)劃分方法,一般情況下,當(dāng)每一層的神經(jīng)元數(shù)量少,層數(shù)很大,可以考慮橫向分割網(wǎng)絡(luò)。相反,如果每層中的神經(jīng)元數(shù)量大而層數(shù)少,則應(yīng)考慮縱向劃分網(wǎng)絡(luò)。如果神經(jīng)網(wǎng)絡(luò)層的數(shù)量和每層中神經(jīng)元的數(shù)量大,則可以需要將橫向劃分網(wǎng)絡(luò)與縱向劃分網(wǎng)絡(luò)相結(jié)合,以發(fā)揮網(wǎng)絡(luò)劃分的最佳性能。
2.5模型隨機(jī)并行。由于橫向和縱向劃分網(wǎng)絡(luò)的成本太大,為此提出了針對(duì)大型復(fù)雜神經(jīng)網(wǎng)絡(luò)的隨機(jī)分割方法,它的主要原理是發(fā)現(xiàn)神經(jīng)網(wǎng)絡(luò)具有一定程度的冗余度,可以找到更小的子網(wǎng)絡(luò)在效果差不多的情況下代替原有網(wǎng)絡(luò),這樣就可以根據(jù)一定的條件在原始網(wǎng)絡(luò)中選擇骨架網(wǎng)絡(luò),并將其存儲(chǔ)在每個(gè)工作節(jié)點(diǎn)中作為公共子網(wǎng)。除了骨架網(wǎng)絡(luò),每個(gè)工作節(jié)點(diǎn)還隨機(jī)選擇一些其他節(jié)點(diǎn)來存儲(chǔ)信息來代表骨架網(wǎng)絡(luò)之外的信息,定期地隨機(jī)選擇骨架網(wǎng)絡(luò),并且每次選擇的網(wǎng)絡(luò)節(jié)點(diǎn)也是隨機(jī)的。
3數(shù)據(jù)并行
3.1參數(shù)平均。數(shù)據(jù)并行是參數(shù)平均最簡單有效的方法,它的主要步驟分為以下五步:第一步是根據(jù)模型的網(wǎng)絡(luò)結(jié)構(gòu)隨機(jī)初始化網(wǎng)絡(luò)模型的參數(shù)。第二步是將當(dāng)前參數(shù)集分配給每個(gè)工作節(jié)點(diǎn)。第三步,在每個(gè)工作節(jié)點(diǎn)訓(xùn)練部分的數(shù)據(jù)集。第四步,將每個(gè)工作節(jié)點(diǎn)的參數(shù)平均值視為全局參數(shù)值。第五步,如果訓(xùn)練不涉及訓(xùn)練數(shù)據(jù),則從步驟二繼續(xù)。在該方法中,出去計(jì)算成本,額外的成本非常大,網(wǎng)絡(luò)通信和同步的成本可以抵消采用該方法帶來的效率優(yōu)勢(shì),因此,參數(shù)平均方法的平均周期通常大于1。如果平均周期太長,則每個(gè)節(jié)點(diǎn)之間得到的參數(shù)相差十分大,均值后的模型效果非常差。。
3.2異步隨機(jī)梯度下降。如果參數(shù)同步更新,則參數(shù)均值方法相當(dāng)于基于更新的數(shù)據(jù)并行化。非同步的參數(shù)均值方法即是異步隨機(jī)梯度節(jié)點(diǎn)可以花更多的時(shí)間計(jì)算數(shù)據(jù),而不必等待中間參數(shù)計(jì)算的完成,這可以增加分布式系統(tǒng)的數(shù)據(jù)吞吐量。異步隨機(jī)梯度下降的節(jié)點(diǎn)可以更快地從其他節(jié)點(diǎn)接收信息,異步隨機(jī)梯度下降也有一些缺點(diǎn)。當(dāng)節(jié)點(diǎn)計(jì)算梯度值并將其與全局參數(shù)向量合并時(shí),參數(shù)已刷新幾次,此時(shí)的參數(shù)可能是無效的,異步機(jī)器梯度下降的簡單實(shí)現(xiàn)可能會(huì)導(dǎo)致非常嚴(yán)重的梯度值過時(shí)。
3.3分步式異步隨機(jī)梯度下降。分步式異步隨機(jī)梯度下降沒有用中心參數(shù)服務(wù)器,而是使用點(diǎn)對(duì)點(diǎn)參數(shù)傳遞來學(xué)習(xí)數(shù)據(jù)之間的關(guān)系并進(jìn)行更新,壓縮更新量如此之大,從而使網(wǎng)絡(luò)的通信規(guī)模減少了三個(gè)數(shù)量級(jí),具有經(jīng)濟(jì)的優(yōu)勢(shì)。這種方法的缺點(diǎn)是在訓(xùn)練開始時(shí)收斂可能會(huì)出現(xiàn)問題,并且縮減和量化過程這將花費(fèi)一些時(shí)間和引入了其他需要檢查的參數(shù)。。
4總結(jié)
根據(jù)不同的應(yīng)用場景采取相應(yīng)的分布式并行模式以減少訓(xùn)練時(shí)間、降低訓(xùn)練成本和提高訓(xùn)練效果是基于分布式的神經(jīng)網(wǎng)絡(luò)訓(xùn)練研究的重難點(diǎn)。本文介紹了基于分布式的神經(jīng)網(wǎng)絡(luò)訓(xùn)練的相關(guān)原理和方法,如何更好地發(fā)揮分布式訓(xùn)練的優(yōu)點(diǎn)還需要研究者們進(jìn)行進(jìn)一步的探究。
參考文獻(xiàn):
[1]深度學(xué)習(xí)框架Tensorflow的數(shù)據(jù)并行優(yōu)化調(diào)度研究[D].黃文強(qiáng).電子科技大學(xué);2019
[2]深度學(xué)習(xí)框架TensorFlow的高效分布式并行算法研究[D].何馬均.電子科技大學(xué);2019
[3]基于HPC環(huán)境的深度學(xué)習(xí)并行優(yōu)化[J].陳孟強(qiáng),顏?zhàn)咏埽~彥,吳維剛.計(jì)算機(jī)工程與科學(xué).2018(S1)