陳明浩,陳慶奎
(上海理工大學(xué) 光電信息與計(jì)算機(jī)工程學(xué)院,上海 200093)
近幾年物聯(lián)網(wǎng)的發(fā)展,數(shù)以百千萬個(gè)邊緣節(jié)點(diǎn)通過無數(shù)網(wǎng)絡(luò)節(jié)點(diǎn)鏈接在一起進(jìn)行數(shù)據(jù)交互、分析,同時(shí)越來越多的節(jié)點(diǎn)設(shè)備也在通過物聯(lián)網(wǎng)方式不斷加入,邊緣設(shè)備的智能化已經(jīng)大勢(shì)所趨[1]。由于邊緣節(jié)點(diǎn)自身硬件資源限制,往往需要通過遠(yuǎn)程的云計(jì)算資源為用戶提供相關(guān)服務(wù),云端服務(wù)器仍承擔(dān)著巨大的計(jì)算負(fù)載[2]。因此在邊緣節(jié)點(diǎn)上搭載神經(jīng)網(wǎng)絡(luò)成為新的趨勢(shì)。但由于節(jié)點(diǎn)設(shè)備自身硬件性能與網(wǎng)絡(luò)通信環(huán)境的限制,目前難以全部實(shí)現(xiàn)[3]。
為了解決低性能邊緣節(jié)點(diǎn)難以搭載神經(jīng)網(wǎng)絡(luò)的問題,本文提出通過改進(jìn)Roofline模型對(duì)通信環(huán)境、邊緣設(shè)備與神經(jīng)網(wǎng)絡(luò)參數(shù)三者進(jìn)行動(dòng)態(tài)評(píng)估,并根據(jù)評(píng)估指標(biāo)對(duì)不同的神經(jīng)網(wǎng)絡(luò)計(jì)算任務(wù)進(jìn)行動(dòng)態(tài)適應(yīng)性劃分方法,使得邊緣節(jié)點(diǎn)與服務(wù)器節(jié)點(diǎn)能夠共同完成神經(jīng)網(wǎng)絡(luò)計(jì)算任務(wù)。實(shí)驗(yàn)結(jié)果表明,對(duì)計(jì)算任務(wù)的適應(yīng)性分配,能夠避免邊緣節(jié)點(diǎn)計(jì)算資源的浪費(fèi),降低服務(wù)器節(jié)點(diǎn)的通信與計(jì)算開銷。該方法克服了邊緣節(jié)點(diǎn)的硬件條件限制,將邊緣設(shè)備與神經(jīng)網(wǎng)絡(luò)進(jìn)行有效結(jié)合,表現(xiàn)出優(yōu)良效果。
目前將神經(jīng)網(wǎng)絡(luò)計(jì)算與邊緣設(shè)備節(jié)點(diǎn)相結(jié)合主要分為兩種方式:①運(yùn)用客戶端/服務(wù)器架構(gòu)模式(C/S模式);②對(duì)網(wǎng)絡(luò)模型進(jìn)行優(yōu)化。
傳統(tǒng)的C/S架構(gòu)模式,是指通過邊緣節(jié)點(diǎn)獲取數(shù)據(jù)信息,將采集的信息傳輸至中心服務(wù)器,服務(wù)器結(jié)合神經(jīng)網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)處理分析。該模式保證了計(jì)算結(jié)果的高精度性,并避免了邊緣設(shè)備終端的自身硬件性能的限制。但C/S架構(gòu)模式面臨著的巨大通信開銷,以及服務(wù)器資源分配調(diào)度等問題。文獻(xiàn)[4]提出通過對(duì)于通信數(shù)據(jù)進(jìn)行壓縮,優(yōu)化傳輸功耗實(shí)現(xiàn)了通信時(shí)間延遲以及邊緣節(jié)點(diǎn)的物理損耗。文獻(xiàn)[5]結(jié)合了邊緣設(shè)備任務(wù)優(yōu)先級(jí),設(shè)備運(yùn)算性能,任務(wù)完成時(shí)間等條件,自適應(yīng)調(diào)用Max-Min與Min-min算法進(jìn)行任務(wù)分配。但邊緣設(shè)備節(jié)點(diǎn)不斷增多,中心服務(wù)器仍面臨著巨大的負(fù)載壓力。
優(yōu)化網(wǎng)絡(luò)模型,則主要分兩種情況。第一種情況,若邊緣設(shè)備硬件條件良好,則對(duì)傳統(tǒng)神經(jīng)網(wǎng)絡(luò)模型進(jìn)行參數(shù)壓縮從而達(dá)到模型優(yōu)化。文獻(xiàn)[6]通過在保證網(wǎng)絡(luò)結(jié)構(gòu)的前提下進(jìn)行網(wǎng)絡(luò)修剪,去除不重要的網(wǎng)絡(luò)連接,減少模型冗余,達(dá)到降低模型復(fù)雜度的目的。文獻(xiàn)[7]基于遷移卷積濾波器的方式設(shè)計(jì)新型結(jié)構(gòu)卷積濾波器,縮小計(jì)算規(guī)模。文獻(xiàn)[8]指出借助復(fù)雜的神經(jīng)網(wǎng)絡(luò)訓(xùn)練結(jié)果訓(xùn)練新型網(wǎng)絡(luò),從而減少計(jì)算開銷,優(yōu)化網(wǎng)絡(luò)模型。第二種情況,若邊緣設(shè)備自身硬件性能較為低下,難以支撐傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)模型,則選擇搭載輕量化網(wǎng)絡(luò)模型。輕量化模型主要通過改變自身網(wǎng)絡(luò)結(jié)構(gòu),減少參數(shù)量,從而減少存儲(chǔ)空間的占用,降低計(jì)算開銷。輕量化模型主要包括:①基于流線型架構(gòu),使用分離卷積核,深度可分離卷積的MobileNet[9];②借鑒ResNet[10]分組卷積,采用各點(diǎn)卷積的ShuffleNet;③采用個(gè)點(diǎn)卷積,并利用Squeeze layer限制通道數(shù)的SqueezeNet[11]等。神經(jīng)網(wǎng)絡(luò)模型的輕量化,讓越來越多節(jié)點(diǎn)設(shè)備能夠成功搭載神經(jīng)網(wǎng)絡(luò),使之得到充分的利用。但模型的壓縮與輕量化難以保證運(yùn)算結(jié)果精度的準(zhǔn)確性,目前生活中仍有大部分邊緣節(jié)點(diǎn)設(shè)備無法支持輕量化模型的計(jì)算。
為了使邊緣計(jì)算節(jié)點(diǎn)進(jìn)行神經(jīng)網(wǎng)絡(luò)計(jì)算,同時(shí)避免上述兩種方式的現(xiàn)有問題。本文提出了一種創(chuàng)新性地解決方案,在確保計(jì)算結(jié)果準(zhǔn)確性的同時(shí)減輕服務(wù)器原計(jì)算負(fù)載與傳輸延遲,即對(duì)深度神經(jīng)網(wǎng)絡(luò)模型進(jìn)行可分離式拆分。根據(jù)不同節(jié)點(diǎn)設(shè)備的網(wǎng)絡(luò)環(huán)境與硬件性能瓶頸,動(dòng)態(tài)分配計(jì)算任務(wù),其它部分計(jì)算任務(wù)則通過網(wǎng)絡(luò)傳輸由中心服務(wù)器進(jìn)行完成。從而充分利用大批移動(dòng)設(shè)備的空閑計(jì)算力,使邊緣設(shè)備得到利用,同時(shí)降低傳輸延遲,減輕服務(wù)器的負(fù)載壓力。
本文對(duì)Roofline模型進(jìn)行改進(jìn),選取神經(jīng)網(wǎng)絡(luò)模型作為分析對(duì)象。結(jié)合節(jié)點(diǎn)設(shè)備自身性能以及網(wǎng)絡(luò)環(huán)境,分析設(shè)備在網(wǎng)絡(luò)計(jì)算過程中產(chǎn)生的計(jì)算與通信開銷,進(jìn)行動(dòng)態(tài)計(jì)算任務(wù)分配。
神經(jīng)網(wǎng)絡(luò)模型與節(jié)點(diǎn)設(shè)備需要相互“配合”,才能發(fā)揮各自的性能優(yōu)勢(shì)。因此不僅需要對(duì)節(jié)點(diǎn)設(shè)備進(jìn)行分析,還需要對(duì)網(wǎng)絡(luò)模型進(jìn)行性能評(píng)估。伯克利大學(xué)并行計(jì)算實(shí)驗(yàn)室的Williams和Patterson提出了Roofline模型,該模型可將復(fù)雜的性能問題進(jìn)行可視化描述從而進(jìn)行相關(guān)的性能評(píng)估[12]。Roofline模型指出計(jì)算設(shè)備的性能指標(biāo)主要有兩點(diǎn):①每秒浮點(diǎn)運(yùn)算最大次數(shù)π(單位FLOP/s),指的是系統(tǒng)每秒內(nèi)所執(zhí)行的最大浮點(diǎn)運(yùn)算次數(shù)。②內(nèi)存帶寬上限M(單位 Byte/s),指的是系統(tǒng)每秒可進(jìn)行內(nèi)存交換的字節(jié)數(shù)最大值[13]。模型同時(shí)提供了評(píng)估網(wǎng)絡(luò)模型性能的指標(biāo):①計(jì)算量O(單位FLOAPS)指模型進(jìn)行一次完整的輸入計(jì)算所產(chǎn)生浮點(diǎn)計(jì)算總數(shù)。②內(nèi)存訪問量T(單位 Bytes) 指模型進(jìn)行一次完整的輸入計(jì)算能夠達(dá)到最高的內(nèi)存交換量,亦稱作空間復(fù)雜度。③計(jì)算密度I(單位 FLOP/Byte):指模型的計(jì)算量與內(nèi)存訪問量的比值,計(jì)算方式如式(1)所示
(1)
2.1.1 Roofline模型
提出Roofline模型的目的是為了能夠創(chuàng)建適用于共享內(nèi)核系統(tǒng)的可視化模型。發(fā)展至今,該模型已被廣泛用來評(píng)估設(shè)備系統(tǒng)性能[14]。它表達(dá)出設(shè)備的內(nèi)存帶寬與設(shè)備最佳性能之間的關(guān)系,節(jié)點(diǎn)設(shè)備實(shí)際可達(dá)到的最大浮點(diǎn)計(jì)算量F的計(jì)算方法如式(2)所示
(2)
當(dāng)計(jì)算密度小于某一閾值Imax時(shí),節(jié)點(diǎn)可達(dá)到的最大計(jì)算性能,受自身內(nèi)存帶寬上限控制。當(dāng)計(jì)算密度大于閾值Imax時(shí),可達(dá)到的計(jì)算性能取決于系統(tǒng)的最大浮點(diǎn)計(jì)算性能上限π,其關(guān)系如圖1所示。
圖1 Roofline模型構(gòu)
2.1.2 Roofline模型的擴(kuò)展
由于原始Roofline模型一般研究的對(duì)象為單機(jī)平臺(tái)理論評(píng)估,并沒有考慮到節(jié)點(diǎn)設(shè)備在實(shí)際應(yīng)用中與外部機(jī)器進(jìn)行數(shù)據(jù)通信占用系統(tǒng)性能的情況。為了評(píng)估因數(shù)據(jù)通信產(chǎn)生的影響,本文對(duì)傳統(tǒng)Roofline模型進(jìn)行改進(jìn),引用新的參數(shù)指標(biāo):①數(shù)據(jù)通信帶寬Mc(單位BPS),指設(shè)備進(jìn)行數(shù)據(jù)通信時(shí)單位時(shí)間內(nèi)傳輸?shù)臄?shù)據(jù)量。②網(wǎng)絡(luò)傳輸字節(jié)數(shù)N(單位Byte),指設(shè)備進(jìn)行一次數(shù)據(jù)網(wǎng)絡(luò)通信傳輸?shù)淖止?jié)數(shù)。③通信計(jì)算密度Ic(單位 FLOP/Byte)指設(shè)備在單次網(wǎng)絡(luò)通信中設(shè)備總計(jì)算量與通信字節(jié)數(shù)的比值,其計(jì)算方式如式(3)所示
(3)
節(jié)點(diǎn)設(shè)備在進(jìn)行數(shù)據(jù)通信時(shí),可達(dá)到的最大計(jì)算性能F計(jì)算公式如式(4)所示
(4)
由式(4)可看出,當(dāng)系統(tǒng)應(yīng)用的通信計(jì)算密度小于特定閾值Icmax時(shí),系統(tǒng)的達(dá)到的最大計(jì)算性能由通信帶寬主導(dǎo)。當(dāng)通信計(jì)算密度大于閾值Icmax時(shí),可達(dá)到的最大計(jì)算性能受限于該系統(tǒng)的浮點(diǎn)計(jì)算性能上限π。在原始Roofline模型基礎(chǔ)上進(jìn)行改進(jìn),通過將通信計(jì)算密度與數(shù)據(jù)通信帶寬替換原始模型中的平臺(tái)計(jì)算密度與存儲(chǔ)器帶寬可以得到新Roofline模型如圖2所示。
圖2 新Roofline模型
2.2.1 計(jì)算分析
本文選取卷積神經(jīng)網(wǎng)絡(luò)作為分析對(duì)象,卷積神經(jīng)網(wǎng)絡(luò)主要包括卷積層、線性整流層、池化層、損失函數(shù)層[15]。不同神經(jīng)網(wǎng)絡(luò)模型之間結(jié)構(gòu)的主要區(qū)別在于計(jì)算層的數(shù)量以及排序不同。卷積層是卷積神經(jīng)網(wǎng)絡(luò)最重要的一環(huán),并且它數(shù)據(jù)計(jì)算量占據(jù)了整個(gè)網(wǎng)絡(luò)計(jì)算量的絕大部份,因此以卷積層為例并進(jìn)行著重分析,其它層的計(jì)算方法與卷積層計(jì)算方法類似將不詳細(xì)介紹。卷積層的結(jié)構(gòu)如圖3所示。
圖3 卷積層解析
從圖3中可看出,卷積層的輸入?yún)?shù):Hn為輸入的高度,Wn為輸入的寬度,常規(guī)計(jì)算中有Hn=Wn,Dn為輸入的深度。卷積核的計(jì)算參數(shù)包括:Fh為卷積核的高度,F(xiàn)w為卷積核的寬度,常規(guī)計(jì)算中Fh=Fw,F(xiàn)d為卷積核的深度,默認(rèn)卷積核深度與輸入核深度相同,卷積核個(gè)數(shù)為N。單層卷積的輸入?yún)?shù)量Tn如式(5)[16]所示
Tn=Hn*Wn*Dn
(5)
卷積核的總參數(shù)量Fn如式(6)所示
Fn=Fd*Fh*Fw*Fd*N
(6)
單層卷積總計(jì)算開銷公式Cn如式(7)所示
Cn=Hn*Wn*Fh*Fw*Fd*N
(7)
單層卷積產(chǎn)生的內(nèi)存訪問開銷Mn滿足式(8)
(8)
卷積神經(jīng)網(wǎng)絡(luò)完成一次前向傳播總計(jì)算量Ctotal,總內(nèi)存訪問量Mtotal滿足式(9)、式(10)
(9)
(10)
2.2.2 通信分析
為了簡化模型,我們不考慮內(nèi)存之間,或網(wǎng)絡(luò)波動(dòng)產(chǎn)生的延遲。為了確定計(jì)算中的動(dòng)態(tài)參數(shù)值,編寫一個(gè)簡易的“彈球準(zhǔn)則”腳本來進(jìn)行對(duì)網(wǎng)絡(luò)通信帶寬的測(cè)量[17]。在測(cè)試中,節(jié)點(diǎn)設(shè)備發(fā)送指定固定大小的通訊消息至中心服務(wù)器,服務(wù)器收到消息后回復(fù)同樣大小的消息。節(jié)點(diǎn)設(shè)備通過計(jì)時(shí)器獲取從發(fā)送消息到接收回復(fù)消息的時(shí)間T,消息字節(jié)大小為S,通信帶寬為Mc,其計(jì)算方法如式(11)所示
(11)
假定第N層卷積層為任務(wù)分割層,則需要在完成卷積操作后將該層的計(jì)算結(jié)果進(jìn)行數(shù)據(jù)傳輸。則該傳輸數(shù)據(jù)量大小TDn如式(12)所示
(12)
其中,Hn+1為完成第N層卷積層的輸出數(shù)據(jù)尺寸,Dn+1為輸出數(shù)據(jù)的深度,其中4 Bytes為矩陣中單位值所占大小。
卷積神經(jīng)網(wǎng)絡(luò)模型完成一次完整的前向傳播計(jì)算傳輸?shù)目倲?shù)據(jù)量TDtotal滿足式(13)
(13)
數(shù)據(jù)通信效率更多依賴于網(wǎng)絡(luò)帶寬,若計(jì)算數(shù)據(jù)量較大時(shí),數(shù)據(jù)通信往往更容易成為設(shè)備平臺(tái)的性能瓶頸。
2.2.3 模型綜合分析
為了能夠綜合性評(píng)估設(shè)備運(yùn)行模型的性能,同時(shí)考慮節(jié)點(diǎn)設(shè)備的計(jì)算開銷與通信開銷。結(jié)合原始Roofline模型與新Roofline模型,構(gòu)建全新的三維模型,如圖4所示。借助新模型可以更明顯觀察出計(jì)算密度與通信計(jì)算密度對(duì)計(jì)算平臺(tái)浮點(diǎn)運(yùn)算瓶頸產(chǎn)生的影響。新模型主要參數(shù)包括浮點(diǎn)計(jì)算量、存儲(chǔ)器帶寬、通信帶寬、計(jì)算密度、通信計(jì)算密度。
圖4 Roofline三維模型
從圖4中可看出在不同計(jì)算密度以及不同通信密度條件下,系統(tǒng)可達(dá)到的最大運(yùn)算性能。X軸代表計(jì)算密度,Y軸代表通信計(jì)算密度,Z軸代表設(shè)備可達(dá)到的計(jì)算性能。系統(tǒng)進(jìn)行一定卷積計(jì)算任務(wù)時(shí),若通信計(jì)算密度固定不變,伴隨計(jì)算密度的提升,系統(tǒng)的運(yùn)算性能隨之增加。同時(shí),若計(jì)算密度不變,改變通信計(jì)算密度大小,系統(tǒng)的運(yùn)算性能也將改變。如果當(dāng)前應(yīng)用的計(jì)算密度很大時(shí),整個(gè)平臺(tái)性能可達(dá)到的性能上限將受到通信密度的制約,此時(shí)對(duì)數(shù)據(jù)通信方面的優(yōu)化對(duì)平臺(tái)產(chǎn)生的影響遠(yuǎn)比優(yōu)化計(jì)算密度產(chǎn)生的影響大的多。當(dāng)計(jì)算密度與通信計(jì)算密度分別各自達(dá)到特定值時(shí),計(jì)算平臺(tái)才能充分發(fā)揮其最大計(jì)算性能。
結(jié)合網(wǎng)絡(luò)模型的計(jì)算量分析、數(shù)據(jù)通信量分析以及系統(tǒng)自身性能參數(shù),可適應(yīng)性分配給計(jì)算設(shè)備相應(yīng)的計(jì)算任務(wù)。假定設(shè)備自動(dòng)分配k層計(jì)算任務(wù),完成第n層卷積計(jì)算時(shí)可達(dá)到的浮點(diǎn)計(jì)算性能fn如式(14)所示,設(shè)備完成計(jì)算任務(wù)時(shí)間記為TCn。在獲取每層計(jì)算峰值性能后,可預(yù)估出設(shè)備完成各層計(jì)算任務(wù)的時(shí)間以及完成一次完整模型計(jì)算所需時(shí)間TCtotal如式(15)所示,從而進(jìn)行任務(wù)分配,但設(shè)備信息或設(shè)備環(huán)境發(fā)生變化時(shí)將自動(dòng)重新評(píng)估分析
fn=Min(π,M*I,Mc*Ic)
(14)
(15)
相比于傳統(tǒng)模式服務(wù)器運(yùn)行全部計(jì)算任務(wù),利用設(shè)備節(jié)點(diǎn)計(jì)算大大減少了服務(wù)器的運(yùn)行負(fù)載,內(nèi)存訪問以及運(yùn)行時(shí)間。服務(wù)器減少的計(jì)算負(fù)載量CS如式(16)所示
(16)
服務(wù)器減少的內(nèi)存訪問量MS如式(17)所示
(17)
網(wǎng)絡(luò)數(shù)據(jù)通信減少的傳輸量TD如式(18)所示
(18)
2.2.4 系統(tǒng)運(yùn)行分析
當(dāng)邊緣設(shè)備接收到計(jì)算指令,結(jié)合自身硬件資源與當(dāng)前網(wǎng)絡(luò)狀態(tài),借助Roofline三維模型進(jìn)行性能評(píng)估,若當(dāng)前性能足以支持完成對(duì)應(yīng)層計(jì)算任務(wù),則進(jìn)行下一層,否則返回上一層,并以該層數(shù)作為任務(wù)劃分層。若網(wǎng)絡(luò)環(huán)境發(fā)生較大波動(dòng)時(shí)則將重新進(jìn)行性能評(píng)估與任務(wù)分配,以確保已分配任務(wù)的可執(zhí)行性。任務(wù)完成后,將分層信息與參數(shù)傳輸至服務(wù)器。
服務(wù)器接收到信息后進(jìn)行下一步處理,若服務(wù)器為單節(jié)點(diǎn)模式架構(gòu),其余任務(wù)將直接由該節(jié)點(diǎn)進(jìn)行完成。
若服務(wù)器為多節(jié)點(diǎn)分布式架構(gòu),則需先根據(jù)Roofline模型評(píng)估各個(gè)從節(jié)點(diǎn)的實(shí)際計(jì)算力并進(jìn)行排序。每當(dāng)主控制節(jié)點(diǎn)接收到計(jì)算指令后,將掃描各個(gè)從節(jié)點(diǎn)的工作狀態(tài),若從節(jié)點(diǎn)存在空閑節(jié)點(diǎn)則按照先前順序進(jìn)行任務(wù)分配,若不存空閑節(jié)點(diǎn)則借助AP哈希算法進(jìn)行任務(wù)調(diào)度分配,盡量使各個(gè)從節(jié)點(diǎn)均衡負(fù)載,避免某個(gè)服務(wù)器壓力過大情況的發(fā)生。
每當(dāng)系統(tǒng)設(shè)備接收到計(jì)算指令,進(jìn)行計(jì)算前,首先獲取系統(tǒng)相關(guān)參數(shù),測(cè)試網(wǎng)絡(luò)狀態(tài),并將設(shè)備閑置時(shí)間作為分配任務(wù)的時(shí)間上限Free_T,結(jié)合分析深度網(wǎng)絡(luò)模型,進(jìn)行任務(wù)分層劃分[18]。具體的分配步驟如下:
(1)獲取當(dāng)前狀態(tài)設(shè)備系統(tǒng),模型信息,并分析相關(guān)參數(shù),模型層數(shù)以及每層計(jì)算層的計(jì)算量與內(nèi)存訪問量;
(2)系統(tǒng)與服務(wù)器之間進(jìn)行數(shù)據(jù)通信,獲取當(dāng)前網(wǎng)絡(luò)實(shí)時(shí)帶寬;
(3)根據(jù)相關(guān)公式計(jì)算出系統(tǒng)計(jì)算以及通信計(jì)算密度,并確認(rèn)當(dāng)前狀態(tài)下系統(tǒng)在各層所計(jì)算時(shí)所能達(dá)到的最佳浮點(diǎn)性能(步驟(1)~步驟(3)參考算法1);
(4)根據(jù)每層的參數(shù)以及系統(tǒng)可達(dá)到的計(jì)算性能可得出每層消耗時(shí)間Ti;
(5)將每層的耗時(shí)累計(jì),若到達(dá)N層時(shí),耗時(shí)累計(jì)超過Free_T,則返回N-1層;
(6)將第N-1層作為界限進(jìn)行任務(wù)劃分(步驟(4)~步驟(6)參考算法2);
(7)若下一次計(jì)算時(shí),則返回步驟(1)重新進(jìn)行任務(wù)劃分。
算法1: 計(jì)算與數(shù)據(jù)通信分析偽代碼:
Data calculation and communication analysis of equipment
Get the System.info.
Get the Layer.info.
Time_begin = sys_gettime();
While{
length = Recv(Client_socket, buffer, Data 0);
Send_num++;
Time_end = sys_gettime ();
Time[send_num] = (Time_end - Time_begin)/2;
Mc[send_num] = Data /Time[send_num];
If(send_num == 20):
Break;
Send(Client_socket, buffer, Data, 0);
}
I ← O_Pre/T; /* Operational intensity*/
Ic ← O_Pre/N; /*Communication arithmetic intensity*/
If (M*I>π) & (Mc*Ic>π):
F←π;
Else:
F←Min(M*I, Mc*Ic);
Return F
END
算法2:計(jì)算任務(wù)劃分偽代碼:
Data calculation and communication analysis of equipment
Get the System.info.
Get the Layer.info.
Get the equipment free time.
For N = 0→Layer:
LayerTime[n]← O_Pre/F;
If Sum(LayerTime)<=Free_T:
N++;
Else:
Break;
END
分布式服務(wù)器主控制節(jié)點(diǎn)收到新的計(jì)算請(qǐng)求,對(duì)本次任務(wù)進(jìn)行分析,結(jié)合集群中可利用的計(jì)算資源,進(jìn)行任務(wù)分配。具體計(jì)算步驟如下:
(1)服務(wù)器控制節(jié)點(diǎn)通過廣播,對(duì)所有服務(wù)器進(jìn)行檢測(cè),獲取可用的從節(jié)點(diǎn)資源集合List。每個(gè)從節(jié)點(diǎn)屬性涵括其GPU算力,最大帶寬,節(jié)點(diǎn)狀態(tài)等。如果List為空,則繼續(xù)步驟(1),否則進(jìn)入下一步;
(2)為了能夠確定最優(yōu)分配方案,需先對(duì)List內(nèi)各個(gè)節(jié)點(diǎn)借助Roofline模型計(jì)算出實(shí)際計(jì)算能力,并依照結(jié)果進(jìn)行排序(步驟(1)~步驟(2)參考算法3);
(3)接下來分情況討論,若存在多個(gè)空閑服務(wù)器節(jié)點(diǎn),則依照排序?qū)⑷蝿?wù)分配給算力最高的節(jié)點(diǎn)。若只存在一個(gè)空閑服務(wù)器節(jié)點(diǎn),則直接進(jìn)行分配。若無處于空閑狀態(tài)的節(jié)點(diǎn),則借助APHASH算法進(jìn)行分配(參考算法4);
(4)配置執(zhí)行腳本開始執(zhí)行。
算法3:計(jì)算服務(wù)器節(jié)點(diǎn)實(shí)際計(jì)算力并排序:
Calculate computing power of the server node and sort
Get the Server.info.
Get the Layer.info.
I_Server←O_Other/T;
For(i=0;i M_Server ←List[i].[BandWith] If (M_ Server *I_ Server > π): List[i].[Computer]←π Else: List[i].[Computer]←M_ Server *I_ Server; QuickSort(List,left,right) Return List END 算法4:服務(wù)器節(jié)點(diǎn)任務(wù)分配: Task assignment of Server Node Get the Server.info. List_State = False If (List.length == 1): UseNode = List[0] Else: For(i=0;i If (List[i].state == Free): UseNode = List[i] List[i].[Computer]←π If (List_state == False): UseNode←APHash(List) Return UseNode END 本次實(shí)驗(yàn)設(shè)備由中心服務(wù)器與邊緣節(jié)點(diǎn)設(shè)備構(gòu)成,因由實(shí)際條件限制,服務(wù)器采用的是單節(jié)點(diǎn)模式架構(gòu)。實(shí)驗(yàn)設(shè)備信息如下:中心服務(wù)器GPU為GTX1080,8 G顯存;邊緣節(jié)點(diǎn)設(shè)備采用的是樹莓派3B型,其CPU采用的是四核1.2 GHz Broadcom BCM2837 64位處理器 1 G 內(nèi)存。實(shí)驗(yàn)環(huán)境,樹莓派編譯環(huán)境采用的是Tensorflow 1.7,服務(wù)器采用的是Tensorflow 1.3,IDE工具為Anaconda-Navigator,本文采用LeNet-5以及OpenPose神經(jīng)網(wǎng)絡(luò)模型,通過改變?nèi)蝿?wù)計(jì)算量、網(wǎng)絡(luò)環(huán)境進(jìn)行對(duì)比實(shí)驗(yàn)分析。 為了防止模型計(jì)算任務(wù)過大從而導(dǎo)致系統(tǒng)宕機(jī),首先對(duì)結(jié)構(gòu)簡單、計(jì)算量較少的LeNet-5進(jìn)行分析,LeNet-5網(wǎng)絡(luò)具體參數(shù)見表1[19]。 表1 LeNet-5網(wǎng)絡(luò)具體參數(shù) 從表1可得出完成一次LeNet-5網(wǎng)絡(luò)前向傳播計(jì)算開銷約為13.88 MFLOPS,內(nèi)存訪問量約為13.45 MB,因此可計(jì)算出該網(wǎng)絡(luò)模型的計(jì)算密度約為1.03 FLOP/Byte,根據(jù)官方文檔所示,樹莓派3B型的內(nèi)存帶寬M為1 GB/s。π為24 GFLOPS從表2可得出系統(tǒng)進(jìn)行數(shù)據(jù)傳輸速率基本不變,相對(duì)穩(wěn)定,限定傳輸速率平均在8 MB/S,系統(tǒng)數(shù)據(jù)通信密度約為38 FLOP/Byte,由此可見在本次LeNet-5計(jì)算過程中,系統(tǒng)性能受到雙條件約束:①計(jì)算任務(wù)的內(nèi)存限制;②系統(tǒng)通信帶寬限制,因此可提升計(jì)算任務(wù)工作量與復(fù)雜度,并對(duì)網(wǎng)絡(luò)通信環(huán)境進(jìn)行改善。 實(shí)驗(yàn)以200張圖片作為一個(gè)測(cè)試單位,計(jì)算完成后并以二進(jìn)制文件進(jìn)行數(shù)據(jù)傳輸。由于實(shí)驗(yàn)網(wǎng)絡(luò)中采用的每一層計(jì)算輸入輸出矩陣尺寸基本不變,其數(shù)據(jù)量在輸入圖片尺寸相同的情況下相對(duì)固定,因此本次計(jì)算數(shù)據(jù)量的大小取決于設(shè)備本身采集圖片的清晰度大小。實(shí)驗(yàn)完成相應(yīng)分層任務(wù)后進(jìn)行數(shù)據(jù)通信的結(jié)果見表2。 表2 數(shù)據(jù)通信結(jié)果 通過實(shí)驗(yàn)發(fā)現(xiàn),邊緣節(jié)點(diǎn)設(shè)備可以完成對(duì)于簡單網(wǎng)絡(luò)模型計(jì)算分層處理,于是我們通過在系統(tǒng)上運(yùn)行OpenPose網(wǎng)絡(luò)進(jìn)行分析[20,21]。因OpenPose網(wǎng)絡(luò)過于復(fù)雜,本實(shí)驗(yàn)僅對(duì)模型前26層進(jìn)行分析研究,OpenPose網(wǎng)絡(luò)具體參數(shù)見表3。 表3 OpenPose網(wǎng)絡(luò)具體參數(shù) 從表2可得出完成一次OpenPose網(wǎng)絡(luò)前向傳播計(jì)算開銷約為31 GFLOPS,內(nèi)存訪問量約為191.4 MB,因此可計(jì)算出該網(wǎng)絡(luò)模型的計(jì)算密度約為163 FLOP/Byte。π為24 GFLOPS從表2可得出系統(tǒng)進(jìn)行數(shù)據(jù)傳輸速率基本不變,相對(duì)穩(wěn)定,由于網(wǎng)絡(luò)環(huán)境限制,傳輸帶寬最高保持在速率25.5 MB/S,系統(tǒng)數(shù)據(jù)通信密度約為166 FLOP/Byte,由此可見在本次OpenPose計(jì)算過程中,系統(tǒng)的計(jì)算性能受通信帶寬限制,提高網(wǎng)絡(luò)帶寬是當(dāng)前提高系統(tǒng)性能的有效辦法。以單張圖像為例,不同分割層完成計(jì)算后進(jìn)行數(shù)據(jù)通信傳輸時(shí)間如圖5所示。 從圖5中可看出,伴隨劃分層數(shù)的深入,節(jié)點(diǎn)設(shè)備的通信傳輸時(shí)間不斷減少,最多甚至可減少90%以上。對(duì)于設(shè)備系統(tǒng)來說減少了系統(tǒng)通信開銷,釋放了更多的系統(tǒng)資源。單個(gè)節(jié)點(diǎn)通信時(shí)間減少產(chǎn)生的影響并不顯著,但若應(yīng)用到大規(guī)模節(jié)點(diǎn)設(shè)備中并采用分布式服務(wù)器架構(gòu),則將大幅度降低網(wǎng)絡(luò)通信負(fù)載。 圖5 通信時(shí)間 通過將系統(tǒng)置于不同網(wǎng)絡(luò)環(huán)境下并搭載不同神經(jīng)網(wǎng)絡(luò)模型進(jìn)行實(shí)驗(yàn),可分析出網(wǎng)絡(luò)環(huán)境質(zhì)量的好壞以及任務(wù)計(jì)算量的大小對(duì)于系統(tǒng)性能造成的影響。 系統(tǒng)搭載LeNet-5模型時(shí),在進(jìn)行不同計(jì)算層劃分時(shí)系統(tǒng)實(shí)時(shí)性能如圖6所示。 圖6 系統(tǒng)運(yùn)行LeNet-5性能 搭載OpenPose模型時(shí),在不同層進(jìn)行切分時(shí)系統(tǒng)達(dá)到的實(shí)時(shí)性能如圖7所示。 圖7 系統(tǒng)運(yùn)行OpenPose性能 結(jié)合圖6、圖7可看出,在不同的計(jì)算任務(wù)下,節(jié)點(diǎn)設(shè)備性能表現(xiàn)截然不同,若在網(wǎng)絡(luò)環(huán)境良好狀況下,計(jì)算任務(wù)的計(jì)算量越高,則系統(tǒng)內(nèi)存訪問量越高,節(jié)點(diǎn)實(shí)時(shí)性能隨之提升,直至達(dá)到峰值。因此,邊緣節(jié)點(diǎn)設(shè)備則可結(jié)合當(dāng)前網(wǎng)絡(luò)通信環(huán)境,以及自身可達(dá)到的性能峰值對(duì)計(jì)算任務(wù)進(jìn)行動(dòng)態(tài)劃分。 若在網(wǎng)絡(luò)環(huán)境較差的情況下,任務(wù)的高數(shù)據(jù)計(jì)算量已經(jīng)無法提升系統(tǒng)的性能瓶頸,因此節(jié)點(diǎn)設(shè)備將自適應(yīng)地選擇數(shù)據(jù)傳輸量相對(duì)較少的計(jì)算層進(jìn)行分離。若邊緣設(shè)備出現(xiàn)無法連接網(wǎng)絡(luò)情況,則自動(dòng)停止分配計(jì)算。 設(shè)備根據(jù)自身硬件性能與不斷變化的網(wǎng)絡(luò)環(huán)境,動(dòng)態(tài)分配邊緣節(jié)點(diǎn)計(jì)算任務(wù),有效減輕服務(wù)器負(fù)擔(dān)。以搭載OpenPose模型實(shí)驗(yàn)為例,設(shè)備搭模型,伴隨網(wǎng)絡(luò)模型分離的深入,服務(wù)器的負(fù)載逐漸降低,更多的時(shí)間、空間資源得到釋放。系統(tǒng)設(shè)備分配到的計(jì)算層數(shù)越多,服務(wù)器的所需承受壓力越少。實(shí)驗(yàn)中服務(wù)器GPU負(fù)載減少量具體情況如圖8所示。 圖8 服務(wù)器負(fù)載減少量 本文對(duì)傳統(tǒng)的邊緣節(jié)點(diǎn)計(jì)算模式進(jìn)行改進(jìn),不再將全部的計(jì)算任務(wù)交付服務(wù)器進(jìn)行計(jì)算,從而避免邊緣設(shè)備的計(jì)算資源與網(wǎng)絡(luò)通信的浪費(fèi)。通過使用全新的方法,基于邊緣設(shè)備系統(tǒng)性能以及設(shè)備網(wǎng)絡(luò)環(huán)境對(duì)神經(jīng)網(wǎng)絡(luò)模型進(jìn)行合理的動(dòng)態(tài)分離,充分利用了設(shè)備系統(tǒng)的閑置性能,減輕了服務(wù)器的負(fù)載壓力,提高了整個(gè)網(wǎng)絡(luò)系統(tǒng)的兼容性與計(jì)算通信性能。本文以卷積神經(jīng)網(wǎng)絡(luò)為例,通過對(duì)性能評(píng)估模型的改進(jìn)對(duì)設(shè)備系統(tǒng)、通信環(huán)境和計(jì)算任務(wù)進(jìn)行定量評(píng)估。同時(shí)此模型通用適合其它情境下的計(jì)算分析,具有一定的實(shí)際通用性。 在接下來的工作中,仍需要對(duì)整個(gè)系統(tǒng)的運(yùn)行進(jìn)行監(jiān)測(cè),同時(shí)考慮系統(tǒng)自身物理損耗造成的性能影響并進(jìn)行算法改進(jìn),以便有效改善應(yīng)用系統(tǒng),進(jìn)行更為準(zhǔn)確的評(píng)估分析。3 實(shí)驗(yàn)分析
3.1 LeNet-5結(jié)果及分析
3.2 OpenPose結(jié)果及分析
3.3 綜合對(duì)比研究
4 結(jié)束語