李博文,謝在鵬,毛鶯池,徐媛媛,朱曉瑞,張 基
(河海大學計算機與信息學院,南京 211100)
近年來,深度學習技術(shù)已在語音識別[1-2]、計算機視覺[3-4]和自然語言處理[5]等領(lǐng)域得到廣泛應(yīng)用并取得了眾多研究成果。在深度學習任務(wù)中常使用梯度下降(Gradient Descent,GD)算法作為深度神經(jīng)網(wǎng)絡(luò)(Deep Neural Network,DNN)模型訓練的主要算法[6-7],然而由于數(shù)據(jù)量的爆炸式增長,現(xiàn)有單機系統(tǒng)已無法滿足梯度下降算法對計算資源的龐大需求。分布式技術(shù)通過多機協(xié)同計算的方式,使用多個計算節(jié)點擴充計算性能,可提供梯度下降算法所需的大量計算資源,因此研究梯度下降算法在分布式集群上的并行化計算非常必要[8]。
目前,深度神經(jīng)網(wǎng)絡(luò)分布式訓練中通常使用數(shù)據(jù)并行化方法,基于數(shù)據(jù)并行化的梯度下降算法包括同步隨機梯度下降[9](Synchronized Stochastic Gradient Descent,SSGD)和異步隨機梯度下降[10](Asynchronized Stochastic Gradient Descent,ASGD)兩種算法。同步算法在每次迭代過程中通過同步各個節(jié)點的狀態(tài)來保持狀態(tài)一致,因此同步梯度下降能夠保持和單機串行算法相同的收斂方向,從而導致其所需的通信量相對其他算法更多,容易受分布式集群中的通信瓶頸影響,同時計算節(jié)點之間需要相互等待傳輸梯度更新結(jié)果,從而造成了計算資源的浪費。異步算法則無需等待節(jié)點狀態(tài)一致,每個節(jié)點在更新權(quán)值參數(shù)時不會檢查其他節(jié)點的運行狀態(tài),獨立地更新本地模型到全局模型上,并獲取全局模型參數(shù)繼續(xù)執(zhí)行下一步計算,如果在該計算過程中又有其他節(jié)點更新了全局模型,那么該節(jié)點用于執(zhí)行下一步計算的全局模型參數(shù)就不是最新的,該數(shù)據(jù)交互模式將導致梯度延遲問題[11-12],而梯度延遲問題又會導致每個節(jié)點用于執(zhí)行下一步計算的全局模型不一致。在大規(guī)模分布式集群中,隨著分布式集群中的節(jié)點數(shù)目增加,節(jié)點計算狀態(tài)保持一致的概率越來越小,節(jié)點之間所需傳輸?shù)男畔⒘恐饾u增多,因此無論同步或異步算法,都在大規(guī)模分布式集群中存在亟待解決的效率問題。本文提出基于分布式編碼的同步隨機梯度下降算法CSSGD,通過分布式編碼策略[13-14]降低分布式集群上的通信負載。
近年來,分布式并行梯度下降算法得到了廣泛應(yīng)用,研究人員針對分布式神經(jīng)網(wǎng)絡(luò)訓練開展了大量研究工作,這些工作主要圍繞分布式異構(gòu)計算和通信負載兩方面展開。分布式集群是典型的異構(gòu)計算平臺,在該異構(gòu)計算環(huán)境下,每個執(zhí)行進程的執(zhí)行速度和任務(wù)完成時間均不確定,在同步梯度下降算法中由于系統(tǒng)需要同步每一批次中各個計算節(jié)點的狀態(tài),因此最慢節(jié)點的速度成為限制分布式集群整體任務(wù)運行速度的主要因素。文獻[15-16]通過對每個節(jié)點的計算和更新過程進行限時,使每個節(jié)點都在已有樣本上進行逐樣本迭代計算,以保證每個節(jié)點都能在任意時間內(nèi)給出一個可用但不完整的中間梯度運算結(jié)果,降低了節(jié)點異構(gòu)對整體任務(wù)的影響。文獻[17-18]針對大矩陣乘法的并行化問題,提出糾纏多項式碼,使用糾纏多項式碼對矩陣乘法運算進行拆解,并對原始矩陣計算任務(wù)添加一定量的冗余以加快運算速度。
此外,并行梯度下降算法還需在各個計算節(jié)點之間進行密集地數(shù)據(jù)交換,因此分布式集群的通信性能也是影響分布式神經(jīng)網(wǎng)絡(luò)訓練性能的主要問題。文獻[19]提出1-Bit 數(shù)值量化方案,使用Adagrad算法進行學習率迭代并結(jié)合誤差累積回溯,在深度神經(jīng)網(wǎng)絡(luò)中得到一種低通信負載的分布式神經(jīng)網(wǎng)絡(luò)訓練方案。文獻[20]提出批次內(nèi)并行化方法,使用較小的Block 劃分和基于動量的參數(shù)迭代方案提高了分布式神經(jīng)網(wǎng)絡(luò)的訓練速度。文獻[21]提出改進的并行梯度下降算法,在改進算法中每個節(jié)點不再將本地計算結(jié)果推送給分布式集群中的所有節(jié)點,而是隨機選取一部分節(jié)點進行更新以降低通信負載。文獻[22]結(jié)合MDS 編碼和分布式通信編碼對分布式機器學習中的大矩陣乘法進行優(yōu)化,有效解決了分布式系統(tǒng)慢節(jié)點和通信瓶頸問題,但其在編碼過程中的冗余量較大。
上述文獻分別從不同角度對分布式神經(jīng)網(wǎng)絡(luò)的訓練過程進行分析與改進,然而在針對分布式通信瓶頸和分布式計算異構(gòu)方面,使用量化或隨機策略不可避免地會影響網(wǎng)絡(luò)訓練精確度,而利用MDS 碼則會引入更多的通信冗余。本文設(shè)計一種用于同步梯度下降算法的分布式編碼策略,能夠降低分布式集群上的通信負載,并保證分布式神經(jīng)網(wǎng)絡(luò)的訓練精確度。
梯度下降算法是用于求解目標函數(shù)最小值的常用優(yōu)化算法,當網(wǎng)絡(luò)模型參數(shù)為w、數(shù)據(jù)集為x和y、目標方程為F(w;x,y)時,計算公式如式(1)所示,迭代過程的計算公式如式(2)所示,其中,?F(w;x,y)為目標函數(shù)的一階導數(shù),η為迭代步長,又稱為學習率,t為迭代輪次。在分布式環(huán)境下,并行梯度下降算法在每個節(jié)點i上求其部分樣本的梯度,計算公式如式(3)所示,最終匯總至全局模型參數(shù)w(t) 上的計算公式如式(4)所示。
本文算法是同步梯度下降算法的一種改進形式,算法執(zhí)行步驟為:1)將目標樣本集合以預(yù)設(shè)批次大小進行劃分,在添加冗余后將其平均分配到各個節(jié)點上;2)每個節(jié)點都在已有樣本上執(zhí)行反向傳播算法,并對中間梯度結(jié)果進行編碼,同時將中間梯度結(jié)果進行整合,實現(xiàn)數(shù)據(jù)分組交換;3)每個節(jié)點根據(jù)接收到的中間結(jié)果數(shù)據(jù),解碼出該節(jié)點所需的內(nèi)容,繼續(xù)執(zhí)行訓練過程。本文算法在任務(wù)分配時使用冗余分發(fā)策略,因此每個節(jié)點所需的中間結(jié)果數(shù)據(jù)可以從r個包含該數(shù)據(jù)的節(jié)點處獲取,因此每個節(jié)點可以僅發(fā)送必要數(shù)據(jù)的1/r,由接收節(jié)點自行拼裝完整結(jié)果,如圖1 所示。同時,由于多個節(jié)點間存在冗余數(shù)據(jù),因此一份數(shù)據(jù)可以被多個節(jié)點所共有,使用編碼策略將需要發(fā)送的多個數(shù)據(jù)分片累加,將中間結(jié)果數(shù)據(jù)多播給多個節(jié)點,每個節(jié)點接收到累加結(jié)果后減去已知部分,即可得到所需部分的結(jié)果,如圖2所示。本文結(jié)合上述兩種策略并將其擴展至梯度矩陣信息交換過程中,提出能夠有效降低梯度下降算法通信負載的方案。
圖1 冗余分發(fā)策略Fig.1 Redundant distribution strategy
圖2 編碼策略Fig.2 Coding strategy
本文同步隨機梯度下降算法的偽代碼如算法1所示,具體過程為在給定的訓練數(shù)據(jù)集F和迭代次數(shù)T的情況下獲取當前最終模型參數(shù)wf。
算法1本文同步隨機梯度下降算法
本文設(shè)計一種任務(wù)分配算法,在有n個計算節(jié)點的集群上,將訓練數(shù)據(jù)集F冗余r倍并平均分配到每個節(jié)點上,且每個節(jié)點上的樣本組合不重復(fù)。上述分配過程可以描述為一個簡單的排列組合過程,首先要實現(xiàn)r倍冗余的分配,且每個節(jié)點上的數(shù)據(jù)組合互不重復(fù),需要將每個樣本的r份拷貝發(fā)送到任意r個不重復(fù)的計算節(jié)點上。其次要實現(xiàn)每個節(jié)點上的樣本數(shù)量一致,將要分配的樣本集合劃分為份,每一份樣本子集都可以對應(yīng)一個唯一的分發(fā)路徑,依照組合結(jié)果進行分發(fā),每個節(jié)點可以接收到(r?)個樣本集合,完成任務(wù)的平均分配。任務(wù)分配算法的偽代碼如算法2 所示,具體過程為在給定訓練數(shù)據(jù)集F、分布式節(jié)點集合U和訓練所用的批次大小b的情況下獲取每個計算節(jié)點i的本地樣本Di,其中,combinations(U,r) 返回U的r倍所有可能的組合結(jié)果,split_into_batch(F,b) 返回按照批次大小劃分后的數(shù)據(jù)集,split(Fj,C.size)返回Fj平均分為C.size 后的結(jié)果集合。
算法2任務(wù)分配算法
為闡述算法2 的執(zhí)行過程,首先定義分布式集群中所有節(jié)點的集合為U,如式(5)所示。取U的r倍組合結(jié)果記作C,如式(6)所示,在C中的元素個數(shù)為。
同樣地,將訓練樣本按照輸入的批次大小b劃分為多個mini batch,并將每個mini batchFj平均分為份并記作P。將Pi和Ci一對一配對,依次將每個Pi發(fā)送至對應(yīng)Ci表示的節(jié)點集合上。此時,每個節(jié)點上存在的待處理樣本塊個數(shù)為μ=r?/n,且每個樣本被拷貝并發(fā)送至r個不同節(jié)點上。依照上述算法流程可將數(shù)據(jù)集F平均分配到N中的每個計算節(jié)點上,每個節(jié)點上的樣本數(shù)據(jù)數(shù)目可根據(jù)節(jié)點的性能進行動態(tài)調(diào)整,且在一定限度內(nèi)不會影響其他節(jié)點的負載。
本文通過對中間結(jié)果矩陣進行編碼,可壓縮每個節(jié)點發(fā)送的數(shù)據(jù)量,同時實現(xiàn)數(shù)據(jù)多播以減少發(fā)送時間。由于在任務(wù)分配時使用冗余分發(fā)策略,因此每個節(jié)點所需的中間結(jié)果數(shù)據(jù)可以從r個包含該數(shù)據(jù)的節(jié)點處獲取,因此每個節(jié)點可以僅發(fā)送必要數(shù)據(jù)的1/r,由接收節(jié)點自行拼裝完整結(jié)果。同時,由于多個節(jié)點間存在冗余數(shù)據(jù),因此一份數(shù)據(jù)可以被多個節(jié)點共有,使用編碼策略將要發(fā)送的多個數(shù)據(jù)分片累加,將中間結(jié)果數(shù)據(jù)多播給多個節(jié)點,每個節(jié)點接收到累加結(jié)果后減去已知部分,即可得到所需部分的結(jié)果。上述編碼過程可在不影響計算速度的情況下有效降低發(fā)送的數(shù)據(jù)量,一般情況下該過程可將數(shù)據(jù)量降低至樸素方法的1/n。
數(shù)據(jù)傳輸編碼算法的偽代碼如算法3 所示,具體過程為在給定所有中間結(jié)果矩陣的列表B、當前節(jié)點N和冗余度r的情況下獲取中間結(jié)果集合C,其中,position_of(G,N)返回在編碼過程中節(jié)點N獲取梯度矩陣G的拆分子矩陣編號,block_id_of(G)返回用于計算G所使用的樣本塊編號,content_of(G,N)返回在編碼過程中節(jié)點N應(yīng)獲取的對應(yīng)G的拆分子矩陣,adversary_of(G)返回不具有G的所有節(jié)點,get_singularity(T)返回列表T中只出現(xiàn)一次的元素,pack(M,P,J,T)將內(nèi)容M、P、J、T打包并等待發(fā)送。
算法3數(shù)據(jù)傳輸編碼算法
按照算法3 的執(zhí)行過程,定義編碼的運算過程發(fā)生在節(jié)點Ni、神經(jīng)網(wǎng)絡(luò)層Ll、批次樣本Fj和批次樣本中的塊Pq上,四元組(i,l,j,q)表示運算過程發(fā)生的環(huán)境,例如,在節(jié)點Ni和層Ll上批次為Fj且由全局編號為q的樣本塊計算所得的梯度記作G(i,l,j,q)。當某個對象的存在與某個下標對應(yīng)的維度無關(guān)時,將其標記為數(shù)學中的任意符號?,例如樣本的存在與神經(jīng)網(wǎng)絡(luò)層數(shù)無關(guān),因此在節(jié)點Ni上批次為Fj且全局編號為i的樣本塊記作F(i,?l,j,q)。在樣本塊分發(fā)完畢后,每個節(jié)點在其接收到的樣本塊上執(zhí)行前向傳播和反向傳播算法,計算以該樣本塊所得損失對網(wǎng)絡(luò)參數(shù)w(i,l,j,q)的一階梯度,一個塊內(nèi)所有樣本的對應(yīng)損失的梯度加和記作G(i,l,j,q)。
將節(jié)點Ni在任務(wù)分配階段獲得的μ個第j批次樣本塊在層Ll上計算得到的梯度矩陣記作G(i,l,j,?),如式(7)所示。在B(i,l,j,?q)中取r個元素進行組合,將包含個組合結(jié)果的結(jié)果集記作R(i,l,j,?q),如式(8)所示。將R(i,l,j,?q)中的組合結(jié)果記作,如式(9)所示。
圖3 梯度矩陣按列拆分的示例Fig.3 Example for splitting a gradient matrix by column
將Ci中的節(jié)點下標編號aq進行升序排序,獲取當前下標節(jié)點Nq在升序排列后的節(jié)點列表中的位置記作α,例如在節(jié)點組合{N1,N2,N3}中,節(jié)點N1對應(yīng)的位置α=0,節(jié)點N3對應(yīng)的位置α=2。獲取位置信息αi并將其添加至組合結(jié)果拆分位置信息,同時將該塊編號信息d添加至塊編號信息。對應(yīng)每個樣本塊都可獲取一個該節(jié)點在該樣本塊分發(fā)列表中的位置αi,那么可以由上述數(shù)據(jù)求得,如式(12)所示。遍歷編碼所用的編碼梯度矩陣G(i,l,j,?q)求解Ai,如式(13)所示。疊加所有的Ai并獲取其中僅出現(xiàn)一次的節(jié)點,將其添加至編碼包的發(fā)送目標列表。
根據(jù)編碼時的累加結(jié)果和分片規(guī)則,解碼時應(yīng)按照編碼時的運算過程反向求取節(jié)點所需的內(nèi)容。首先通過減法減去節(jié)點已知的數(shù)據(jù)內(nèi)容,求取未知的數(shù)據(jù)內(nèi)容,然后按照分片規(guī)則,還原中間結(jié)果矩陣,以獲取完整的中間結(jié)果。數(shù)據(jù)傳輸解碼算法的偽代碼如算法4 所示,主要功能為在給定所有中間結(jié)果矩陣列表B和接收到的編碼數(shù)據(jù)包H的情況下輸出矩陣切片(content)、切片編號(parts_id)和切片位置(parts_ position),其中,can_get(B,id) 判斷節(jié)點是否包含樣本塊編號為id 所計算出的梯度矩陣,part_of(B,id,pos) 獲取對應(yīng)編號id 的樣本塊計算出的梯度矩陣的第pos 個拆分子矩陣。
算法4數(shù)據(jù)傳輸解碼算法
在編碼包中已包含編碼所用樣本塊編號和編碼拆分矩陣的位置信息,依據(jù)發(fā)送規(guī)則可從編碼包中提取節(jié)點Ni缺失的信息,將發(fā)送編碼包給節(jié)點Ni的節(jié)點記作Ni,,將節(jié)點Ni,發(fā)送返回的信息記作。由于編碼包中已包含樣本塊和拆分子矩陣位置信息,因此可利用節(jié)點Ni已有的信息解碼未知信息,如式(15)所示。根據(jù)任務(wù)分配算法,將節(jié)點Ni缺失的樣本塊記作-μ,對應(yīng)這些缺失樣本所需的梯度中間結(jié)果記作G(i,l,j,qv),v=1,2,…,-μ。當節(jié)點Nq獲取到所有缺失信息后,將其依照拆分規(guī)則進行合并,如式(16)所示。當節(jié)點Nq獲取到所有樣本塊對應(yīng)的缺失梯度時,使用式(16)和式(17)計算全局梯度,該全局梯度即進一步迭代所需的模型參數(shù)增量,如式(18)所示。
若假設(shè)本文同步隨機梯度下降算法的通信負載為Lcoding,傳統(tǒng)不使用多播技術(shù)的梯度下降算法的通信負載為Lnormal,則兩者存在式(19)所述的關(guān)系:
對上述關(guān)系進行證明,具體證明過程如下:使用編碼策略進行任務(wù)分發(fā)和交換,節(jié)點數(shù)目為n,數(shù)據(jù)分配冗余度為r,每個劃分占總批次大小為a1,a2,…,ap,其中p=,每個節(jié)點獲取a1,a2,…,ap中的Dhave個樣本塊(如式(20)所示),并缺少其中的Dleft個樣本塊(如式(21)所示)。將節(jié)點i包含的所有樣本塊集合記作Di,如式(22)所示。
對于n個節(jié)點中任意r個節(jié)點組成的節(jié)點子集,其中一定存在1 個樣本塊被這r個節(jié)點所共有,因為樣本塊分發(fā)標簽包含了所有節(jié)點編號可以形成的組合,所以任意r個節(jié)點必然屬于種選擇中的一個節(jié)點,如式(23)所示。同理,對于任意r+1 個節(jié)點組成的節(jié)點組至少存在個這樣的樣本塊,如式(24)所示。在n個節(jié)點組成的集群中共有個節(jié)點組,每個節(jié)點組選取其中個樣本塊Dexchange進行數(shù)據(jù)交換,每個節(jié)點僅發(fā)送由樣本塊Dsend計算所得的數(shù)據(jù),如式(25)、式(26)所示。
由于節(jié)點Ni完成所有分組交換后數(shù)據(jù)都不重復(fù),因此其能夠獲得所有的Dleft中間信息,使用個節(jié)點組進行完全分組信息交換后,總的多播通信量如式(28)所示。對于具有同樣冗余度的傳統(tǒng)通信方式,每個節(jié)點所需通信量如式(29)所示,本文中的冗余度是指在同一樣本塊上進行計算的節(jié)點數(shù)量。對于不使用冗余策略的普通通信方式,每個節(jié)點缺少的數(shù)據(jù)是相互獨立的,所需的通信量如式(30)所示。綜上,式(19)所述的編碼策略通信負載與傳統(tǒng)方法通信負載之間的關(guān)系得以證明。
本文通過神經(jīng)網(wǎng)絡(luò)對SSGD、ASGD和本文CSSGD算法進行分布式訓練實驗,對比在不同節(jié)點數(shù)目的情況下3 種算法到達指定訓練精確度所需物理時鐘時間和數(shù)據(jù)傳輸量,并利用集群模擬對上述指標進行實驗驗證,實驗中共使用10 個計算節(jié)點,每個計算節(jié)點的配置信息如表1 所示。本文使用MNIST 和CIFAR-10數(shù)據(jù)集在卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)和DNN 上進行實驗。表2 給出CNN 和DNN 在不限時單機執(zhí)行環(huán)境下所得的測試精確度,以此測試精確度作為最優(yōu)測試精確度,并在實驗中對比3 種算法的測試精確度。
表1 計算節(jié)點配置信息Table 1 Configuration information of computing node
表2 實驗數(shù)據(jù)集上的測試精確度Table 2 Test accuracy on the experimental dataset
為保證浮點數(shù)執(zhí)行編碼運算后的精確度,本文對計算產(chǎn)生的中間結(jié)果進行量化,使用32 位整型保存運算所需的浮點數(shù)據(jù),設(shè)置中間結(jié)果區(qū)間為[-10,10],取0x7FFFFFFF 為10,取0x80000001 為-10,等區(qū)間劃分取值,并使用該量化結(jié)果進行運算和編碼。本文在實驗中對不同節(jié)點的網(wǎng)絡(luò)使用不同的樣本劃分,在2 個節(jié)點上只執(zhí)行二分類,在3 個節(jié)點上只執(zhí)行三分類任務(wù),以此類推,保證每次測試時每個節(jié)點都能夠執(zhí)行相同數(shù)據(jù)量的任務(wù),分析由通信瓶頸導致的性能損失問題,同時以串行算法測試所得結(jié)果作為目標精確度。
本文首先對CSSGD 算法在DNN 與CNN 上的訓練結(jié)果進行評估,然后使用SSGD、ASGD 和CSSGD 算法在MNIST 數(shù)據(jù)集上訓練DNN、在CIFAR-10 數(shù)據(jù)集上訓練CNN。在訓練過程中,使用10 個訓練節(jié)點(ASGD 算法額外使用一個參數(shù)服務(wù)器)并記錄測試精確度的變化情況。由于CSSGD 算法的目的是減少訓練執(zhí)行時間,因此實驗著重討論3 種算法到達相同測試精確度的時間。
3.2.1 訓練性能分析
DNN 和CNN 的訓練結(jié)果如圖4 和圖5 所示,可以看出CSSGD、SSGD 和ASGD 算法在充足的訓練時間下,均可達到最終的測試精確度。
圖4 利用CSSGD、SSGD 和ASGD 算法訓練DNN 的測試精確度比較Fig.4 Comparison of test accuracy of training DNN with CSSGD,SSGD and ASGD algorithms
圖5 利用CSSGD、SSGD 和ASGD 算法訓練CNN 的測試精確度比較Fig.5 Comparison of test accuracy of training CNN with CSSGD,SSGD and ASGD algorithms
本節(jié)實驗著重分析3 種算法訓練所需的時間,在限定的測試精確度下比較算法執(zhí)行所需的時間以評估算法執(zhí)行效率。實驗在CNN 和DNN 的原始訓練結(jié)果中,在接近目標精確度附近選取一個相對3 種算法差異最大的基準測試精確度進行后續(xù)實驗。如圖6、圖7 所示,對于使用MNIST 數(shù)據(jù)集的DNN,其選取的基準測試精確度為82%,對于使用CIFAR-10 數(shù)據(jù)集的CNN,其選取的基準測試精確度為70%。下文將針對這組基準測試精確度,比較3 種算法的執(zhí)行效率。
圖6 DNN 訓練中的基準測試精確度Fig.6 Benchmark test accuracy of DNN training
圖7 CNN 訓練中的基準測試精確度Fig.7 Benchmark test accuracy of CNN training
后續(xù)實驗從3 個方面詳細分析了CSSGD 算法的執(zhí)行效率:1)由于ASGD 算法無獨占通信時間,因此在DNN 和CNN 訓練過程中,對比使用CSSGD 與SSGD 算法在訓練時間和通信總量上的差別;2)針對理論推導結(jié)果,通過實驗驗證不同冗余度設(shè)置下CSSGD 算法的每批次訓練時間;3)使用相同的樣本數(shù)據(jù)集和神經(jīng)網(wǎng)絡(luò)在上述集群環(huán)境下,對比ASGD、SSGD 和CSSGD 算法訓練至基準測試精確度所需的訓練時間。
3.2.2 DNN 實驗結(jié)果分析
圖8 展示了DNN 訓練中SSGD 和CSSGD 算法在MNIST 數(shù)據(jù)集上達到82%測試精確度所需的時間,其中,SSGD Multicast 和SSGD Unicast 分別表示基于多播技術(shù)的SSGD 算法和基于單播技術(shù)的SSGD 算法,CSSGDr=2 和CSSGDr=3 分別表示冗余度為2 的CSSGD 算法和冗余度為3 的CSSGD 算法,可以看出CSSGD 算法能夠有效降低SSGD 算法執(zhí)行所需時間。圖9 展示了DNN 訓練中SSGD Multicast 和CSSGD 算法占用的網(wǎng)絡(luò)數(shù)據(jù)通信總量,可以看出CSSGD 算法占用的網(wǎng)絡(luò)數(shù)據(jù)通信總量相對SSGD 算法更少。
圖8 在DNN 訓練中SSGD 和CSSGD 算法達到基準測試精確度所需時間Fig.8 The time required for SSGD and CSSGD algorithms to reach benchmark test accuracy in DNN training
圖9 在DNN 訓練中SSGD 和CSSGD 算法達到基準測試精確度所需通信總量Fig.9 The total amount of communication required for SSGD and CSSGD algorithms to reach benchmark test accuracy in DNN training
3.2.3 CNN 實驗結(jié)果分析
圖10 展示了CNN 訓練中SSGD 與CSSGD 算法在CIFAR-10 數(shù)據(jù)集上達到70%測試精確度所需的時間。在DNN 訓練過程中產(chǎn)生的權(quán)值矩陣相對CNN 更大,容易由于網(wǎng)絡(luò)速度限制造成計算瓶頸,如果對該類別網(wǎng)絡(luò)使用CSSGD 算法,則可以有效緩解通信瓶頸問題。在CNN 中執(zhí)行計算所需時間比DNN 更多,因此其對通信瓶頸的影響相對DNN 更小,在使用CSSGD 算法進行編碼梯度下降時,其所能獲得的測試精確度相對DNN 更低。圖11 展示了CNN 訓練中SSGD Multicast 和CSSGD 算法占用的網(wǎng)絡(luò)數(shù)據(jù)通信總量,可以看出CSSGD 算法在CNN和DNN 訓練中都能夠有效降低中間結(jié)果的通信總量,但是CNN 計算中數(shù)據(jù)通信所占時間相較DNN更少,因此數(shù)據(jù)通信優(yōu)化對總體執(zhí)行性能的影響較小。
圖10 在CNN 訓練中SSGD 和CSSGD 算法達到基準測試精確度所需時間Fig.10 The time required for SSGD and CSSGD algorithms to reach benchmark test accuracy in CNN training
圖11 在CNN 訓練中SSGD 和CSSGD 算法達到基準測試精確度所需通信總量Fig.11 The total amount of communication required for SSGD and CSSGD algorithms to reach benchmark test accuracy in CNN training
3.2.4 冗余度分析
根據(jù)上文對編碼過程的理論推導可以得出,當所需通信時間與數(shù)據(jù)通信總量呈線性相關(guān)時,CSSGD 算法單一批次訓練所需時間TCSSGD可表示為每批次計算時間和每批次通信時間之和,假設(shè)SSGD 多播算法中一個批次計算所需時間為Tcalculate、中間結(jié)果傳輸所需時間為Tcommunicate,則TCSSGD可表示為TCSSGD=r·Tcalculate+1/r·Tcommunicate,可以看出,當Tcalculate和Tcommunicate為定值時存在一個確定的冗余度使得TCSSGD最小。本文在8 個計算節(jié)點的情況下對不同冗余度的CSSGD 算法單一批次迭代所需時間進行實驗,結(jié)果如圖12、圖13 所示,可以看出在DNN 和CNN 訓練中的最佳冗余度分別為3 和2。由實驗結(jié)果可以得出和理論推導相同的結(jié)論,即在固定的計算時間和傳輸時間下,每個節(jié)點都存在確定的冗余度,當冗余度為r時整個分布式集群單一批次的訓練時間最短。
圖12 在DNN 訓練中CSSGD 算法冗余度與單一批次訓練時間的關(guān)系Fig.12 The relationship between the redundancy and the training time of single batch of CSSGD algorithm in DNN training
圖13 在CNN 訓練中CSSGD 算法冗余度與單一批次訓練時間的關(guān)系Fig.13 The relationship between the redundancy and the training time of single batch of CSSGD algorithm in CNN training
3.2.5 訓練時間分析
本節(jié)對比ASGD、SSGD Multicast和最優(yōu)冗余度下的CSSGD(CSSGD Optimal)算法的實際訓練時間,如圖14 和圖15 所示,由于ASGD 算法異步執(zhí)行過程導致其執(zhí)行狀態(tài)難以確定,最終收斂所需次數(shù)也存在一定的隨機性,因此對ASGD 算法進行10 次實驗取訓練時間的平均值??梢钥闯觯谕ㄐ牌款i問題較嚴重的DNN訓練過程中,CSSGD 算法相對于SSGD 和ASGD 算法可取得明顯的效率提升,在DNN 的分布式訓練中,相對SSGD 和ASGD 平均能減少53.97%和26.89%的訓練時間。在CNN 訓練過程中由于計算執(zhí)行過程占總執(zhí)行時間的比例較高,因此通過添加冗余編碼來降低通信負載的CSSGD 算法效率提升較少,但是ASGD 算法需要更多的計算開銷來消除梯度延遲問題帶來的干擾,因此CSSGD 算法相對SSGD 和ASGD 算法效率依然有一定的提升,在CNN 分布式訓練中,相對SSGD 和ASGD 平均能減少39.11%和26.37%的訓練時間。實驗中給出10 個計算節(jié)點以內(nèi)的訓練時間結(jié)果,可以看出,ASGD 和CSSGD 算法在分布式系統(tǒng)上的性能不能隨節(jié)點數(shù)目線性提升,隨著節(jié)點數(shù)目的增多,ASGD 算法的理論同步更新概率會越來越小,迭代所需時間會繼續(xù)增加,CSSGD 算法也會受到額外通信負載和多播帶寬擁塞的影響,但是其在更多節(jié)點加入后可更新其最優(yōu)冗余度參數(shù)配置,能夠達到更好的訓練效果。
圖14 在DNN 訓練中SSGD、ASGD 和CSSGD 算法達到基準測試精確度所需時間Fig.14 The time required for SSGD,ASGD and CSSGD algorithms to reach benchmark test accuracy in DNN training
圖15 在CNN 訓練中SSGD、ASGD 和CSSGD 算法達到基準測試精確度所需時間Fig.15 The time required for SSGD,ASGD and CSSGD algorithms to reach benchmark test accuracy in CNN training
本文針對異步隨機梯度下降算法的高通信負載問題,提出一種基于分布式編碼計算的同步梯度下降算法,通過冗余分發(fā)策略降低通信負載并消除通信瓶頸對分布式集群的影響。實驗結(jié)果表明,當配置合適的超參數(shù)時,與SSGD 和ASGD 算法相比,該算法在DNN分布式訓練中能平均減少53.97%和26.89%的訓練時間,在CNN 分布式訓練中能平均減少39.11%和26.37%的訓練時間,降低了分布式集群上的通信負載。下一步將研究并行梯度下降算法在分布式集群上的應(yīng)用,并分析數(shù)值量化誤差對最終損失函數(shù)收斂性能的影響。