王 改,鄭啟龍,鄧文齊,楊江平,盧茂輝
(中國科學技術大學 計算機科學與技術學院,合肥 230027)
近年來,深度學習[1]作為機器學習的分支,在多個領域均取得了較大的進展.而卷積神經網絡(Convolutional Neural Network,CNN) 作為深度學習的代表算法之一,其在計算機視覺[2]、自然語言處理[3]等領域有著顯著的成果.
因為在深度學習的應用的效果提升的同時,其網絡結構也變得越來越復雜,使得深度學習對計算資源的要求也越來越高,傳統的計算資源已經不能滿足其計算量大的需求.如在傳統的CPU 架構 (X86和ARM),其主要是基于通用的計算而發展應用的,其基本操作為算術操作和邏輯操作,而在深度學習的處理中,單個神經元的處理往往需要成百上千的指令才能完成,因此其對深度學習的處理效率很低.如谷歌使用上萬個X86 的CPU 核運行7 天來訓練識別一個貓臉的深度學習神經網絡[4].因此,基于深度學習的加速器的設計應運而生.在設計加速器的階段,除了需要考慮深度學習算法本身的優化外,還需要考慮如何提高計算資源的利用率,以提高加速器的性能.例如中科院設計的DianNao[5],該架構注重對數據并行方面的優化,使用三級的流水結構,使用輸入輸出隊列來保持激活層計算和權重計算參數,輸入的數據根據隊列的大小進行分塊.同時因為數據的輸入是按塊輸入的,得到的輸出并非最后的結果,為了避免數據的重復存取,其結構中設計寄存器來臨時存儲,以減少數據的傳輸.Dally WJ 團隊設計的SCNN[6]硬件架構由多個PE 組成,基于7 層嵌套的卷積計算算法,并對該循環進行并行加速.其采用對卷積的激活和權重計算進行分塊處理,首先對權重計算進行分組,將通道數進行切分到多個PE 上,每個PE 上得到部分的輸出.同時基于該輸出再對激活層運算進行分塊處理,將計算后的輸出以廣播的形式廣播到每個PE,來完成乘累加運算.本文主要考慮CNN 的每層計算任務的數據分布特點,結合BWDSP 的眾核架構的設計,對計算任務的劃分進行設計,以此減少其數據的傳輸量,從而提升其加速器的效率.
本文的主要工作如下:基于計算任務的特點,設計合理計算任務劃分的策略.并基于VGGNet-16 網絡模型,測試其優化前后數據的傳輸量.本文余下內容由以下部分組成:第1 部分介紹了CNN 的結構和BWDSP的眾核架構;第2 部分介紹了在眾核BWDSP 架構下,將數據并行與卷積計算特點結合設計的數據劃分策略;第3 部分展示了本文提出的優化方法在VGGNet-16 網絡模型的測試實驗;第4 部分是總結與展望.
CNN 是一種前饋神經網絡 (feed neural networks),其包含輸入層、隱藏層、輸出層.其中隱藏層主要由卷積層、池化層和全連接層三類層次組成.在較為復雜的CNN 模型中,隱藏層可能會包含多段卷積和池化層.其中卷積層主要用來實現對輸入的數據的特征的提取,池化層主要是對特征進行選擇和信息過濾,而全連接層一般是作為隱藏層的最后一部分,并將所包含的信息傳遞給下一層全連接層.如圖1顯示的是較為簡單的CNN 模型-LeNet5[7],其是LeCun Y 設計用于手寫數字識別的卷積神經網絡,具有2 個卷積層,2 個池化層和2 個全連接層.

圖1 LeNet5 網絡結構圖
本文的單核計算單元是由中國電子科技公司第三十八所研制的BWDSP 系列處理器,可廣泛應用于各種高性能領域.
BWDSP 系列處理器基于分簇式架構,其指令系統支持VLIW和SIMD 類型的操作.每個處理器上有4 個簇,每個簇上有4 個支持MAC 操作的乘法器,其最高可達30 GOPS 的運算能力.其體系結構和計算能力適合處理大數據量和大計算量的深度學習任務.如圖2為BWDSP[8]體系結構圖.

圖2 BWDSP 體系結構
本文主要基于BWDSP 的眾核架構[9]及該架構所設計的眾核計算算法[9]進調度任務的劃分及其優化,其架構如圖3所示.該架構由56 個計算核心組成,其主要考慮到主流的CNN 網絡,如VGG,ResNet[10]等,其卷積層的輸入的高和寬的大小都是7 的倍數,故采用56 個核心的框架結構,能夠保證大部分的卷積層在進行數據任務的劃分時,可以比較均衡的劃分到計算核上,使得計算核負載比較均衡.同時,架構中每個計算核心由三個buffer 區組成,每個buffer 設置了連接計算核與片上互連的兩個端口,且設置為同步的.該架構通過設計多緩沖區的方式來實現數據的傳輸和計算并行的進行,并采用輪轉三緩沖區的形式來降低片上內存的需求.其輪轉緩沖區的工作方式是:采用三緩沖區方式來存儲中間計算的結果,三個緩沖區輪流作為輸入緩沖區、輸出緩沖區和進行下一次計算輸入的數據傳輸的緩沖區.
BWDSP 眾核架構的計算算法是把單個輸出的計算任務分配給單獨的核進行計算,且與輸出相關的計算所有的輸入加載到計算核的局部內存中.在單個計算核完成其計算時,將該核的局部內存的數據輸出給其他核,當所有的核傳輸完時,即下一層的輸入準備完備后,開始進行下一層的計算.

圖3 BWDSP 眾核架構
基于BWDSP 眾核架構和計算算法的設計,本文設計的計算任務劃分設計如圖4所示.因為現有的深度學習框架,如TensorFlow[11],Caffe[12]等,CNN 網絡模型均以圖的形來定義.本文也采用了該方案,即將CNN 網絡模型定義為有向無環圖Graph,此時CNN 網絡的輸入輸出數據等均以圖的節點的形式保存,然后使用Graph Optimizer 定義的有向無環圖Graph 進行優化處理,通常采用層融合的方式進行優化,即將卷積操作、激活操作和池化操作進行融合處理,將三個操作計算融合為為一個操作進行計算.接著優化后的圖模型的節點通過Layer Partition 并依據計算核的眾核計算算法來對數據的輸出進行劃分分配,得到每個核的需要計算的輸出數據;然后Route Generator 根據每個計算核的輸出數據來反向推出輸入的數據,以此來完成眾核間的數據交換并生成路由信息.最后通過Execution 生成執行計劃交于計算核去執行.

圖4 劃分策略流程
在卷積神經網絡中,每次進行卷積計算后,輸出的數據尺寸會有所縮小,同時原始圖片的邊緣部分像素點在輸出中采用的較少,其輸出的數據信息會丟失到邊緣位置的很多信息,當網絡的層數越深時,所丟失的邊緣位置的數據就越多,到最后可能無數據信息可用.因此,卷積計算采用了填充操作.一般地,卷積神經網絡采用兩種填充方式:填充和不填充,分別為“SAME”和“VALID”.其中,“SAME”方式為數據填充操作,即對原始的輸入數據進行區域補零操作,其對輸入的原始數據在高度和寬度上進行數據填充,改變了輸入數據的尺寸大小,使得卷積計算后的輸出數據的尺寸與計算前的原始輸入數據的尺寸相同;“VALID”方式為數據的不填充操作,即不會改變原始的數據的輸入.兩種方式所對應不同的輸入數據和輸出數據的高和寬的大小關系如下所示.式(1) 為“SAME”方式,式(2) 為“VALID”方式,具體的參數的含義如表1所示.

表1 計算任務劃分參數

數據并行(data parallel)計算[13]由hillis 提出,即指的在計算過程中同時對大量數據進行相同或者類似的操作.該方法是基于負載均衡的劃分方式,但是并未考慮到CNN 網絡的模型特點,即只是簡單的將數據進行均等的切分到各個計算核上進行計算.因此,每個計算核需要計算的輸入數據在高度和寬度維度上對應尺寸如式(3)所示.

該方法在對于大數據量的問題時,可以采用其進行高效的處理.但是在卷積計算中,除了具有數據量大的特點,還具有其填充和數據重疊等特性.因此本文在考慮數據并行的同時將與卷積計算的特性結合起來,可以進一步減少數據傳輸.
在CNN 網絡模型的卷積計算過程中,會涉及到填充和數據的重疊部分的操作.本文在眾核BWDSP 架構下,結合其特點并與數據的并行性在設計了計算任務的劃分方法,并與并行處理方法.
因為在進行卷積計算時會涉及到填充和數據重疊等操作,因此當采用數據并行的方法對計算任務進行劃分時,核間還會涉及到大量的數據交換.為了防止該情況的出現,卷積層的數據劃分策略以輸出數據來進行,即以輸出數據的尺寸考慮出發,反向推出輸入的數據的尺寸,然后將該種尺寸的數據交于計算核去計算.
一般卷積在進行計算時,卷積操作后一般直接是激活操作,接著是池化層的操作,本文先對計算任務進行圖優化處理,即進行卷積層計算的融合操作,將多個操作融合為一個操作計算.如圖5所示.此時在進行卷積計算后,可以直接在本地實現激活操作和池化層的操作的計算,以減少數據量的傳輸.
優化的數據劃分根據CNN 網絡模型的計算特點,針對卷積層、池化層的數據分布和計算特點采用了兩種不同的劃分策略.一般地,池化層和卷積層的劃分策略相同,如式(4)所示.但是當網絡結構進一步加深時,其數據的尺寸會變得越來越小,當OH<2×N時,就會存在AVGH為1 的情況.而在池化層一般會采用2×2 尺寸大小的池化操作,此時采用式(4)進行池化層的計算時需要進行核間的數據交換,因此需要將整行的數據分為兩個部分,即更細粒度的劃分,如式(5)所示,該方可以有效的減少數據的傳輸.

圖5 卷積層融合

在式(4)中對數據的劃分,考慮了計算任務的填充操作,并對輸出的數據進行劃分,該方式在卷積計算完成后可以直接進行數據的激活和池化操作.但是當數據的尺寸較小時,存在一種情況,即單個計算核只計算一行數據時,但因為池化計算時一般采用2×2 的尺寸的數據,此時式(4)不能滿足無數據的傳輸.因此在這種情況下,采用式(5)進行劃分,即在高度和寬度的方向上均進行劃分操作,此時在計算池化層不需要再進行傳輸.故為了更好地減少數據傳輸,卷積計算任務的劃分采用兩者相結合的方式.
綜上,對計算任務的劃分方式的分析和區別如表2所示.

表2 數據劃分方式對比
為了驗證該劃分策略的有效性,本文以經典的卷積神經網絡模型VGGNet-16[14]為實驗數據,該模型曾取得了ILSVRC2014 比賽分類項目的第2 名和定位項目的第1 名,其網絡結構參數如表3所示.
實驗中按照兩種不同的數據劃分方式對卷積網絡層的數據進行劃分,如表4所示網絡層的部分數據劃分數據,其數據格式為(高度開始∶高度結束,寬度開始∶寬度結束).表4中在conv1_2和conv2_2 中的數據劃分中,基于一般的和優化的數據劃分方法,每個核分配的計算數據量的差別主要在高度的差別,寬度基本一致.因為此時的數據的高度在計算完成后的大小尺寸可以滿足池化層輸入的數據的尺寸的要求,即池化層的尺寸大多為2×2 的大小,即滿足偶數倍的要求,故可以在卷積計算之后直接進行池化計算,而不需要進行核間的數據交換,故這兩層的計算量的差距僅限在初始計算時的數據傳輸量.而在conv3_3,conv4_3和conv5_3 中,兩種數據劃分方法使得每個核分配的計算數據量的在高度和寬度方向上均有差別.因為在這幾層卷積層中,如果按照一般的數據劃分方法,單個計算核只能計算得到高度為1 的輸出,如conv3_3 中,一般的劃分方法得到的輸出是[0∶0,0∶55],接著進行卷積計算時,需要偶數倍的輸出,即輸出的數據應該為[0∶1,0∶55]這種方式,此時就需要進行核間的數據傳輸才能滿足.但是在優化的劃分方法下,即考慮了下一層所要進行的計算,直接將數據劃分為[0∶3,0∶29],將高度和寬度均進行了劃分,使得其輸出結果[0∶1,0∶27],此時可以直接進行卷積計算,而不需要進行數據傳輸,降低了數據的傳輸,同時又充分利用了計算資源,單核的計算量也有所降低.

表3 VGGNet-16 網絡結構

表4 VGGNet-16 網絡的數據劃分
本文實驗通過統計計算各個層在完成計算時,需要將數據進行傳輸以進行下一層次的計算,以此計算各個層之間需要傳輸的數據量,并與未優化的數據劃分方式進行對比.
本文基于數據并行與卷積操作特性結合的方式進行設計計算的任務劃分,并與只使用數據并行的方式的任務的劃分進行對比實驗,通過實驗統計兩種方式下數據傳輸量來進行驗證比較.如圖6所示為兩種計算任務劃分方法下數據傳輸量的比較圖.
圖6中在下方的黑色實心下三角所顯示的折線是優化后的劃分方式,上方的空心方形顯示的是僅考慮數據并行的劃分方式.實驗結果表明,優化的劃分方式可以有效的減少數據量的傳輸.圖6顯示優化前后的數據劃分方法在各個卷積層的數據傳輸量均有所降低.其中,在conv1_2和conv2_2 中由于優化前后的數據的劃分分布均可以滿足本地池化層的計算,因此優化后的數據傳輸量只有小幅度的降低.而在卷積層conv3_3、conv4_3和conv5_3 時,優化的數據劃分方式充分考慮了計算核的負載均衡和池化層的特性,在計算池化層時減少了數據量的傳輸,使得優化后的數據傳輸量有明顯的降低,其中在conv4_3 這一卷積層時,優化后的數據傳輸量減少的效果比較明顯,其達到46.3%.

圖6 數據傳輸量對比圖
為應對卷積神經網絡模型復雜的規模和結構,本文結合了卷積神經網絡的結構特點和數據并行計算方法,基于BWDSP 眾核架構對卷積計算任務進行了并行化劃分的設計.實驗結果表明該方法相較于數據并行計算,進一步降低了卷積計算時數據量的傳輸.
因為在全連接層的計算存在大量的權重參數,與卷積層相比,其計算是通信密集型的.若采用卷積層的劃分方式,核間無法共享權重值,數據的通信量較大.因此,需要對卷積神經網絡的劃分方法進一步完善和改進,以降低全連接層計算的數據傳輸量.