国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

面向深度學習訓練任務的自適應任務分配方法

2020-01-14 09:36陳慶奎
小型微型計算機系統 2019年12期
關鍵詞:分布式集群服務器

陳 偉,陳慶奎

(上海理工大學 光電信息與計算機工程學院,上海 200093)

1 引 言

深度學習領域的研究近幾年持續(xù)升溫,并且不斷有新的技術成果面世.近期,Google AI 團隊的一篇論文提出了一種深度雙向 Transformer 模型(BERT)[1],該模型在11個NLP 任務上(包括斯坦福問答(SQUAD)數據集)取得了目前為止最佳的性能.Nvidia的研究團隊提出了一種新型的生成模型(GAN)[2],并在視頻合成任務中取得驚人的效果.諸如此類的研究成果在深度學習領域如雨后春筍般不斷涌現.從7月到現在,機器學習領域論文發(fā)表數量的增長率一直維持在每月3.5%左右,每年的增長率達到了50%.眾所周知,深度學習的任務訓練需要大量的計算資源,而單臺普通的機器由于性能原因,很難在短時間內完成大型任務的訓練.GPU集群計算正是解決這個問題的首選方案.它既能同時完成多個單機訓練任務,也能進行單任務的分布式訓練,大大提升了訓練效率.Google在2015年年底開源了內部使用的深度學習框架TensorFlow[3,4].它可以運行多個大規(guī)模深度學習模型,支持模型生命周期管理、算法實驗,并可以高效地利用GPU資源.除此以外,還有Keras、Caffe、Theano、Torch、MXNet等深度學習框架,但從Github上可以看出開發(fā)者更傾向于使用TensorFlow,而且它在圖形分類、音頻處理、推薦系統和自然語言處理等場景下都有相對成熟的應用.

可以看出,深度學習的發(fā)展非常迅猛,相應的框架也比較成熟,而隨著深度學習網絡層數不斷增多,對硬件要求越來越高,或者說對訓練速度的要求越來越高.近些年國內外專家學者花費大量時間去優(yōu)化深度學習的各種模型[5,6]以及集群任務的調度與分配策略,目的之一就是為了能夠最大程度降低深度學習任務的訓練時間.然而這些優(yōu)化的方法都是在訓練過程中實現,也就是說,在訓練之前還需要人為設置參數,包括訓練方式以及分配資源.這些參數的設置往往依靠經驗,但并不能保證任務能夠在最短時間內訓練完成,也不能使得GPU集群的利用率最高.如何自動有效地選擇合適的訓練方式,從而最大程度地提高訓練效率以及集群的使用率,這是一個很有研究價值的實際問題.

針對上述的問題,本文創(chuàng)新性地提出一種面向深度學習訓練任務的自適應任務分配方法.實現本方法首先需要計算出深度學習訓練模型的復雜度,同時還需要知道GPU集群的計算能力、網絡帶寬等狀態(tài).前者可以通過已有的研究成果計算得出,后者可以通過查閱官方技術文檔并結合Roofline模型計算得到.然后再借鑒組合優(yōu)化的思想,根據不同訓練方式下的理論耗時,最終得出最優(yōu)的分配方案,即確定訓練方式和相應的節(jié)點.本文第二部分介紹了一些基本的背景,包括優(yōu)化深度學習算法和集群任務調度與分配的研究現狀法、Tensorflow相關知識、CNN模型復雜度分析方法以及Roofline模型介紹.第三部分介紹自適應任務分配方法的原理和具體實現過程.第四部分通過實驗論證本方法的有效性和準確性.最后第五部分對本文進行總結,同時對本方法的下一步研究工作進行展望.

2 背景介紹

2.1 研究現狀

為了提高深度學習任務的訓練效率以及整個集群系統的性能,目前國內外的研究重點在兩個方面:深度學習算法的優(yōu)化和集群中任務的調度與分配的優(yōu)化.

Matthew D.Zeiler提出Adadelta算法[7],該方法不需要手動調整學習速率,適用于不同的模型體系結構和數據形式.RMSProp是另一個自適應學習率方法,它最開始由Jeff Hinton在Coursera的課程提出,隨后被人們熟知并廣泛使用,比如文獻[8]中就用它來訓練深度神經網絡并取得很好的效果.文獻[9-11]都實現了SGD算法的并行化,FPSGD[10]通過減少cache-miss和保證共享內存內各個線程的負載均衡來提升矩陣因式分解的效率,而文獻[11]則利用環(huán)形結構組織GPU實現了卷積神經網絡并行算法.Niu Feng等人提出HogWild[12],該方法可以在沒有任何鎖機制的情況下實現SGD.文獻[13]對梯度下降過程中常用的一些優(yōu)化器(BGD、SGD、MBGD等)做了綜合的比較,并對不同優(yōu)化器的適用場景做出說明.Ioffe等人提出的Batch Normalization[14],把它作為網絡結構的一部分,規(guī)范化下一層的輸入使得訓練模型具有飽和的非線性.文獻[15]提出在分布式訓練中使用混合模式,把同步模式和異步模式的優(yōu)勢都發(fā)揮出來,從而實現更快的收斂速度,同時達到接近異步模式的吞吐速率.

文獻[16]中通過遺傳算法進行任務的最優(yōu)分配,同時結合K均值聚類算法對子集群進行動態(tài)重組,但它如果應用于深度學習任務的訓練,并沒有結合訓練方式的差異進行最優(yōu)任務分配.文獻[17]通過分析不同的任務分配方式對整個集群系統的影響,提出一種實現更公平的減速分配方法(FWP),但它只適用于運行時間相對較長的任務調度,對于短時間任務的調度性能比較糟糕.嚴健康等人結合GPU資源性能及負載情況和協同計算下自適應的流分發(fā)決策機制,設計了H-Storm異構集群的任務調度策略,但對于深度學習的部署還需要進一步研究[18].同樣,E.Ilavarasan等人提出的高效任務調度算法(PETS)[19],在異構集群環(huán)境中有很出色的表現,但是對于深度學習的應用還有待研究.

但是,深度學習算法的優(yōu)化都是對其內部結構做了相應的調整,針對不同的訓練場景需要調整不同的結構才能取得更好的效果,而任務的調度和分配相關的優(yōu)化方法,也是在確定了深度學習訓練方式之后才能發(fā)揮作用.如果可以在任務訓練之前就能預見不同任務的最佳訓練方法和最佳資源配置,而不是單純依靠經驗去手動設置這些參數,這樣就能保證每個訓練任務可以在最短的時間內完成訓練,從而進一步提高訓練的效率以及集群的利用率.

2.2 TensorFlow訓練策略

2.2.1 并行策略

對于深度學習來說,Tensorflow常用的并行策略主要包括數據并行、模型并行.另外還有模型計算流水線并行,但在實際工程中使用相對較少.

1)數據并行

在這種策略下,訓練數據集被分成很多份,不同的計算資源(GPU/CPU等)里有相同的模型副本,每個計算資源上分配不同的訓練數據,最終通過同步或者異步的方式處理損失和梯度,并更新模型.

2)模型并行

在分布式環(huán)境里,模型并行訓練的過程中,不同的計算資源負責網絡模型的不同部分,例如神經網絡模型的不同網絡層被分配到不同的計算資源,或者同一層內部的不同參數被分配到不同計算資源.

2.2.2 分布式訓練模式

TensorFlow的分布式訓練主要分為單機多GPU和多機多GPU,訓練模式分為同步模式和異步模式.對于一個很大的訓練任務來說,一般分布式訓練的時間比單機訓練要短很多,但是如果訓練過程中mini-batch的數據量很小或者運算時間很短,可能會出現單機訓練時間更短的情況,這是因為Tensorflow分布式訓練中存在大量的網絡通信開銷.

同步模式:每個計算節(jié)點計算出各自部分的梯度,然后把這些梯度傳給參數服務器PS.PS會等待所有的計算節(jié)點都計算完后,一起算出平均梯度,再去更新參數.雖然這樣隨著獲得更精確的梯度估計,可實現更快的收斂,但因為每一次更新都是同步的,其整體訓練時間取決于性能最差的那個計算節(jié)點.

異步模式:每個計算節(jié)點只需要算自己的梯度,然后參數服務器PS根據傳過來的梯度異步更新參數,這樣不同計算節(jié)點之間不存在通信和等待,所以可以有很高的吞吐量.同時,當某些計算節(jié)點因故障中途退出,對訓練結果影響都不是很大.但是因為每個計算節(jié)點之間不相互通信,所以會出現參數抖動的情況.這種方式更適用于數據量大,參數更新次數多的情況.

2.3 計算平臺的性能指標

伯克利大學的并行計算實驗室提出的Roofline模型[20],它能夠很直觀的看出由于內存消耗造成的影響和瓶頸.Roofline模型提出,計算平臺的主要性能取決于兩個指標:

1)計算平臺的計算性能上限π(單位:FLOP/s),它表示該平臺每秒能夠運算的最大浮點數的次數,它比每秒測量指令更精確.

2)計算平臺的內存帶寬上限β(單位:Byte/s),它表示計算平臺的內存每秒能完成的最大交換量.

2.4 CNN模型的復雜度分析

本文研究深度學習模型以CNN模型為例.Roofline模型的計算過程中,還需要提前計算出CNN模型的一些定量:

1)CNN模型的計算量W(單位:FLOPS[21]),它表示模型進行一次完整的前向傳播所發(fā)生的浮點運算個數,也即模型的時間復雜度.

2)CNN模型的內存消耗M(單位:Byte),它表示模型完成一次前向傳播過程中所發(fā)生的內存交換總量,也即模型的空間復雜度.

3)CNN模型的計算密度I(單位:FLOP/Byte):I=W/M.

2.5 Roofline模型

Roofline模型提出使用計算密度I進行定量分析:當I小于一定值時,整個模型的訓練過程將受限于計算平臺的內存帶寬上限β;當I大于或者等于一定值時,整個模型的訓練過程將受限于計算平臺的性能上限π.而該值就是π與β之比,也表示為計算密度的上限Imax.具體的Roofline模型如下:

圖1 Roofline模型[19]Fig.1 Roofline model[19]

從圖1中不難看出,計算平臺所能達到的理論最佳計算能力P(FLOP/s)滿足下面公式(1):

(1)

3 自適應任務分配方法

通過Roofline模型,我們可以估算出計算平臺所能達到的理論最佳計算性能,再根據深度學習模型的計算量和內存消耗,很容易能夠估算出對應的計算時間.在此基礎上,自適應任務分配方法可以根據GPU集群的中可用資源,再結合深度學習任務的模型復雜度,便能高效準確地確定最佳分配方案,集群基本結構圖如圖2所示.下面將詳細介紹該方法的實現過程,本文結合CNN模型分析.

3.1 集群的基本結構

·主控制節(jié)點Head:負責分配訓練任務到從節(jié)點.當數據服務器有新的數據,服務器組保持和數據服務器和從節(jié)點服務器組的通信.

·數據服務器:需要訓練的數據預先下載到數據服務器,可以是網絡數據.有新的訓練數會廣播給從節(jié)點據來了之后,數據服務器會通知Head.

·從節(jié)點服務器組:負責按照Head分配的任務進行訓練.各從節(jié)點會在空閑的時候從數據服務器下載最新的數據,更新本地數據.各從節(jié)點和Head保持通信,定期發(fā)送本節(jié)點的GPU使用情況.

圖2 集群基本結構圖Fig.2 Basic structure of the cluster

3.2 CNN模型的定量分析

對CNN模型的定量分析主要在兩個指標:計算量W和內存消耗M.通常W的單位使用FLOP/s(floating point operations per second)[21],也有用其它度量方式表示如MACC(Multiply-accumulate operation).不管以何種度量標準,它們都是指的矩陣叉乘,如果一次運算中不存在矩陣叉乘,則不可以使用該類指標.M的單位是Byte,一般所有的層都需要考慮到內存消耗.CNN模型中主要的層:卷積層和全連接層[22].當然,還有其他層包括激活層和池化層等,其在整個訓練過程中占的時間只是很少的一部分.下面將具體介紹這兩個定量的計算過程,以卷積層的一次前向傳播過程為例.

第i層為卷積層的計算量Wi如公式(2):

(2)

其中,K表示該層每個卷積核(Kernel)的邊長;Cini表示該層輸入每個卷積核的通道數;Houti和Wouti分別表示該層輸出的特征圖(Feature Map)的高和寬;Couti表示該層卷積核的個數;即輸出通道數.

第i層為卷積層的內存消耗如公式(3):

(3)

由于通常數據的單位為float32,而M的單位為Byte,因此需要乘以4.

CNN模型一次前向傳播過程中的總計算量和總內存消耗如公式(4)和公式(5):

(4)

(5)

3.3 訓練過程中的時間

深度學習任務的訓練過程一般需要利用GPU來提高訓練速度.按照GPU的使用情況可以還可以把分布式訓練分為單機多GPU和多機多GPU兩種情況.為了簡化模型,本文提出的集群均采用單機單GPU配置,所涉及的分布式訓練均指多機單GPU.

一個訓練任務的總耗時會因不同的訓練類型而不同.單機訓練的情況下,總耗時主要包括理論計算時間和部分因其他因素影響而造成的額外時間開銷.分布式訓練的情況下,總耗時主要包括理論計算時間、節(jié)點間網絡通信時間和部分因其他因素影響而造成的額外時間開銷.

單機訓練情況下:

Ttotal=τ+η

(6)

其中,τ表示本次訓練中該從節(jié)點的理論計算耗時下限,η表示整個訓練過程中因其他因素影響而造成的時間開銷影響而造成的時間開銷.由Roofline模型可以得到在Memory-Bound區(qū)域和Compute-Bound區(qū)域中τ的關系,如公式(7):

(7)

分布式訓練情況下:

Ttotal=τ+Ttrans+η

(8)

其中,Ttrans表示分布式訓練情況下的節(jié)點間的網絡通信時間:

(9)

其中,B(單位:bit/s)表示網絡帶寬,而M的單位是Byte,因此要乘以8,一般實際傳輸時間要大很多.

自適應任務分配方法的目的是找到一種最優(yōu)的任務分配方案,即確定CNN模型的訓練方式以及相關的計算節(jié)點.因此,最小化訓練總時間為目標函數,如公式(10):

Ttotal=Min{T1,…,Tn}

(10)

單機訓練情況下:

把公式(6)帶入公式(10)得到公式(11):

Ttotal=Min{τ1+η1,τ2+η2,…,τn+ηn}

(11)

分布式訓練情況下:

把公式(8)帶入公式(10)得到公式(12):

Ttotal=Min{τ1+Ttrans1+η1,…,τm+Ttransm+ηm}

(12)

其中,m表示第m種分布式訓練的組合情況.

接下來進一步分析分布式訓練下,第m種組合的具體參數可以表示如下:

τm={τm1,τm2,…,τmn}(1

(13)

Ttransm={Ttransm1,Ttransm2,…,Ttransmn}(1

(14)

ηm={ηm1,ηm2,…,ηmn}(1

(15)

其中公式(13)中τmn表示該組合下第n個節(jié)點的理論計算時間,公式(14)中的Ttransmn表示該組合下第n個節(jié)點的網絡通信時間,公式(15)表示該組合下第n個節(jié)點因其他因素影響而造成的時間開銷.N表示集群中從節(jié)點的數.

分布式訓練中整體的訓練時間由訓練最慢的那個節(jié)點決定,那么該組合下的整體時間就可以表示為公式(16):

Ttotalm=Max{τm1+Ttransm1+ηm1,…,τmn+Ttransmn+ηmn}

(1

(16)

這樣,我們就可以進一步表示出分布式訓練情況下,所有組合中總體時間最小的公式:

Ttotal=Min{Max{T11,T12,…,T1n},…,Max{Tm1,Tm2,…,Tmn}} (1

(17)

其中,Tmn表示第m種組合下第n個節(jié)點的訓練總時間.

把公式(11)和公式(17)整合一下可以得到模型的目標函數:

(18)

3.4 算法描述

當集群中的主控制節(jié)點收到新的深度學習訓練任務指令后,會分析本次任務的深度學習模型,并結合集群中可用的GPU資源,找到最合適的任務分配方案.具體的計算步驟如下:

1)主控制節(jié)點Head通過廣播,檢測集群中可用的從節(jié)點資源,得到數組Array.Array是可用節(jié)點的集合,其中每個節(jié)點還包含編號、GPU的算力(capability)以及GPU的最大帶寬(bandwidth)等屬性.如果Array為空,則繼續(xù)執(zhí)行步驟1;否則執(zhí)行下一步;

2)為了更快確定最優(yōu)分配方案,需要對Array先根據Roofline模型計算出理論計算能力(公式(2)),然后按照該值排序(參考算法1).其中計算總量W和內存消耗M這兩個定量需要根據CNN模型結構提前計算得到(公式(4)、公式(5));而計算平臺的計算性能上限π和內存帶寬上限β可以通過技術文檔獲取;

3)接下來分情況討論:獨立訓練Independent和分布式訓練Distributed.如果只有1個可用節(jié)點,則選擇獨立訓練方式,執(zhí)行步驟8;否則執(zhí)行下一步;

4)根據公式(11)計算出獨立訓練方式下,理論的最短總時間Tmin_I和對應的分配節(jié)點UsedNodes_I,其中其他時間開銷ηn等于每個節(jié)點的歷史額外開銷的均值,初始值為0;

5)根據公式(12)計算出分布式訓練方式下預計的最短總時間Tmin_D和對應的分配節(jié)點組UsedNodes_D.根據集群中使用的網絡帶寬B和訓練模型的M計算得出網絡通信時間Ttrans(公式(9));

6)再根據公式(18),比較兩種方式下的最短總時間,確定最終方案.如果選擇獨立訓練,則執(zhí)行步驟8;否則執(zhí)行下一步;(步驟3~6可參考算法2)

7)比較分配方案UsedNodes_D中各節(jié)點的計算能力差異,一般通過比較它們的方差大小來進一步決定使用同步模式還是異步模式;

8)配置訓練腳本,開始訓練.

算法1.求出計算節(jié)點實際的最大計算能力,并排序

Input:anArrayof all available nodes,the number of operationsWand the number of bytes of memory trafficM

Output:anArraysorted by attainable compute

1.functionSortByCompute(Array,W,M)

2.I←W/M// operational intensity

3.fori=0→Array.length()-1do

4.π←Array[i].[′capability′]//node′s compute capability

5.β←Array[i].[′bandwidth]//node′s memory bandwidth

6.ifπ/β>Ithen

7.Array[i].[′compute′] ←β*I

8.else

9.Array[i].[′compute′] ←π

10.endif

11. end for

12. Quicksort(Array,0,Array.length()-1)// sorted by attainable compute

13.returnArray

14.endfunction

15.function Quicksort(Array,left,right)

16.ifleft

17.p← Partition(Array,left,right)

18. Quicksort(Array,left,p-1)

19. Quicksort(Array,p+1,right)

20.endif

21.end function

22.function Partition(Array,left,right)

23.pivot←Array[right].[′compute′]

24.i←left

25.forj=left→right-1do

26. ifA[j].[′compute′] <=pivotthen

27.swap(A[j].[′compute′],A[i].[′compute′])

28.i←i+1

29.endif

30. end for

31.swap(A[right].[′compute′],A[i].[′compute′])

32.returni

33.endfunction

算法2.確定最佳的分配方案,包括訓練方式和相關的計算節(jié)點

Input:anArrayof ranked available nodes

Output:theTrepresents the training method and the

UsedNodesrepresents related nodes

1.Combination← […]

2.functionAdaptiveAllocation(Array)//W,M,π,

3.T←NULL

4.ifArray.length()=1then

5.T← ′Independent′

6.Tmin,UsedNodes←M/Array[0].[′compute′]+Array[0].[′extracost′]

7.else

8.Tmin_I,UsedNodes_I← Min(M/Array[0…j].[′compute′]+Array[0…j].[′extracost′])

9. Combination(Array,0,NULL)

10. SortByNumber(Combination)

11.Tmin_D,UsedNodes_D← Min(M/Combination[0…j].[′compute′]+Combination[0…j].[′extracost′])

12.ifTmin_I

13.T← ′Independent′

14.UsedNodes←UsedNodes_I

15.else

16.T← ′Distributed

17.UsedNodes←UsedNodes_D

18.endif

19. end if

20. returnT,UsedNodes

21.endfunction

22.function Combination(Array,i,name)//namerepresents the number of each node

23.ifi=Array.length()then

24.ifname!=NULLandname.length() > 1then

25.Combination.append(name)

26.return

27. end if

28. end if

29. Combination(Array,i+1,name)

30. Combination(Array,i+1,name+Array[i])

31.endfunction

4 實驗結果和分析

4.1 實驗環(huán)境

本次實驗采用局域網小型集群,包括1臺主控制節(jié)點Head、1臺數據服務器和3臺從節(jié)點服務器.所有節(jié)點的系統均為Ubuntu16.04.10.其中,Head的CPU為8核Intel(R)Core(TM)i7-7700 CPU @ 3.60GHz.另外3臺從節(jié)點服務器內存均為32G,1臺服務器GPU為GeForce GTX1080,顯存8G;2臺服務器GPU為GeForce GTX970,顯存4G.局域網的網絡帶寬為100Mbit/s.

本次實驗訓練采用經典的手寫數字數據集MNIST.開發(fā)環(huán)境中使用Python3.6,Tensorflow-gpu版本為1.3.0.選取的CNN模型為Alexnet網絡[23],具體參數可參考表1.

表1 Alexnet網絡具體參數
Table 1 Specific parameters of Alexnet

LayerTypeKernelSizeKernelMemOutputSizeOutMemFLOPSInputLayer00(28,28,1)7840Conv1(11,11,1,96)11616(28,28,96)752649106944Relu00(28,28,96)752640LRN100(28,28,96)752640Maxpool100(14,14,96)188160Conv2(5,5,96,256)614400(14,14,256)50176120422400Relu00(14,14,256)501760LRN200(14,14,256)501760Maxpool200(7,7,256)125440Conv3(3,3,256,384)884736(7,7,384)1881643352064Conv4(3,3,384,384)1327104(7,7,384)1881665028096Conv5(3,3,384,256)884736(7,7,256)1254443352064Dense1(12544,4096)51380224(4096,)409651380224Relu00(4096,)40960Dense2(4096,4096)16777216(4096,)40961677216Relu00(4096,)40960Dense3(4096,10)40960(10,)1040960

由表1可以計算出該Alexnet網絡的一次前向傳播的計算量約為334MFLOPS,內存消耗約為289MB,故計算密度約為1.16FLOP/Byte.通過查閱英偉達官網技術文檔,得知GeForce GTX1080的π為6.1TFOLP/s,β為352GB/s,其最大計算密度Imax為17.33FLOP/Byte;GeForce GTX970的π為5.2TFOLP/s,β為232GB/s,其最大計算密度Imax為22.41FLOP/Byte.顯而易見,該Alexnet網絡計算過程在Roofline模型的Memory-Bound 區(qū)域,對應GeForce GTX1080和GeForce GTX970的理論計算能力分別為408.32GFLOP/s、269.12GFLOP/s.

4.2 實驗分析

在本實驗中,首先利用自適應任務分配算法根據當前的情況確定分配方案,即理論最優(yōu)方案;然后通過對比實驗分別比較單機訓練情況下和分布式訓練情況下各種組合所消耗的時間,找出實際耗時最短的方案,即實際最優(yōu)方案;最后通過對比理論最優(yōu)方案和實際最優(yōu)方案是否一致,從而判斷本次實驗中自適應任務分配方法是否準確.

針對當前實驗環(huán)境,運行自適應任務分配算法最終給出的結果:單機訓練,節(jié)點選擇Node1(即GPU為GTX1080的節(jié)點).

接下來需要做多組實驗,找出當前資源下,訓練該Alexnet網絡耗時最短的情況.經過預訓練可以發(fā)現,該模型在訓練50個epoch后,損失率達到最小.所以下面的實驗主要比較訓練前50個epoch所用時間.

4.2.1 單機訓練情況

由圖3可以看出,單機訓練情況下,GTX1080訓練同等數量epoch所消耗時間明顯小于GTX970訓練耗時.上文已經計算出該實驗環(huán)境下GTX1080和GTX970的理論計算能力分別為408.32GFLOP/s、269.12GFLOP/s,前者是后者的1.52倍,而時間消耗上前者比后者降低了54.5%.因此,圖3的實際結果與理論預期基本上相符合.

圖3 單機訓練情況下的時間比較Fig.3 Comparison of time in different stand-alone training situations

4.2.2 分布式訓練情況

Tensorflow下的分布式訓練主要分為同步模式和異步模式.本實驗為多機單GPU的情況,假設分布式訓練過程中每個GPU顯存的占用率為100%.所有的分布式訓練組合一共有三種:

a)GTX1080+GTX970

b)GTX1080+GTX970+GTX970

c)GTX970+GTX970

訓練過程中的參數服務器(PS)均設置在計算能力較強的那個節(jié)點上.具體訓練情況如圖4和圖5.

由圖4可以看出,GTX970+GTX970的組合耗時明顯低于其他兩種情況,耗時約為其它兩種情況的59.3%.而GTX1080+GTX970+GTX970和GTX1080+GTX970這兩種情況的耗時較大且基本相同,其實這并沒有問題,因為上文介紹過在同步模型下,整體的性能取決于計算速度最慢的那個節(jié)點服務器.所以同時包含GTX970和GTX1080的組合耗時還是由GTX970來決定,因此耗時相對較大.而GTX970+GTX970的組合耗時較小的原因是,兩個計算節(jié)點的計算能力相同,可以更快地實現收斂,從而提高整體的計算速度.值得注意的是,GTX1080+GTX970+GTX970的組合由于PS在GTX1080的服務器節(jié)點,所以它和兩個GTX970服務器節(jié)點需要消耗大量的通信時間,而GTX970+GTX970兩個節(jié)點之間的通信時間相對較小,因此后者的耗時比前者耗時小.

圖4 同步模式情況下的時間比較Fig.4 Time comparison in synchronous mode

由圖5可以看出,包含GTX1080的兩個組合訓練時間相差不大,GTX970+GTX970的組合耗時相對較大,比前兩個組合增加了約6.2%.上文介紹過,異步模式可以提高吞吐量,每個節(jié)點訓練完當前mini-batch后立即更新參數,這樣就可以發(fā)揮計算能力較強的節(jié)點的優(yōu)勢.在本實驗中,比較GTX970+GTX970和GTX1080+GTX970兩種訓練情況,就可以看出后者消耗時間小于前者,就是因為兩者通信時間差不多但后者的GTX1080計算能力相對較大.再比較GTX1080+GTX970和GTX1080+GTX970+GTX970這兩種情況,可以看出耗時基本相同,原因就是后者的通信時間相對較大,所以最終的耗時和前者基本相同.

圖5 異步模式情況下的時間比較Fig.5 Time comparison in asynchronous mode

4.2.3 綜合比較分析

通過對比圖3、圖4和圖5中的最短耗時情況得到圖6,可以看出,GTX1080服務器節(jié)點進行單機訓練耗時比GTX970+GTX970同步模式情況下降低了8.1%,比GTX1080+GTX970異步模式情況下降低了2.3%.GTX1080單機訓練時間和GTX1080+GTX970組合的分布式訓練耗時相差并不是很大,這是因為節(jié)點間的通信消耗了大量的時間,而且該時間成本已經大于節(jié)點的計算時間.也就是說,通過多組實驗表明,在當前的GPU集群資源下,使用GTX1080服務器節(jié)點進行單獨訓練Alexnet網絡是最佳選擇.這一結果和自適應任務分配算法計算出來的理論最優(yōu)分配方案一致,說明本次實驗有效地論證了該方法的合理性和有效性.

在同樣的實驗環(huán)境下,進行1000組相同的實驗,大部分實驗結果都表明自適應任務分配算法計算出來的理論最優(yōu)分配方案和實際最優(yōu)分配方案一致,得到91.6%的高準確率(結果一致的次數/實驗的總次數).但是,有部分實驗結果出現了理論最優(yōu)分配方案與實際最優(yōu)分配方案不符的情況,經研究發(fā)現,可能是網絡的不穩(wěn)定或者GPU長時間工作導致性能下降等原因.綜上所述,本文所提出的自適應任務分配方法,可以有效地、高準確率地實現最優(yōu)任務分配,從而在很大程度上提高了任務的訓練效率以及集群的使用率.

圖6 不同情況下的最短時間對比Fig.6 Shortest time comparison in different modes

5 總 結

本文提出的面向深度學習訓練的自適應任務分配方法,可以根據當前GPU集群的可用資源,同時結合訓練模型的復雜度,高效準確地找到耗時最短的分配方案,從而確定訓練方式和具體的計算節(jié)點.本方法解決了人為配置訓練方式以及分配資源而不能保證訓練耗時最短的問題,提高了整體的訓練效率和集群的利用率.本方法有別于傳統的深度學習的優(yōu)化算法,而是結合深度學習的特點和集群任務分配的特點,從組合優(yōu)化的角度去確定最優(yōu)分配方案,所以具有一定的創(chuàng)新性和簡單高效且易于實現的優(yōu)點.在異構GPU集群中訓練Alexnet網絡,可以得到91.6%的高準確率.除此以外,它還具有廣泛的適用性,能夠應用于同構或者異構的集群環(huán)境,以及部署了其他深度學習框架的集群中.后續(xù)的研究工作中,還需進一步提高本方法的健壯性,比如網絡出現不穩(wěn)定或者動態(tài)分配任務的情況下,如何繼續(xù)保證整體耗時最短.

猜你喜歡
分布式集群服務器
功能性新材料產業(yè)集群加速形成
淺析分布式發(fā)電對電力系統的影響
海上小型無人機集群的反制裝備需求與應對之策研究
PowerTCP Server Tool
BlackJumboDog
培育世界級汽車產業(yè)集群
2018年全球服務器市場將保持溫和增長
基于預處理MUSIC算法的分布式陣列DOA估計
勤快又呆萌的集群機器人
分布式并聯逆變器解耦電流下垂控制技術