鞏 杰,趙 爍,何 虎,鄧 寧
(清華大學(xué)微電子學(xué)研究所,北京 100084)
卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)憑借強(qiáng)大的圖像處理能力,被廣泛應(yīng)用于圖像識別、目標(biāo)檢測[1-2]等多個領(lǐng)域,但同時其網(wǎng)絡(luò)規(guī)模、參數(shù)量與計算量不斷增加,如何將CNN 高效地部署至硬件平臺成為當(dāng)下重要的研究課題。
目前多數(shù)CNN 都是在CPU/GPU 平臺以32 位的浮點數(shù)形式進(jìn)行運(yùn)算,但CPU 在并行計算方面存在缺陷,并不適用于CNN 的計算,GPU 雖然在并行計算方面有巨大優(yōu)勢,但是高能耗的特點導(dǎo)致其在便攜式移動設(shè)備環(huán)境下也不適用?,F(xiàn)場可編程門陣列(Field Programmable Gate Array,F(xiàn)PGA)不僅能滿足并行計算與低功耗的需求,而且還具有高度的靈活性,可適用于不同場景,因此,F(xiàn)PGA 可為CNN 部署提供有效的解決方案[3]。
在研究CNN 硬件加速方法的過程中,學(xué)者們一直力求于低功耗、高能效[4-5]。一種常見的方法是通過壓縮模型來達(dá)到減小模型體積和降低硬件資源消耗的目的。目前,使用更低位寬如8 位、16 位的定點數(shù)來表示原始的32 位浮點數(shù)進(jìn)行推理計算已經(jīng)被證明有效且得到廣泛應(yīng)用[6-8]。將高精度參數(shù)替換為低精度參數(shù)能有效降低存儲、內(nèi)存帶寬等硬件資源需求且?guī)缀醪挥绊懩P蜏?zhǔn)確率。在模型壓縮方面,學(xué)者們還使用網(wǎng)絡(luò)剪枝[9]、模型蒸餾[10]等方法來達(dá)到減少模型參數(shù)、提高計算效率的目的。另一種常見方法是通過面向CNN 中占比大的計算操作如卷積計算、全連接層計算、激活函數(shù)計算等設(shè)計專門的硬件進(jìn)行計算加速[11],主要有面向并行計算、針對數(shù)據(jù)通路的加速器設(shè)計等[12-14]。
針對目前浮點數(shù)CNN 模型規(guī)模和硬件資源消耗大的問題,本文設(shè)計一種通用的CNN 動態(tài)定點量化方法及加速系統(tǒng),并以VGG-16 與ResNet-50 網(wǎng)絡(luò)為例部署至FPGA 平臺進(jìn)行實驗驗證。
CNN 的主要計算有卷積計算、全連接計算、批歸一化(Batch Normalization,BN)、激活函數(shù)、池化計算等。本文所選用的VGG-16 網(wǎng)絡(luò)包含13 層卷積層與3 層全連接層,ResNet-50 網(wǎng)絡(luò)包含49 層卷積層與1 層全連接層。對網(wǎng)絡(luò)參數(shù)與計算量進(jìn)行統(tǒng)計分析,由表1 可以看出,本文所選用的2 個網(wǎng)絡(luò)參數(shù)量都非常大,VGG-16 對一張圖片的推理所需乘加操作達(dá)到10G 級,雖然ResNet-50 中的殘差連接一定程度上減少了計算量,但是對于通用處理器來說這樣的規(guī)模同樣巨大,因此,必須設(shè)計專用加速器。
表1 網(wǎng)絡(luò)參數(shù)與計算量Table 1 Parameters quantity and calculation quantity of the networks
為使加速器設(shè)計更有針對性,對網(wǎng)絡(luò)中各層所占用的運(yùn)行時間進(jìn)行分析。使用C 語言搭建2 個模型,選用單張3×224×224 像素大小的圖像作為輸入,分別進(jìn)行前向推理計算并統(tǒng)計運(yùn)算時間。由表2 可知,在CNN 中,絕大部分的計算操作都是卷積計算以及全連接層的計算,而全連接層實際上可以看作是特殊的卷積操作,本文重點在于對卷積參數(shù)做有效量化并結(jié)合硬件設(shè)計進(jìn)行加速計算。
表2 網(wǎng)絡(luò)各層計算量與運(yùn)行時間Table 2 Calculation quantity and running time of each layer in the networks
目前絕大多數(shù)的CNN 卷積操作都是按照卷積、BN、ReLU 的順序進(jìn)行的,引入BN 層的目的是在訓(xùn)練時加快模型收斂速度以及避免過擬合[15]。BN 的計算公式如式(1)所示:
其中:γ為縮放因子;μ和σ2為當(dāng)前Batch 的均值和方差;xi為卷積計算結(jié)果;ε為防止分母為0 所添加的十分小的正數(shù);β為偏置。由式(1)可以看出,在前向推理計算時,BN 層增加了不必要的參數(shù)量,同時還會消耗一定的硬件資源。為了加快計算速度,本文將卷積與BN 層的參數(shù)進(jìn)行融合。卷積計算公式如式(2)所示:
其中:Wconv為卷積核參數(shù);bconv為偏置。同時,將式(1)改寫為式(3)所示形式:
BN 的輸入實際為卷積計算的輸出,因此,將式(2)、式(3)合并,得到卷積和歸一化融合后的式(4):
量化這一方法在神經(jīng)網(wǎng)絡(luò)加速運(yùn)算的研究領(lǐng)域很常見,目前常用的量化方法主要分為基于碼本的量化與定點量化兩種[16-18]?;诖a本的量化是將張量中的每個值通過縮放因子與零值映射到一個有限集合的某個元素,此集合即為碼本。定點量化是將單精度浮點網(wǎng)絡(luò)參數(shù)以低位定點數(shù)來替代。以VGG-16 為例,其網(wǎng)絡(luò)參數(shù)與層間結(jié)果分布如圖1 所示。
圖1 VGG-16 網(wǎng)絡(luò)數(shù)據(jù)分布Fig.1 Data distribution of VGG-16 network
從圖1 可以看出,VGG-16 網(wǎng)絡(luò)中不同層的參數(shù)范圍有較大出入,并且層間結(jié)果相對于網(wǎng)絡(luò)參數(shù)來說都過大。因此,本文采用動態(tài)定點量化方法,即針對不同結(jié)構(gòu)選擇合適的參數(shù)分別對其進(jìn)行量化以達(dá)到最優(yōu)效果。為了避免量化位寬不夠的情況,通過式(5)的方法尋找合適的整數(shù)位:
其中:x為待量化數(shù);lint為整數(shù)位長度。由此可以得到小數(shù)位長度lfloat=lbw-lint,其中,lbw為量化后位寬。
圖2 為2 個8 位定點數(shù)的例子。上半部分的小數(shù)位為4,其表示的數(shù)為22+21+2-1+2-2+2-4=6.812 5。下半部分的小數(shù)位為-1,其表示的數(shù)為27+26+24+23+21=218。通過小數(shù)位所在位置,能夠有效地將定點數(shù)還原至其十進(jìn)制數(shù)值,同時在后續(xù)過程中使用定點8 位數(shù)替代浮點數(shù)運(yùn)算。
圖2 8 位定點數(shù)結(jié)構(gòu)Fig.2 Structure of 8 bit fixed-point
對待量化參數(shù)進(jìn)行量化處理,如式(6)所示:
其中:s為符號位值;x為有效位值。
基于上文提出的動態(tài)定點量化方法設(shè)計加速器結(jié)構(gòu),如圖3 所示。加速器主要包含控制器、片上緩存、傳輸單元、計算核4 個部分,其中:控制器通過總線從CPU 獲取數(shù)據(jù)傳輸、緩存、計算的相關(guān)配置信息并分別進(jìn)行配置,保證整個計算流程穩(wěn)定、準(zhǔn)確;片上緩存暫存來自DDR 的輸入和網(wǎng)絡(luò)權(quán)重以及計算輸出數(shù)據(jù);傳輸單元用于傳輸內(nèi)存與偏上緩存間的數(shù)據(jù);計算核則完成整個加速過程的核心計算。
圖3 加速器計算結(jié)構(gòu)Fig.3 Computing structure of accelerator
片上緩存主要分為輸入、輸出和權(quán)重的緩存,計算核中同時還有暫存卷積計算中間結(jié)果的緩存和暫存定點處理模塊輸入數(shù)據(jù)的緩存。數(shù)據(jù)緩存能有效地降低DDR 和加速器的數(shù)據(jù)傳輸頻率,不但能滿足卷積核參數(shù)復(fù)用的需求,而且還能降低數(shù)據(jù)搬運(yùn)的能耗。
輸入輸出與權(quán)重的緩存分別使用2 個不同的傳輸單元控制以提高數(shù)據(jù)傳輸?shù)牟⑿卸龋渲袡?quán)重的數(shù)據(jù)傳輸采用ping-pong 模式進(jìn)行,即同時進(jìn)行DDR 到緩存的數(shù)據(jù)傳輸和計算核的加速計算,提高了加速效率。
計算核是加速器的核心模塊,包含3 個子模塊,分別為MAC 模塊、量化處理模塊(Quantization Process Module,QPM)和激活函數(shù)模塊,其結(jié)構(gòu)如圖4 所示。
圖4 計算核結(jié)構(gòu)Fig.4 Structure of computing core
MAC 模塊主要由乘加陣列構(gòu)成,其作用為將卷積核與對應(yīng)輸入特征映射的部分乘加結(jié)果與其對應(yīng)通道的部分乘加結(jié)果累加,通過提高卷積計算并行度和陣列循環(huán)展開計算來提高計算效率。
QPM 為量化處理模塊,主要負(fù)責(zé)量化運(yùn)算,具體由移位、加偏置、舍入和截斷4 個部分組成。QPM計算過程如圖5 所示,為了避免溢出,卷積乘加結(jié)果以32 位形式暫存,與偏置求和時,因為定點數(shù)小數(shù)點位置不同,所以需要先進(jìn)行移位操作使兩者小數(shù)位相同,再進(jìn)行加操作,隨后判斷是否有進(jìn)位產(chǎn)生,最后移位至小數(shù)點位置與輸出小數(shù)點位置相同并截斷至8 位位寬,完成一次卷積計算,這樣整個計算流程都是以定點數(shù)形式進(jìn)行,而不需要將定點數(shù)反量化為浮點數(shù)再進(jìn)行計算。
圖5 加速器量化計算流程Fig.5 Quantization computing process of accelerator
激活函數(shù)運(yùn)算模塊由控制信號決定進(jìn)行ReLU、LeakyReLU 和ByPass 中的一種操作。其中:ReLU由選擇器實現(xiàn),當(dāng)輸入小于0 時,輸出為0,否則保持不變;LeakyReLU 由選擇器與移位器實現(xiàn),即輸入小于0 時,將數(shù)據(jù)右移3 位得到輸出值。
最終設(shè)計的CNN加速器片上系統(tǒng)(System on Chip)結(jié)構(gòu)SoC如圖6所示,主要包含DDR,Zynq系統(tǒng)和可擴(kuò)展的加速器等模塊,其中,數(shù)據(jù)通過AXI4-Full總線傳輸,控制信號通過AXI4-Lite總線傳輸。為了提高計算效率,將計算核的數(shù)量擴(kuò)展至4個,SRAM 的大小也相應(yīng)提高為原來的2倍,總算力相較于單核加速器提升近4倍。
圖6 多核擴(kuò)展加速器SoC 結(jié)構(gòu)Fig.6 SoC structure of multi-core expansion accelerator
使用基于caffe深度學(xué)習(xí)框架的VGG-16與ResNet-50 預(yù)訓(xùn)練模型,以ImageNet ILSVRC2012 為數(shù)據(jù)集,單張圖片大小設(shè)置為3×224×224 像素進(jìn)行量化,得到不同位寬下網(wǎng)絡(luò)Top-1 準(zhǔn)確率,如圖7 所示。
圖7 Top-1 準(zhǔn)確率隨量化位寬的變化趨勢Fig.7 Change trend of Top-1 accuracy with quantization bit
從圖7 可以看出,將卷積權(quán)重和中間結(jié)果量化為8 位,全連接層權(quán)重量化為4 位,可以在Top-1 準(zhǔn)確率損失較小的情況下實現(xiàn)更大的壓縮率,因此,實驗采用上述量化方案,量化結(jié)果見表3??梢钥闯觯? 個網(wǎng)絡(luò)的Top-1 準(zhǔn)確率損失均在1%以內(nèi),VGG-16 和ResNet-50分別壓縮為原來的13.8%和24.8%,表明本文量化方法效果顯著。
表3 量化結(jié)果Table 3 Quantization results
提取量化后的模型參數(shù),使用C 語言搭建前向推理計算網(wǎng)絡(luò)模型,輸入量化后的ImageNet ILSVRC2012 驗證集。使用Vivado 搭建本實驗的仿真環(huán)境并將生成的bitstream 文件導(dǎo)入XilinxZCU102開發(fā)板,處理器與加速器的工作頻率分別為100 MHz 和300 MHz。之后在VivadoSDK 中實現(xiàn)網(wǎng)絡(luò),輸入圖像進(jìn)行預(yù)測。
加速器SoC 各資源利用情況如表4 所示。本文加速系統(tǒng)運(yùn)行VGG-16 的性能與其他加速器的比較如表5 所示??梢钥闯?,在300 MHz 工作頻率下,VGG-16 和ResNet-50 完成單張圖片推理所需時間分別為166.2 ms 與109.6 ms,與其他FPGA 的實現(xiàn)相比,本文系統(tǒng)在峰值性能和能效上均有較大提升,其中峰值性能最高可達(dá)614.4 GOPs,提升了4.5 倍,能耗比達(dá)113.99 GOPs/W,提升了4.7 倍。
表4 加速器SoC 各資源利用情況Table 4 Utilization of each resource in accelerator SoC
表5 加速性能對比Table 5 Acceleration performance comparison
本文通過對CNN 的參數(shù)結(jié)構(gòu)和計算特性進(jìn)行分析,設(shè)計一種通用的動態(tài)定點量化與計算加速系統(tǒng),并對計算核進(jìn)行4 核擴(kuò)展以提高加速性能。在ImageNet ILSVRC2012 數(shù)據(jù)集上進(jìn)行性能測試,結(jié)果表明,量化后網(wǎng)絡(luò)的Top-1 準(zhǔn)確率損失在1%以內(nèi),VGG-16 和ResNet-50 網(wǎng)絡(luò)模型分別壓縮至原來的13.8%和24.8%。與其他加速系統(tǒng)相比,本文設(shè)計的加速系統(tǒng)峰值性能達(dá)614.4 GOPs,最高提升4.5 倍,能耗比達(dá)到113.99 GOPs/W,最高提升4.7 倍。后續(xù)將優(yōu)化量化方法,并將計算核擴(kuò)展至8 核,進(jìn)一步提升加速系統(tǒng)的整體性能。