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