辜陽(yáng)++楊大為
摘 要:傳統(tǒng)單機(jī)深度學(xué)習(xí)模型的訓(xùn)練耗時(shí),動(dòng)輒花費(fèi)一周甚至數(shù)月的時(shí)間,讓研究者望而卻步,因此深度學(xué)習(xí)并行訓(xùn)練的方法被提出,用來(lái)加速深度學(xué)習(xí)算法的學(xué)習(xí)過(guò)程。文章首先分析了為什么要實(shí)現(xiàn)分布式訓(xùn)練,然后分別介紹了基于模型并行和數(shù)據(jù)并行兩種主要的分布式深度學(xué)習(xí)框架,最后對(duì)兩種不同的分布式深度學(xué)習(xí)框架的優(yōu)缺點(diǎn)進(jìn)行比較,得出結(jié)論。
關(guān)鍵詞:深度學(xué)習(xí);分布式訓(xùn)練;模型并行;數(shù)據(jù)并行
中圖分類號(hào):TP181 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):2095-2945(2017)29-0007-02
1 概述
深度學(xué)習(xí)已經(jīng)在計(jì)算機(jī)視覺(jué),文本處理,自然語(yǔ)言識(shí)別等領(lǐng)域取得了卓越成就,受到學(xué)術(shù)界和工業(yè)界的廣泛關(guān)注。隨著對(duì)深度學(xué)習(xí)領(lǐng)域研究的深入,有證據(jù)表明增大模型參數(shù)規(guī)模和訓(xùn)練數(shù)據(jù)集,能有效的提高模型精度。但精度提升同時(shí)也帶來(lái)了巨大的訓(xùn)練時(shí)間成本。簡(jiǎn)單的采用單機(jī)加GPU計(jì)算的方式,受限于目前GPU的顯存限制和單機(jī)擴(kuò)展能力,已經(jīng)不能滿足大型深層網(wǎng)絡(luò)結(jié)構(gòu)和超TB大小的訓(xùn)練集所要求的計(jì)算能力和存儲(chǔ)空間。針對(duì)上述問(wèn)題,研究者投入了大量的工作,研究分布式深度學(xué)習(xí)訓(xùn)練框架,來(lái)提升訓(xùn)練效率。當(dāng)前的分布式深度學(xué)習(xí)框架主要包含模型并行(model parallelism),數(shù)據(jù)并行(data parallelism)兩種方法,兩者的結(jié)構(gòu)如圖1所示,左邊為模型并行結(jié)構(gòu),右邊為數(shù)據(jù)并行結(jié)構(gòu)。
2 模型并行化方法
在模型并行化方法里,分布式系統(tǒng)中的不同機(jī)器節(jié)點(diǎn)負(fù)責(zé)單個(gè)網(wǎng)絡(luò)模型的不同部分計(jì)算。例如,卷積神經(jīng)網(wǎng)絡(luò)模型中的不同網(wǎng)絡(luò)層被分配到不同的機(jī)器。每個(gè)機(jī)器只計(jì)算網(wǎng)絡(luò)結(jié)構(gòu)的一部分,能夠起到加速訓(xùn)練的效果。模型并行化適合單機(jī)內(nèi)存容納不下的超大規(guī)模的深度學(xué)習(xí)模型,其具有良好的擴(kuò)展能力,盡管在實(shí)際應(yīng)用中的效果還不錯(cuò),但是在模型能夠在單機(jī)加載的情況下,數(shù)據(jù)并行化卻是多數(shù)分布式深度學(xué)習(xí)系統(tǒng)的首選,因?yàn)閿?shù)據(jù)并行化在實(shí)現(xiàn)難度、容錯(cuò)率和集群利用率方面都優(yōu)于模型并行化,數(shù)據(jù)并行化方法適用于采用大量訓(xùn)練數(shù)據(jù)的中小模型,具體介紹見(jiàn)第3小節(jié)。
3 數(shù)據(jù)并行化方法
在數(shù)據(jù)并行化方法里,分布式框架中的每個(gè)節(jié)點(diǎn)上都存儲(chǔ)一份網(wǎng)絡(luò)模型的副本,各臺(tái)機(jī)器只處理自己所分配到的一部分訓(xùn)練數(shù)據(jù)集,然后在各節(jié)點(diǎn)之間同步模型參數(shù),模型參數(shù)同步算法分為同步式和異步式兩種。
3.1 同步式算法
標(biāo)準(zhǔn)的同步式算法,每次迭代都分為三個(gè)步驟,首先,從參數(shù)服務(wù)器(Parameter Server,PS)中把模型參數(shù)w拉?。╬ull)到本地,接著用新的模型參數(shù)w計(jì)算本地mini-batch的梯度Δw,最后將計(jì)算出的梯度Δw推送(push)到PS。PS需要收集所有節(jié)點(diǎn)的梯度,再按照公式(1)進(jìn)行平均處理更新模型參數(shù),其中?琢為學(xué)習(xí)率。
雅虎開(kāi)源的基于Spark平臺(tái)的深度學(xué)習(xí)包CaffeOnSpark就是采用的同步式算法,同步式算法如圖2所示。
這種強(qiáng)同步式算法,會(huì)由于系統(tǒng)中各個(gè)機(jī)器之間的性能差異,導(dǎo)致所有的節(jié)點(diǎn)都要等待計(jì)算最慢的一個(gè)節(jié)點(diǎn)執(zhí)行完,產(chǎn)生木桶效應(yīng)問(wèn)題。而且大量的同步操作,造成的通訊時(shí)間開(kāi)銷(xiāo)會(huì)限制同步式擴(kuò)展能力,導(dǎo)致性能瓶頸。
3.2 異步式算法
異步隨機(jī)梯度下降算法(Asynchronous Stochastic Gradient Descent,ASGD)是對(duì)同步式算法的改進(jìn)。參數(shù)服務(wù)器只要接收到一個(gè)節(jié)點(diǎn)的梯度值就進(jìn)行更新,而不是等待所有節(jié)點(diǎn)發(fā)送完梯度值,再進(jìn)行平均操作,消除了木桶效應(yīng)問(wèn)題,并且利用梯度的延遲更新,如迭代m次再進(jìn)行同步,減少網(wǎng)絡(luò)通信量,降低網(wǎng)絡(luò)通訊造成的時(shí)間開(kāi)銷(xiāo),獲得明顯加速。文獻(xiàn)[1]證明算法是收斂的。
異步式算法比同步式訓(xùn)練加速效果明顯,但帶來(lái)了一個(gè)新的問(wèn)題,即梯度值過(guò)時(shí)問(wèn)題。當(dāng)某個(gè)節(jié)點(diǎn)算完了梯度值并且將其與參數(shù)服務(wù)器的全局參數(shù)合并時(shí),全局參數(shù)可能已經(jīng)被其他節(jié)點(diǎn)更新了多次,而此時(shí)傳遞過(guò)來(lái)的是一個(gè)已經(jīng)過(guò)時(shí)的梯度值,會(huì)降低算法的收斂速率,達(dá)不到異步算法原本應(yīng)有的加速效果,同時(shí)導(dǎo)致模型準(zhǔn)確率下降。
異步隨機(jī)梯度下降方法有多種形式的變種,都采取了各種策略來(lái)減弱梯度過(guò)時(shí)所造成的影響,同時(shí)保持分布式深度學(xué)習(xí)訓(xùn)練的高效率。解決梯度值過(guò)時(shí)的方法主要包括以下兩種:
(1)對(duì)每次更新的梯度Δw,引入縮放因子?姿,控制梯度過(guò)時(shí)對(duì)全局的影響。參數(shù)的更新形式為:
(2)
(2)采用弱同步(soft synchronization)策略[2],相對(duì)于立即更新全局參數(shù)向量,參數(shù)服務(wù)器等待收集n(1≤j≤n)個(gè)節(jié)點(diǎn)產(chǎn)生的s(1≤s≤m)次更新后,參數(shù)隨之按照公式(3)進(jìn)行更新。若s=1,n=1;(3)式即為普通的異步隨機(jī)梯度下降算法。若s=m;即為異步隨機(jī)梯度下降法延遲更新。若s=1,n為所有的節(jié)點(diǎn)數(shù),(3)式即為同步式算法。
這些改進(jìn)方法相比簡(jiǎn)單的異步算法都能有效降低梯度值過(guò)時(shí)的影響,提升算法的收斂性能。正是由于異步式明顯的加速優(yōu)勢(shì),當(dāng)前熱門(mén)的分布式深度學(xué)習(xí)框架,如MXNet、TensorFlow、CNTK等大多采用異步隨機(jī)梯度下降算法及其變種。
4 結(jié)束語(yǔ)
同步式方法就每一輪epoch的準(zhǔn)確率,以及全局的準(zhǔn)確率來(lái)說(shuō)更勝一籌,然而,額外的同步開(kāi)銷(xiāo)也意味著這個(gè)方法的速度更慢。最大問(wèn)題在于所謂的木桶效應(yīng)問(wèn)題:即同步系統(tǒng)需要等待最慢的處理節(jié)點(diǎn)結(jié)束之后才能進(jìn)行下一次迭代。結(jié)果將會(huì)導(dǎo)致隨著工作節(jié)點(diǎn)的增加,同步系統(tǒng)變得越來(lái)越慢,越來(lái)越不靈活。
異步式算法是當(dāng)前加速訓(xùn)練模型的有效方法,在實(shí)際使用中也得到廣泛應(yīng)用,只需要控制好梯度值過(guò)時(shí)的問(wèn)題。但是帶有中心參數(shù)服務(wù)器的異步式算法仍然可能存在通訊瓶頸,還需要進(jìn)一步研究解決存在的問(wèn)題,充分發(fā)揮異步式的優(yōu)勢(shì)。未來(lái)兩者的混合模型將是重點(diǎn)研究方向,使得分布式深度學(xué)習(xí)可以在大模型大訓(xùn)練集上快速訓(xùn)練,得到更加精準(zhǔn)的模型。
參考文獻(xiàn):
[1]Zinkevich M,Langford J,Smola A. Slow learners are fast[C]. Advances in Neural Information Processing Systems 22(NIPS 2009),2009:2331-2339.
[2]Wei Zhang,Suyog Gupta,Xiangru Lian,and Ji Liu. Staleness-aware async-sgd for distributed deep learning. IJCAI, 2016.
[3]張行健,賈振堂,李祥.深度學(xué)習(xí)及其在動(dòng)作行為識(shí)別中的進(jìn)展[J].科技創(chuàng)新與應(yīng)用,2016(06):66.endprint