王 改,鄭啟龍,鄧文齊,楊江平,盧茂輝
(中國科學(xué)技術(shù)大學(xué) 計算機(jī)科學(xué)與技術(shù)學(xué)院,合肥 230027)
近年來,深度學(xué)習(xí)[1]作為機(jī)器學(xué)習(xí)的分支,在多個領(lǐng)域均取得了較大的進(jìn)展.而卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN) 作為深度學(xué)習(xí)的代表算法之一,其在計算機(jī)視覺[2]、自然語言處理[3]等領(lǐng)域有著顯著的成果.
因為在深度學(xué)習(xí)的應(yīng)用的效果提升的同時,其網(wǎng)絡(luò)結(jié)構(gòu)也變得越來越復(fù)雜,使得深度學(xué)習(xí)對計算資源的要求也越來越高,傳統(tǒng)的計算資源已經(jīng)不能滿足其計算量大的需求.如在傳統(tǒng)的CPU 架構(gòu) (X86和ARM),其主要是基于通用的計算而發(fā)展應(yīng)用的,其基本操作為算術(shù)操作和邏輯操作,而在深度學(xué)習(xí)的處理中,單個神經(jīng)元的處理往往需要成百上千的指令才能完成,因此其對深度學(xué)習(xí)的處理效率很低.如谷歌使用上萬個X86 的CPU 核運(yùn)行7 天來訓(xùn)練識別一個貓臉的深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)[4].因此,基于深度學(xué)習(xí)的加速器的設(shè)計應(yīng)運(yùn)而生.在設(shè)計加速器的階段,除了需要考慮深度學(xué)習(xí)算法本身的優(yōu)化外,還需要考慮如何提高計算資源的利用率,以提高加速器的性能.例如中科院設(shè)計的DianNao[5],該架構(gòu)注重對數(shù)據(jù)并行方面的優(yōu)化,使用三級的流水結(jié)構(gòu),使用輸入輸出隊列來保持激活層計算和權(quán)重計算參數(shù),輸入的數(shù)據(jù)根據(jù)隊列的大小進(jìn)行分塊.同時因為數(shù)據(jù)的輸入是按塊輸入的,得到的輸出并非最后的結(jié)果,為了避免數(shù)據(jù)的重復(fù)存取,其結(jié)構(gòu)中設(shè)計寄存器來臨時存儲,以減少數(shù)據(jù)的傳輸.Dally WJ 團(tuán)隊設(shè)計的SCNN[6]硬件架構(gòu)由多個PE 組成,基于7 層嵌套的卷積計算算法,并對該循環(huán)進(jìn)行并行加速.其采用對卷積的激活和權(quán)重計算進(jìn)行分塊處理,首先對權(quán)重計算進(jìn)行分組,將通道數(shù)進(jìn)行切分到多個PE 上,每個PE 上得到部分的輸出.同時基于該輸出再對激活層運(yùn)算進(jìn)行分塊處理,將計算后的輸出以廣播的形式廣播到每個PE,來完成乘累加運(yùn)算.本文主要考慮CNN 的每層計算任務(wù)的數(shù)據(jù)分布特點(diǎn),結(jié)合BWDSP 的眾核架構(gòu)的設(shè)計,對計算任務(wù)的劃分進(jìn)行設(shè)計,以此減少其數(shù)據(jù)的傳輸量,從而提升其加速器的效率.
本文的主要工作如下:基于計算任務(wù)的特點(diǎn),設(shè)計合理計算任務(wù)劃分的策略.并基于VGGNet-16 網(wǎng)絡(luò)模型,測試其優(yōu)化前后數(shù)據(jù)的傳輸量.本文余下內(nèi)容由以下部分組成:第1 部分介紹了CNN 的結(jié)構(gòu)和BWDSP的眾核架構(gòu);第2 部分介紹了在眾核BWDSP 架構(gòu)下,將數(shù)據(jù)并行與卷積計算特點(diǎn)結(jié)合設(shè)計的數(shù)據(jù)劃分策略;第3 部分展示了本文提出的優(yōu)化方法在VGGNet-16 網(wǎng)絡(luò)模型的測試實驗;第4 部分是總結(jié)與展望.
CNN 是一種前饋神經(jīng)網(wǎng)絡(luò) (feed neural networks),其包含輸入層、隱藏層、輸出層.其中隱藏層主要由卷積層、池化層和全連接層三類層次組成.在較為復(fù)雜的CNN 模型中,隱藏層可能會包含多段卷積和池化層.其中卷積層主要用來實現(xiàn)對輸入的數(shù)據(jù)的特征的提取,池化層主要是對特征進(jìn)行選擇和信息過濾,而全連接層一般是作為隱藏層的最后一部分,并將所包含的信息傳遞給下一層全連接層.如圖1顯示的是較為簡單的CNN 模型-LeNet5[7],其是LeCun Y 設(shè)計用于手寫數(shù)字識別的卷積神經(jīng)網(wǎng)絡(luò),具有2 個卷積層,2 個池化層和2 個全連接層.
圖1 LeNet5 網(wǎng)絡(luò)結(jié)構(gòu)圖
本文的單核計算單元是由中國電子科技公司第三十八所研制的BWDSP 系列處理器,可廣泛應(yīng)用于各種高性能領(lǐng)域.
BWDSP 系列處理器基于分簇式架構(gòu),其指令系統(tǒng)支持VLIW和SIMD 類型的操作.每個處理器上有4 個簇,每個簇上有4 個支持MAC 操作的乘法器,其最高可達(dá)30 GOPS 的運(yùn)算能力.其體系結(jié)構(gòu)和計算能力適合處理大數(shù)據(jù)量和大計算量的深度學(xué)習(xí)任務(wù).如圖2為BWDSP[8]體系結(jié)構(gòu)圖.
圖2 BWDSP 體系結(jié)構(gòu)
本文主要基于BWDSP 的眾核架構(gòu)[9]及該架構(gòu)所設(shè)計的眾核計算算法[9]進(jìn)調(diào)度任務(wù)的劃分及其優(yōu)化,其架構(gòu)如圖3所示.該架構(gòu)由56 個計算核心組成,其主要考慮到主流的CNN 網(wǎng)絡(luò),如VGG,ResNet[10]等,其卷積層的輸入的高和寬的大小都是7 的倍數(shù),故采用56 個核心的框架結(jié)構(gòu),能夠保證大部分的卷積層在進(jìn)行數(shù)據(jù)任務(wù)的劃分時,可以比較均衡的劃分到計算核上,使得計算核負(fù)載比較均衡.同時,架構(gòu)中每個計算核心由三個buffer 區(qū)組成,每個buffer 設(shè)置了連接計算核與片上互連的兩個端口,且設(shè)置為同步的.該架構(gòu)通過設(shè)計多緩沖區(qū)的方式來實現(xiàn)數(shù)據(jù)的傳輸和計算并行的進(jìn)行,并采用輪轉(zhuǎn)三緩沖區(qū)的形式來降低片上內(nèi)存的需求.其輪轉(zhuǎn)緩沖區(qū)的工作方式是:采用三緩沖區(qū)方式來存儲中間計算的結(jié)果,三個緩沖區(qū)輪流作為輸入緩沖區(qū)、輸出緩沖區(qū)和進(jìn)行下一次計算輸入的數(shù)據(jù)傳輸?shù)木彌_區(qū).
BWDSP 眾核架構(gòu)的計算算法是把單個輸出的計算任務(wù)分配給單獨(dú)的核進(jìn)行計算,且與輸出相關(guān)的計算所有的輸入加載到計算核的局部內(nèi)存中.在單個計算核完成其計算時,將該核的局部內(nèi)存的數(shù)據(jù)輸出給其他核,當(dāng)所有的核傳輸完時,即下一層的輸入準(zhǔn)備完備后,開始進(jìn)行下一層的計算.
圖3 BWDSP 眾核架構(gòu)
基于BWDSP 眾核架構(gòu)和計算算法的設(shè)計,本文設(shè)計的計算任務(wù)劃分設(shè)計如圖4所示.因為現(xiàn)有的深度學(xué)習(xí)框架,如TensorFlow[11],Caffe[12]等,CNN 網(wǎng)絡(luò)模型均以圖的形來定義.本文也采用了該方案,即將CNN 網(wǎng)絡(luò)模型定義為有向無環(huán)圖Graph,此時CNN 網(wǎng)絡(luò)的輸入輸出數(shù)據(jù)等均以圖的節(jié)點(diǎn)的形式保存,然后使用Graph Optimizer 定義的有向無環(huán)圖Graph 進(jìn)行優(yōu)化處理,通常采用層融合的方式進(jìn)行優(yōu)化,即將卷積操作、激活操作和池化操作進(jìn)行融合處理,將三個操作計算融合為為一個操作進(jìn)行計算.接著優(yōu)化后的圖模型的節(jié)點(diǎn)通過Layer Partition 并依據(jù)計算核的眾核計算算法來對數(shù)據(jù)的輸出進(jìn)行劃分分配,得到每個核的需要計算的輸出數(shù)據(jù);然后Route Generator 根據(jù)每個計算核的輸出數(shù)據(jù)來反向推出輸入的數(shù)據(jù),以此來完成眾核間的數(shù)據(jù)交換并生成路由信息.最后通過Execution 生成執(zhí)行計劃交于計算核去執(zhí)行.
圖4 劃分策略流程
在卷積神經(jīng)網(wǎng)絡(luò)中,每次進(jìn)行卷積計算后,輸出的數(shù)據(jù)尺寸會有所縮小,同時原始圖片的邊緣部分像素點(diǎn)在輸出中采用的較少,其輸出的數(shù)據(jù)信息會丟失到邊緣位置的很多信息,當(dāng)網(wǎng)絡(luò)的層數(shù)越深時,所丟失的邊緣位置的數(shù)據(jù)就越多,到最后可能無數(shù)據(jù)信息可用.因此,卷積計算采用了填充操作.一般地,卷積神經(jīng)網(wǎng)絡(luò)采用兩種填充方式:填充和不填充,分別為“SAME”和“VALID”.其中,“SAME”方式為數(shù)據(jù)填充操作,即對原始的輸入數(shù)據(jù)進(jìn)行區(qū)域補(bǔ)零操作,其對輸入的原始數(shù)據(jù)在高度和寬度上進(jìn)行數(shù)據(jù)填充,改變了輸入數(shù)據(jù)的尺寸大小,使得卷積計算后的輸出數(shù)據(jù)的尺寸與計算前的原始輸入數(shù)據(jù)的尺寸相同;“VALID”方式為數(shù)據(jù)的不填充操作,即不會改變原始的數(shù)據(jù)的輸入.兩種方式所對應(yīng)不同的輸入數(shù)據(jù)和輸出數(shù)據(jù)的高和寬的大小關(guān)系如下所示.式(1) 為“SAME”方式,式(2) 為“VALID”方式,具體的參數(shù)的含義如表1所示.
表1 計算任務(wù)劃分參數(shù)
數(shù)據(jù)并行(data parallel)計算[13]由hillis 提出,即指的在計算過程中同時對大量數(shù)據(jù)進(jìn)行相同或者類似的操作.該方法是基于負(fù)載均衡的劃分方式,但是并未考慮到CNN 網(wǎng)絡(luò)的模型特點(diǎn),即只是簡單的將數(shù)據(jù)進(jìn)行均等的切分到各個計算核上進(jìn)行計算.因此,每個計算核需要計算的輸入數(shù)據(jù)在高度和寬度維度上對應(yīng)尺寸如式(3)所示.
該方法在對于大數(shù)據(jù)量的問題時,可以采用其進(jìn)行高效的處理.但是在卷積計算中,除了具有數(shù)據(jù)量大的特點(diǎn),還具有其填充和數(shù)據(jù)重疊等特性.因此本文在考慮數(shù)據(jù)并行的同時將與卷積計算的特性結(jié)合起來,可以進(jìn)一步減少數(shù)據(jù)傳輸.
在CNN 網(wǎng)絡(luò)模型的卷積計算過程中,會涉及到填充和數(shù)據(jù)的重疊部分的操作.本文在眾核BWDSP 架構(gòu)下,結(jié)合其特點(diǎn)并與數(shù)據(jù)的并行性在設(shè)計了計算任務(wù)的劃分方法,并與并行處理方法.
因為在進(jìn)行卷積計算時會涉及到填充和數(shù)據(jù)重疊等操作,因此當(dāng)采用數(shù)據(jù)并行的方法對計算任務(wù)進(jìn)行劃分時,核間還會涉及到大量的數(shù)據(jù)交換.為了防止該情況的出現(xiàn),卷積層的數(shù)據(jù)劃分策略以輸出數(shù)據(jù)來進(jìn)行,即以輸出數(shù)據(jù)的尺寸考慮出發(fā),反向推出輸入的數(shù)據(jù)的尺寸,然后將該種尺寸的數(shù)據(jù)交于計算核去計算.
一般卷積在進(jìn)行計算時,卷積操作后一般直接是激活操作,接著是池化層的操作,本文先對計算任務(wù)進(jìn)行圖優(yōu)化處理,即進(jìn)行卷積層計算的融合操作,將多個操作融合為一個操作計算.如圖5所示.此時在進(jìn)行卷積計算后,可以直接在本地實現(xiàn)激活操作和池化層的操作的計算,以減少數(shù)據(jù)量的傳輸.
優(yōu)化的數(shù)據(jù)劃分根據(jù)CNN 網(wǎng)絡(luò)模型的計算特點(diǎn),針對卷積層、池化層的數(shù)據(jù)分布和計算特點(diǎn)采用了兩種不同的劃分策略.一般地,池化層和卷積層的劃分策略相同,如式(4)所示.但是當(dāng)網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)一步加深時,其數(shù)據(jù)的尺寸會變得越來越小,當(dāng)OH<2×N時,就會存在AVGH為1 的情況.而在池化層一般會采用2×2 尺寸大小的池化操作,此時采用式(4)進(jìn)行池化層的計算時需要進(jìn)行核間的數(shù)據(jù)交換,因此需要將整行的數(shù)據(jù)分為兩個部分,即更細(xì)粒度的劃分,如式(5)所示,該方可以有效的減少數(shù)據(jù)的傳輸.
圖5 卷積層融合
在式(4)中對數(shù)據(jù)的劃分,考慮了計算任務(wù)的填充操作,并對輸出的數(shù)據(jù)進(jìn)行劃分,該方式在卷積計算完成后可以直接進(jìn)行數(shù)據(jù)的激活和池化操作.但是當(dāng)數(shù)據(jù)的尺寸較小時,存在一種情況,即單個計算核只計算一行數(shù)據(jù)時,但因為池化計算時一般采用2×2 的尺寸的數(shù)據(jù),此時式(4)不能滿足無數(shù)據(jù)的傳輸.因此在這種情況下,采用式(5)進(jìn)行劃分,即在高度和寬度的方向上均進(jìn)行劃分操作,此時在計算池化層不需要再進(jìn)行傳輸.故為了更好地減少數(shù)據(jù)傳輸,卷積計算任務(wù)的劃分采用兩者相結(jié)合的方式.
綜上,對計算任務(wù)的劃分方式的分析和區(qū)別如表2所示.
表2 數(shù)據(jù)劃分方式對比
為了驗證該劃分策略的有效性,本文以經(jīng)典的卷積神經(jīng)網(wǎng)絡(luò)模型VGGNet-16[14]為實驗數(shù)據(jù),該模型曾取得了ILSVRC2014 比賽分類項目的第2 名和定位項目的第1 名,其網(wǎng)絡(luò)結(jié)構(gòu)參數(shù)如表3所示.
實驗中按照兩種不同的數(shù)據(jù)劃分方式對卷積網(wǎng)絡(luò)層的數(shù)據(jù)進(jìn)行劃分,如表4所示網(wǎng)絡(luò)層的部分?jǐn)?shù)據(jù)劃分?jǐn)?shù)據(jù),其數(shù)據(jù)格式為(高度開始∶高度結(jié)束,寬度開始∶寬度結(jié)束).表4中在conv1_2和conv2_2 中的數(shù)據(jù)劃分中,基于一般的和優(yōu)化的數(shù)據(jù)劃分方法,每個核分配的計算數(shù)據(jù)量的差別主要在高度的差別,寬度基本一致.因為此時的數(shù)據(jù)的高度在計算完成后的大小尺寸可以滿足池化層輸入的數(shù)據(jù)的尺寸的要求,即池化層的尺寸大多為2×2 的大小,即滿足偶數(shù)倍的要求,故可以在卷積計算之后直接進(jìn)行池化計算,而不需要進(jìn)行核間的數(shù)據(jù)交換,故這兩層的計算量的差距僅限在初始計算時的數(shù)據(jù)傳輸量.而在conv3_3,conv4_3和conv5_3 中,兩種數(shù)據(jù)劃分方法使得每個核分配的計算數(shù)據(jù)量的在高度和寬度方向上均有差別.因為在這幾層卷積層中,如果按照一般的數(shù)據(jù)劃分方法,單個計算核只能計算得到高度為1 的輸出,如conv3_3 中,一般的劃分方法得到的輸出是[0∶0,0∶55],接著進(jìn)行卷積計算時,需要偶數(shù)倍的輸出,即輸出的數(shù)據(jù)應(yīng)該為[0∶1,0∶55]這種方式,此時就需要進(jìn)行核間的數(shù)據(jù)傳輸才能滿足.但是在優(yōu)化的劃分方法下,即考慮了下一層所要進(jìn)行的計算,直接將數(shù)據(jù)劃分為[0∶3,0∶29],將高度和寬度均進(jìn)行了劃分,使得其輸出結(jié)果[0∶1,0∶27],此時可以直接進(jìn)行卷積計算,而不需要進(jìn)行數(shù)據(jù)傳輸,降低了數(shù)據(jù)的傳輸,同時又充分利用了計算資源,單核的計算量也有所降低.
表3 VGGNet-16 網(wǎng)絡(luò)結(jié)構(gòu)
表4 VGGNet-16 網(wǎng)絡(luò)的數(shù)據(jù)劃分
本文實驗通過統(tǒng)計計算各個層在完成計算時,需要將數(shù)據(jù)進(jìn)行傳輸以進(jìn)行下一層次的計算,以此計算各個層之間需要傳輸?shù)臄?shù)據(jù)量,并與未優(yōu)化的數(shù)據(jù)劃分方式進(jìn)行對比.
本文基于數(shù)據(jù)并行與卷積操作特性結(jié)合的方式進(jìn)行設(shè)計計算的任務(wù)劃分,并與只使用數(shù)據(jù)并行的方式的任務(wù)的劃分進(jìn)行對比實驗,通過實驗統(tǒng)計兩種方式下數(shù)據(jù)傳輸量來進(jìn)行驗證比較.如圖6所示為兩種計算任務(wù)劃分方法下數(shù)據(jù)傳輸量的比較圖.
圖6中在下方的黑色實心下三角所顯示的折線是優(yōu)化后的劃分方式,上方的空心方形顯示的是僅考慮數(shù)據(jù)并行的劃分方式.實驗結(jié)果表明,優(yōu)化的劃分方式可以有效的減少數(shù)據(jù)量的傳輸.圖6顯示優(yōu)化前后的數(shù)據(jù)劃分方法在各個卷積層的數(shù)據(jù)傳輸量均有所降低.其中,在conv1_2和conv2_2 中由于優(yōu)化前后的數(shù)據(jù)的劃分分布均可以滿足本地池化層的計算,因此優(yōu)化后的數(shù)據(jù)傳輸量只有小幅度的降低.而在卷積層conv3_3、conv4_3和conv5_3 時,優(yōu)化的數(shù)據(jù)劃分方式充分考慮了計算核的負(fù)載均衡和池化層的特性,在計算池化層時減少了數(shù)據(jù)量的傳輸,使得優(yōu)化后的數(shù)據(jù)傳輸量有明顯的降低,其中在conv4_3 這一卷積層時,優(yōu)化后的數(shù)據(jù)傳輸量減少的效果比較明顯,其達(dá)到46.3%.
圖6 數(shù)據(jù)傳輸量對比圖
為應(yīng)對卷積神經(jīng)網(wǎng)絡(luò)模型復(fù)雜的規(guī)模和結(jié)構(gòu),本文結(jié)合了卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)特點(diǎn)和數(shù)據(jù)并行計算方法,基于BWDSP 眾核架構(gòu)對卷積計算任務(wù)進(jìn)行了并行化劃分的設(shè)計.實驗結(jié)果表明該方法相較于數(shù)據(jù)并行計算,進(jìn)一步降低了卷積計算時數(shù)據(jù)量的傳輸.
因為在全連接層的計算存在大量的權(quán)重參數(shù),與卷積層相比,其計算是通信密集型的.若采用卷積層的劃分方式,核間無法共享權(quán)重值,數(shù)據(jù)的通信量較大.因此,需要對卷積神經(jīng)網(wǎng)絡(luò)的劃分方法進(jìn)一步完善和改進(jìn),以降低全連接層計算的數(shù)據(jù)傳輸量.