謝 濤 張春炯 徐永健
①(西南大學(xué)教育學(xué)部智慧教育研究院 重慶 400715)
②(同濟(jì)大學(xué)電子與信息工程學(xué)院 上海 201804)
③(西南大學(xué)計(jì)算機(jī)與信息科學(xué)學(xué)院 重慶 400715)
機(jī)器學(xué)習(xí)被廣泛應(yīng)用于圖像檢索、語義識(shí)別和文本信息處理,在智慧醫(yī)療、智慧城市和智慧教育等領(lǐng)域發(fā)揮著重要作用。許多機(jī)器學(xué)習(xí)算法的目標(biāo)函數(shù)可以通過優(yōu)化問題來表示,并采用隨機(jī)梯度下降算法(Stochastic Gradient Descent, SGD)進(jìn)行求解[1]。但是,局部梯度與全局平均梯度之間存在方差,會(huì)使機(jī)器學(xué)習(xí)算法中損失函數(shù)的收斂速度減慢。而且,SGD在目標(biāo)函數(shù)強(qiáng)凸且步長遞減的情況下次線性收斂,導(dǎo)致模型訓(xùn)練不穩(wěn)定。
近年來,分布式機(jī)器學(xué)習(xí)取得了重要進(jìn)展。分布式集群的節(jié)點(diǎn)分為參數(shù)服務(wù)器和工作節(jié)點(diǎn)。工作節(jié)點(diǎn)從服務(wù)器中提取參數(shù),梯度的計(jì)算由工作節(jié)點(diǎn)進(jìn)行,更新后的參數(shù)將推送到服務(wù)器,并在服務(wù)器上聚合以更新全局參數(shù),最后與工作節(jié)點(diǎn)共享[2]。其模型訓(xùn)練主要分為同步和異步兩種方式。在同步方式中,所有工作節(jié)點(diǎn)都需要同步消息,并在服務(wù)器更新前進(jìn)行匯總;而異步方式中,服務(wù)器在一次更新迭代輪次中接收到率先計(jì)算完成的工作節(jié)點(diǎn)的模型參數(shù)時(shí),不再等待其他工作節(jié)點(diǎn)的消息就將其更新為全局模型參數(shù),然后分發(fā)給每個(gè)工作節(jié)點(diǎn)進(jìn)行下一輪次迭代更新。
基于傳統(tǒng)參數(shù)服務(wù)器和工作節(jié)點(diǎn)關(guān)系的SSP(Stale Synchronous Parallel)方法[3]在本地維護(hù)一個(gè)緩存參數(shù)池,每個(gè)工作節(jié)點(diǎn)可以直接從其中提取參數(shù),并對(duì)參數(shù)服務(wù)器之間的同步進(jìn)行額外處理,其缺點(diǎn)在于性能差的節(jié)點(diǎn)可能得不到及時(shí)發(fā)現(xiàn)。因此,使系統(tǒng)不被低性能節(jié)點(diǎn)影響的FSSP模型[4]和可動(dòng)態(tài)決定節(jié)點(diǎn)失效閾值的DSSP模型[5]被提出。在這些模型中,節(jié)點(diǎn)間的通信要么采用自適應(yīng)學(xué)習(xí)率來提高異步SGD的魯棒性[6,7],要么基于參數(shù)服務(wù)器系統(tǒng)采用類似SSP的異步通信協(xié)議進(jìn)行跨節(jié)點(diǎn)參數(shù)更新[8]。然而,由于學(xué)習(xí)率隨著迭代而衰減,導(dǎo)致算法的收斂速度減慢,容易出現(xiàn)過擬合。針對(duì)此,結(jié)合延遲近端梯度和隨機(jī)方差縮減梯度的快速分布式SGD[9]使用固定學(xué)習(xí)率來保證線性收斂,性能優(yōu)于傳統(tǒng)的SGD。
由于集群中分布式機(jī)器學(xué)習(xí)的參數(shù)快速增長、同步的成本高,大大減慢分布式學(xué)習(xí)的速度。充分因子廣播(SFB)計(jì)算模型被提出用于大規(guī)模矩陣參數(shù)化模型的分布式學(xué)習(xí)[10]。該方法通過在工作節(jié)點(diǎn)之間廣播SF并在每個(gè)本地節(jié)點(diǎn)重構(gòu)和更新參數(shù)矩陣,可提高通信效率。此外,文獻(xiàn)[11]提出一種有效的小批量訓(xùn)練機(jī)制,可以加速集群中的SGD;文獻(xiàn)[12]提出可提升訓(xùn)練效率的誤差補(bǔ)償式隨機(jī)梯度下降算法,通過量化局部梯度來降低通信開銷,并加快收斂速度。但這些算法主要在分布式通信機(jī)制上采用隨機(jī)梯度下降算法,很少有研究兼顧考慮歷史梯度的方差。
事實(shí)上,近年關(guān)于方差縮減的研究并不少見,例如SAG[13], SAGA[14], S2GD, SVRG++和Prox-SVRG[8,9,15]等。這些研究主要對(duì)模型的結(jié)構(gòu)進(jìn)行適當(dāng)?shù)臅r(shí)空折中,從而減少隨機(jī)梯度引起的方差,有助于獲得線性收斂速度。但大多數(shù)算法是在中心服務(wù)器上實(shí)現(xiàn)的,難以滿足大規(guī)模分布式應(yīng)用的要求。隨著基于方差縮減的分布式SGD得到廣泛關(guān)注,Wang等人[16]提出有效融合異步并行機(jī)制和方差縮減方法的Async-ProxSCVR算法,F(xiàn)erranti等人[17]提出基于方差縮減的隨機(jī)交替最小化算法SVR-AMA,均可解決對(duì)于強(qiáng)凸和一般非凸情況下的快速收斂問題。然而,大量算法主要使用閉環(huán)方式為節(jié)點(diǎn)中的多個(gè)線程(而非多個(gè)獨(dú)立節(jié)點(diǎn))并行更新參數(shù)。其缺點(diǎn)是當(dāng)訓(xùn)練數(shù)據(jù)或參數(shù)的數(shù)量很大、不能存儲(chǔ)在單個(gè)節(jié)點(diǎn)中時(shí),模型收斂效率會(huì)受到嚴(yán)重影響。
鑒于此,本文的主要貢獻(xiàn)在于采用方差縮減SGD完成分布式集群中的大規(guī)模機(jī)器學(xué)習(xí)任務(wù),主要集中解決兩個(gè)關(guān)鍵問題:(1)將數(shù)據(jù)分塊并分配給多個(gè)工作節(jié)點(diǎn)后的算法“快速收斂”問題;(2)在異步通信方式下,執(zhí)行全局參數(shù)分發(fā)時(shí)因快節(jié)點(diǎn)等待慢節(jié)點(diǎn)導(dǎo)致的“更新滯后”問題。因此,本文提出一種基于歷史梯度平均方差縮減的分布式SGD(DisSAGD),利用歷史迭代的梯度方差,修正每次迭代的梯度估計(jì),不需要完全的梯度計(jì)算或額外的存儲(chǔ),而是通過異步通信協(xié)議來共享跨節(jié)點(diǎn)參數(shù),并在分布式集群中使用方差縮減來訓(xùn)練機(jī)器學(xué)習(xí)模型。
盡管此方法可以避免一些算法[14]存在的“無遍歷迭代算法”額外存儲(chǔ)的需求,但是需要在每次迭代時(shí)對(duì)整個(gè)數(shù)據(jù)集進(jìn)行梯度估計(jì),造成昂貴的計(jì)算代價(jià)。為了解決此問題并獲得加速計(jì)算,本文在每次迭代上累積平均梯度向量,然后使用該向量進(jìn)行下次迭代的梯度求解,從而避免在整個(gè)數(shù)據(jù)集上迭代循環(huán)。這些累積的平均梯度向量在機(jī)器學(xué)習(xí)算法運(yùn)行時(shí)不會(huì)產(chǎn)生其他明顯的開銷。在每次估計(jì)梯度時(shí)用歷史梯度來做修正,在一段時(shí)間內(nèi)使用t×m個(gè)樣本,經(jīng)過 t輪迭代后重新選擇 m個(gè)樣本進(jìn)行梯度計(jì)算?;谄骄荻认蛄糠讲羁s減的參數(shù)更新規(guī)則如式(3)
表1 基于歷史梯度平均方差縮減算法
本研究中,機(jī)器學(xué)習(xí)集群是基于分布式tensorflow框架實(shí)現(xiàn)的,集群節(jié)點(diǎn)劃分為服務(wù)器(節(jié)點(diǎn))和工作節(jié)點(diǎn)。工作節(jié)點(diǎn)從服務(wù)器中提取參數(shù),梯度的基礎(chǔ)計(jì)算由工作節(jié)點(diǎn)進(jìn)行。工作節(jié)點(diǎn)的任何更新將推送到服務(wù)器,并在服務(wù)器上聚合成全局參數(shù)。最后,這些新的全局參數(shù)將與工作節(jié)點(diǎn)共享??紤]到方差縮減隨機(jī)梯度主要是通過數(shù)據(jù)驅(qū)動(dòng)模型收斂,本文采用數(shù)據(jù)并行,而非模型并行。通過數(shù)據(jù)并行,數(shù)據(jù)集 D被劃分為互不相交的子集,將每一個(gè)子集指定到工作節(jié)點(diǎn)p, p ∈{1,2,···,P}。 令Dp為第p個(gè)數(shù)據(jù)劃分??傻玫綌?shù)據(jù)并行的更新公式為
其中, t 表示迭代輪次,W 表示模型狀態(tài),△ (·)表示更新函數(shù),它獨(dú)立地運(yùn)行在數(shù)據(jù)集 Dp上,最后將各工作節(jié)點(diǎn)的中間梯度結(jié)果通過F (·)進(jìn)行匯總以更新全局梯度。值得注意的是,在數(shù)據(jù)并行方式中,假設(shè)數(shù)據(jù)集是獨(dú)立同分布的,且每一個(gè)工作節(jié)點(diǎn)的執(zhí)行能力都相等。工作節(jié)點(diǎn)將計(jì)算結(jié)果傳輸?shù)椒植际骄W(wǎng)絡(luò)之前,△ (·)先在本地CPU上運(yùn)行,因此在配置相同的工作節(jié)點(diǎn)上,△ (·)在單個(gè)節(jié)點(diǎn)的計(jì)算延遲可以忽略。
另一方面,工作節(jié)點(diǎn)以異步方式執(zhí)行機(jī)器學(xué)習(xí)任務(wù),通過gRPC消息傳遞從服務(wù)器中提取參數(shù) ω,并開始機(jī)器學(xué)習(xí)模型的迭代計(jì)算。在每次迭代中,工作節(jié)點(diǎn)首先從訓(xùn)練數(shù)據(jù)中隨機(jī)選擇一個(gè)樣本,然后使用式(1)計(jì)算梯度。在迭代過程中,所有工作節(jié)點(diǎn)相互獨(dú)立。當(dāng)?shù)瓿蓵r(shí),工作節(jié)點(diǎn)將此輪迭代訓(xùn)練好的機(jī)器學(xué)習(xí)模型參數(shù)ω 推送到服務(wù)器。
假設(shè)數(shù)據(jù)分布在p 個(gè)工作節(jié)點(diǎn)上,這些工作節(jié)點(diǎn)只能與對(duì)應(yīng)的服務(wù)器通信,拓?fù)淙鐖D1所示。將數(shù)據(jù)索引集 {1,2,···,n} 分 解為不相交的子集{ψs},每個(gè) ψs表 示存儲(chǔ)在服務(wù)器s 上的數(shù)據(jù)索引。目標(biāo)函數(shù)由式(5)給出。
本文方差縮減方法容易實(shí)現(xiàn)以異步方式分發(fā),因?yàn)樗簧婕跋馭VRG那樣計(jì)算目標(biāo)函數(shù)的完整梯度。此外,由于算法僅需要在每次迭代結(jié)束時(shí)更新梯度的平均值,因此可以增加服務(wù)器和工作節(jié)點(diǎn)之間的通信時(shí)段,從而保證機(jī)器學(xué)習(xí)模型快速且穩(wěn)定的收斂。
綜上所述,本文提出的DisSAGD算法偽代碼如表2所示。具體執(zhí)行過程如下:先啟動(dòng)服務(wù)器創(chuàng)建分布式集群,再啟動(dòng)主工作節(jié)點(diǎn),協(xié)調(diào)其余工作節(jié)點(diǎn)的初始化和同步等待問題(第(1)行)。工作節(jié)點(diǎn)由gRPC傳遞模型參數(shù)。一旦工作節(jié)點(diǎn)從服務(wù)器接收到消息,它就會(huì)從服務(wù)器中提取全局參數(shù),并開始迭代過程(第(2)行)。對(duì)于所有工作節(jié)點(diǎn)都會(huì)調(diào)用表1中的程序,實(shí)現(xiàn)本地參數(shù)更新(第(3)0~(5)行)。當(dāng)工作節(jié)點(diǎn)從訓(xùn)練數(shù)據(jù)中隨機(jī)采樣時(shí),它使用緩存的本地梯度更新參數(shù)(第(6)~(9)行),最后將新學(xué)習(xí)的參數(shù)推送至服務(wù)器,匯聚成新的全局參數(shù)(第(10)行)。DisSAGD算法有效地利用了歷史梯度縮減方差,與文獻(xiàn)[2,3]提到的Petuum SGD算法和文獻(xiàn)[6]提到的Downpour SGD算法不同的是:它可以快速收斂而不會(huì)在迭代期間衰減學(xué)習(xí)速率。
方差縮減技術(shù)一般使用恒定的學(xué)習(xí)速率來加速機(jī)器學(xué)習(xí)算法。雖然恒定學(xué)習(xí)率對(duì)于L-平滑和γ-強(qiáng)凸目標(biāo)函數(shù)表現(xiàn)良好[18],但是還可以利用一些內(nèi)在屬性來加速機(jī)器學(xué)習(xí)算法的收斂[19]。因此,本研究引入加速因子σ 指導(dǎo)DisSAGD的學(xué)習(xí)率變化,如式(6)所示。
由于DisSAGD的工作節(jié)點(diǎn)每次迭代需要使用采樣策略進(jìn)行模型訓(xùn)練,因此確定每次迭代中隨機(jī)采樣多少樣本非常重要。在表1算法中,如果 m被設(shè)置為較大的值,就需要在迭代期間花費(fèi)很多時(shí)間更新本地參數(shù);相反,如果 m值較小,DisSAGD必須進(jìn)行額外的迭代次數(shù)以降低損失函數(shù)。在集群中,盡管異步通信允許延遲,但是當(dāng)超過允許的延遲范圍,同次迭代中訓(xùn)練速度快的工作節(jié)點(diǎn)必須等待慢速的工作節(jié)點(diǎn),即產(chǎn)生“更新滯后”問題,大大地增加了DisSAGD的收斂時(shí)間。
為了解決這一問題,本文在表2算法中采用一種自適應(yīng)動(dòng)態(tài)采樣策略,動(dòng)態(tài)調(diào)整 m。當(dāng)一個(gè)工作節(jié)點(diǎn)比其他工作節(jié)點(diǎn)更快時(shí),它將為下一次迭代采樣更多樣本,這將使更快的工作節(jié)點(diǎn)有更多時(shí)間來計(jì)算局部梯度。因此,慢速的工作節(jié)點(diǎn)有機(jī)會(huì)趕上快速工作節(jié)點(diǎn),并且等待時(shí)間顯著減少。每次迭代完成時(shí),訓(xùn)練的新本地參數(shù)將被推送到服務(wù)器,服務(wù)器將檢查所有工作節(jié)點(diǎn)是否獲取全局參數(shù)。如果工作節(jié)點(diǎn)訓(xùn)練完成太快,則需要等待其他慢速工作節(jié)點(diǎn)??焖俟ぷ鞴?jié)點(diǎn)將 m 調(diào)大為m +δ, δ是非負(fù)整數(shù)。為方便起見,令 δ =0.05m。這樣,訓(xùn)練速度快的工作節(jié)點(diǎn)每次對(duì)更多的訓(xùn)練樣本進(jìn)行采樣,同時(shí) 等待慢工作節(jié)點(diǎn)。
圖1 分布式機(jī)器學(xué)習(xí)拓?fù)?/p>
表2 DisSAGD算法的偽代碼
測(cè)試分為兩部分。首先,實(shí)驗(yàn)對(duì)具有加速因子的學(xué)習(xí)率在獨(dú)立的工作節(jié)點(diǎn)上運(yùn)行線性回歸任務(wù)。數(shù)據(jù)集采用由谷歌開源的街景門牌號(hào)碼SVHN[3],它是做線性回歸任務(wù)的經(jīng)典數(shù)據(jù)集。機(jī)器學(xué)習(xí)模型使用Alexnet[14],每個(gè)網(wǎng)絡(luò)層使用Mish[15]作為激活函數(shù)。然后,實(shí)驗(yàn)在集群環(huán)境中對(duì)另外兩個(gè)數(shù)據(jù)集分別使用異常檢測(cè)問題和分類問題來評(píng)估Dis-SAGD的性能。評(píng)估指標(biāo)有收斂性、加速效果和平均等待時(shí)間。
異常檢測(cè)問題的損失函數(shù)模型如式(7)所示
其中, x 是訓(xùn)練數(shù)據(jù),y 是機(jī)器模型的輸出值,N 是訓(xùn)練數(shù)據(jù)的大小。機(jī)器學(xué)習(xí)模型使用Resnet18[16],激活函數(shù)也是Mish。數(shù)據(jù)集采用KDDcup99,它被認(rèn)為是異常檢測(cè)問題的經(jīng)典數(shù)據(jù)集,包含463, 715個(gè)樣本,每個(gè)樣本有41個(gè)維度。
分類問題的損失函數(shù)模型如式(8)所示
同樣, x 是訓(xùn)練數(shù)據(jù),y 是機(jī)器模型的輸出值,N是訓(xùn)練數(shù)據(jù)的大小。機(jī)器學(xué)習(xí)模型使用Autoencoder[17],激活函數(shù)使用Mish。數(shù)據(jù)集采用具有代表性的Cifar-100[9]。它由60000張大小為32×32的三通道彩色圖像組成,分為20個(gè)大類,每個(gè)大類包含5個(gè)小類,總共100個(gè)小類。每個(gè)小類包含600張圖像,其中500張用于訓(xùn)練,100張用于測(cè)試。
本實(shí)驗(yàn)在星環(huán)超融合大數(shù)據(jù)一體機(jī)集群上進(jìn)行評(píng)估測(cè)試。該一體機(jī)共有32個(gè)計(jì)算節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)配備了兩個(gè)1536核CPU。m設(shè)定為1024,分布式實(shí)現(xiàn)使用第三方開源分布式機(jī)器學(xué)習(xí)系統(tǒng)tensorflow來進(jìn)行性能評(píng)估。實(shí)驗(yàn)采用異步通信,延遲設(shè)置為0.5 s,數(shù)據(jù)集分配在4個(gè)工作節(jié)點(diǎn)上。
本實(shí)驗(yàn)使用以下算法進(jìn)行了機(jī)器學(xué)習(xí)模型訓(xùn)練性能的比較:
(1) Petuum SGD[2]:該方法是使用異步方式實(shí)現(xiàn)的分布式SGD,其學(xué)習(xí)率每次迭代結(jié)束時(shí)以固定因子0.95進(jìn)行衰減,該代碼從http://petuum.github.io/下載;
(2) SSGD:該方法是SGD中最直接的分布式實(shí)現(xiàn),其主設(shè)備簡單地在每次迭代中將負(fù)載分配給工作節(jié)點(diǎn),確保工作節(jié)點(diǎn)使用相同的模型參數(shù)集執(zhí)行梯度計(jì)算,該代碼從https://github.com/codlife/Ssgd下載;
(3) DisSVRG[20]:改造了隨機(jī)方差縮減算法SVRG,使其從原來的串行單機(jī)版算法擴(kuò)展至針對(duì)大規(guī)模數(shù)據(jù)集的分布式訓(xùn)練算法;
(4) ASD-SVRG[21]:一種較新的分布式優(yōu)化算法,使用SVRG進(jìn)行自適應(yīng)采樣,基于歷史梯度局部Lipschitz常數(shù)進(jìn)行估計(jì);
(5) DisSAGD:本文提出的未采用具有加速因子學(xué)習(xí)率和未采用自適應(yīng)采樣的算法;
(6) DisSAGD-tricks:本文提出的具有加速因子學(xué)習(xí)率和自適應(yīng)采樣的算法。
KDDcup99的性能評(píng)價(jià)指標(biāo)為 F1, F1=2PR/(P +R), P 為準(zhǔn)確率,R 為召回率。當(dāng) F1值越大,效果越理想。Cifar100和SVHN數(shù)據(jù)集分別使用top5的準(zhǔn)確率作為評(píng)價(jià)指標(biāo)。各模型性能比較結(jié)果如表3所示。可看出:本文提出的DisSAGD實(shí)驗(yàn)結(jié)果比其他3種的模型性能更好,ASD-SVRG與本研究提出DisSAGD性能相當(dāng),而優(yōu)化的DisSAGDtricks比DisSAGD的模型效果更優(yōu)。這是由于本文考慮了歷史梯度的方差,使模型訓(xùn)練較為穩(wěn)定不會(huì)出現(xiàn)像使用隨機(jī)樣本時(shí)的振蕩;而且,具有自我調(diào)節(jié)的學(xué)習(xí)率使得模型可以尋找到目標(biāo)函數(shù)的鞍點(diǎn),獲 得最優(yōu)的模型參數(shù)。
圖2顯示了具有加速因子的多個(gè)學(xué)習(xí)率在獨(dú)立工作節(jié)點(diǎn)上的測(cè)試結(jié)果。橫軸表示訓(xùn)練時(shí)間,縱軸為損失函數(shù)。結(jié)果顯示:即使固定值部分很大,加速因子對(duì)算法的加速效果依然明顯。具有加速因子的學(xué)習(xí)速率使得基礎(chǔ)機(jī)器學(xué)習(xí)算法比沒有加速因子的恒定學(xué)習(xí)速率收斂得更快。當(dāng)學(xué)習(xí)率固定值部分取值較小時(shí),機(jī)器學(xué)習(xí)模型收斂效果更顯著,因此在本實(shí)驗(yàn)中可以設(shè)置λ =10-3。
圖3顯示了在分布式集群中算法的收斂效果。DisSAGD-tricks在兩個(gè)數(shù)據(jù)集上的收斂性能均優(yōu)于其他算法。在KDDcup99上,該算法的損失值隨著時(shí)間的增加迅速下降,收斂的時(shí)間少于50 s;在Cifar100上具有類似表現(xiàn)。DisSAGD算法性能依賴于具體數(shù)據(jù)集,即在KDDcup99上不超過SSGD,而在Cifar100上則優(yōu)于SSGD,但總體上的收斂性能好于PetuumSGD。ASD-SVRG的性能明顯優(yōu)于PetuumSGD和SSGD,并和DisSAGD的性能十分接近(在特定的時(shí)間二者損失函數(shù)值相等,但隨著時(shí)間的增加ASD-SVRG的性能變得越來越好);另一方面,ASD-SVRG的性能與本文提出的Dis-SAGD相當(dāng),但明顯次于優(yōu)化的DisSAGD(即本文的DisSAGD-tricks)算法。實(shí)驗(yàn)結(jié)果表明:DisSAGD采用異步方式以及基于平均梯度向量方差縮減來更新參數(shù),具有加速因子的學(xué)習(xí)速率加速了收斂,同時(shí)自適應(yīng)采樣策略顯著減少了服務(wù)器分發(fā)全局參數(shù)的等待時(shí)間。
表3 模型的F1值
圖2 不同加速因子在獨(dú)立節(jié)點(diǎn)運(yùn)行損失函數(shù)值的變化
通過改變分布式集群中的工作節(jié)點(diǎn)數(shù)量,算法的加速效果如圖4所示。DisSAGD工作節(jié)點(diǎn)數(shù)量越多時(shí)其加速越近似線性。當(dāng)使用32個(gè)工作節(jié)點(diǎn)時(shí),DisSAGD在KDDcup99數(shù)據(jù)集上的加速相對(duì)于4個(gè)工作節(jié)點(diǎn)提高了19倍。在Cifar100數(shù)據(jù)集上使用32個(gè)工作節(jié)點(diǎn)時(shí),DisSAGD可以保持接近線性的加速。這種效果主要?dú)w功于異步通信方式和方差縮減技術(shù)。異步方式使得工作節(jié)點(diǎn)之間相互獨(dú)立,不存在滯后問題,從而減少了工作節(jié)點(diǎn)之間的等待時(shí)間。方差縮減技術(shù)減少了SGD的方差,并使DisSAGD以恒定速率收斂。
圖5顯示了在獨(dú)立工作節(jié)點(diǎn)上自適應(yīng)采樣的運(yùn)行結(jié)果。在圖5(a)中,調(diào)整后的m值使目標(biāo)函數(shù)得到快速收斂。由于等待時(shí)間與節(jié)點(diǎn)數(shù)量相關(guān),算法運(yùn)行在由5個(gè)節(jié)點(diǎn)組成的集群中,其結(jié)果如圖5(b)所示。通過改變m來評(píng)估平均等待時(shí)間。延遲設(shè)置為0.05 s。很明顯,自適應(yīng)采樣策略減少了迭代期間的平均等待時(shí)間,這樣對(duì)時(shí)間折中處理使模型訓(xùn)練更加精準(zhǔn)。
圖3 不同算法之間收斂性能比較
圖4 DisSAGD算法中不同工作節(jié)點(diǎn)數(shù)量的加速效果
圖5 自適應(yīng)采樣對(duì)收斂和等待時(shí)間影響
圖6 不同延遲時(shí)間對(duì)平均等待時(shí)間和平均計(jì)算時(shí)間的影響
圖6顯示通過改變延遲τ的值,本文所提出算法的平均時(shí)間消耗。由于小延遲意味著工作節(jié)點(diǎn)之間的聯(lián)系緊密,通常會(huì)導(dǎo)致快速工作節(jié)點(diǎn)因異步通信而等待。當(dāng)延遲τ很小時(shí),平均等待時(shí)間很長。例如,當(dāng)延遲設(shè)置為0時(shí),每次迭代中服務(wù)器需要將全局參數(shù)分發(fā)到所有工作節(jié)點(diǎn),從而增加了等待時(shí)間。當(dāng)延遲變大時(shí),工作節(jié)點(diǎn)變得稀疏,等待時(shí)間急劇減少。因此,設(shè)定合理的通信延遲可以有效減少平均等待時(shí)間。盡管快速工作節(jié)點(diǎn)有更多的自由時(shí)間來進(jìn)行迭代,但是慢速工作節(jié)點(diǎn)不能在大延遲內(nèi)從服務(wù)器中獲得新的全局參數(shù),無法從快工作節(jié)點(diǎn)中受益。因而延遲不應(yīng)該設(shè)置太小或太大,它是工作節(jié)點(diǎn)等待時(shí)間和計(jì)算時(shí)間之間的折中。設(shè)置的延遲應(yīng)該使DisSAGD的總時(shí)間消耗達(dá)到最小。本實(shí)驗(yàn)中,KDDcup99數(shù)據(jù)集訓(xùn)練時(shí)的延遲τ應(yīng)設(shè)置為200,Cifar100數(shù)據(jù)集訓(xùn)練時(shí)的延遲τ應(yīng)設(shè)置為50。
為了研究設(shè)定多少個(gè)工作節(jié)點(diǎn)與服務(wù)器交互可以更好地平衡計(jì)算和等待時(shí)間的差異,本文將服務(wù)器收集到特定數(shù)量工作節(jié)點(diǎn)的模型參數(shù)開始進(jìn)行全局參數(shù)的計(jì)算,然后在整個(gè)分布式集群中迭代,結(jié)果如圖7所示。當(dāng)服務(wù)器對(duì)工作節(jié)點(diǎn)聚合數(shù)量為2~16 h,其平均等待時(shí)間隨著節(jié)點(diǎn)數(shù)量的增加逐漸減小、平均計(jì)算時(shí)間逐漸增大。對(duì)于3個(gè)數(shù)據(jù)集,其平均等待時(shí)間和平均計(jì)算時(shí)間在特定數(shù)量的工作節(jié)點(diǎn)上有交匯點(diǎn)??傮w上,平均等待時(shí)間的下降幅度大于平均計(jì)算時(shí)間的上升幅度,說明通過指定工作節(jié)點(diǎn)數(shù)量的方式不如通過設(shè)置延遲時(shí)間獲得的增益大。工作節(jié)點(diǎn)在延遲時(shí)間內(nèi)可以自適應(yīng)采樣進(jìn)行模型訓(xùn)練,從而達(dá)到較好的效率和收斂性能。
圖7 平均等待時(shí)間和平均計(jì)算時(shí)間的平衡
針對(duì)將數(shù)據(jù)分配給多個(gè)工作節(jié)點(diǎn)后的算法收斂問題和在異步通信方式下執(zhí)行全局參數(shù)分發(fā)時(shí)存在的“更新滯后”問題,本文提出了DisSAGD算法。該算法結(jié)合方差縮減技術(shù),不需要完整數(shù)據(jù)集的梯度計(jì)算或額外的存儲(chǔ),并利用損失函數(shù)的凸平滑特性,使用具有加速因子的學(xué)習(xí)率進(jìn)行優(yōu)化。本文在迭代期間采用自適應(yīng)采樣策略,使慢速工作節(jié)點(diǎn)有機(jī)會(huì)在迭代期間趕上快速工作節(jié)點(diǎn),從而減少了由滯后問題引起的等待時(shí)間。本文的局限在于:由于工作節(jié)點(diǎn)硬件限制,當(dāng)單一節(jié)點(diǎn)上數(shù)據(jù)量過多時(shí)訓(xùn)練會(huì)出現(xiàn)內(nèi)存溢滿問題;某一節(jié)點(diǎn)上出現(xiàn)較少數(shù)據(jù)時(shí),該節(jié)點(diǎn)模型不能快速收斂。