陳 逸,劉博生,徐永祺,武繼剛
(廣東工業(yè)大學 計算機學院,廣州 510006)
卷積神經(jīng)網(wǎng)絡(Convolutional Neural Network,CNN)應用廣泛,在語音識別、計算機視覺和生物信息處理[1-3]等領域都有著出色的表現(xiàn)。針對卷積神經(jīng)網(wǎng)絡的硬件加速器設計是一個重要的研究方向,現(xiàn)場可編程門陣列(Field Programmable Gate Array,F(xiàn)PGA)因其在性能、實時性、價格等方面的優(yōu)勢[4],成為硬件加速器設計中的一個較好選擇。
然而,目前應用廣泛的CNN 模型(如VGG、ResNet)普遍存在模型大、計算復雜度高的特點,為硬件部署帶來困難。文獻[5-7]提出應用低精度卷積神經(jīng)網(wǎng)絡(如8 bit CNN)有效降低模型大小,進而降低硬件上的內(nèi)存占用和帶寬需求。然而,低精度卷積神經(jīng)網(wǎng)絡存在數(shù)據(jù)表征能力弱的問題,會造成CNN 模型準確率下降。針對這一問題,文獻[8-10]提出了混合精度卷積神經(jīng)網(wǎng)絡,在模型準確率和模型大小之間做出了有效權衡。
低精度和混合精度卷積神經(jīng)網(wǎng)絡可以顯著降低模型大小,但仍無法有效減少模型的計算量。對此,文獻[11-13]提出應用快速傅里葉變換(Fast Fourier Transform,F(xiàn)FT)快速算法,該算法可以將傳統(tǒng)的空間域卷積神經(jīng)網(wǎng)絡變換為頻域卷積神經(jīng)網(wǎng)絡,進而利用簡單的EWMM(Element-Wise Multiplication)操作替代傳統(tǒng)的滑動窗口卷積,有效降低計算復雜度。其中:文獻[11]采用16 bit fixed 數(shù)據(jù)類型并基于overlap-saved 頻域卷積方法實現(xiàn)了FPGA 加速器,取得了不錯的性能,但其模型仍存在內(nèi)存占用較大的問題;文獻[13]提出了一種頻域卷積神經(jīng)網(wǎng)絡的量化方案,包括8 bit 定點數(shù)據(jù)類型量化,并基于FPGA設計加速器進行了性能評估,但其量化后的精度類型位寬較少并且較為單一,對精度帶來較大影響。
本文基于FPGA 設計8 bit 和16 bit 的混合精度頻域卷積神經(jīng)網(wǎng)絡加速器(稱為FHA),在兼顧模型準確率的同時,有效降低模型大小和計算復雜度。該加速器支持8 bit 和16 bit 頻域卷積運算的動態(tài)配置。此外,該加速器可在8 bit 頻域卷積運算中對一對頻域復數(shù)乘法進行打包以充分利用DSP,提升計算性能。本文首先設計一個基于DSP 的頻域計算單元,其支持8 bit 和16 bit 兩種頻域卷積運算,同時可打包一對8 bit 頻域乘法至DSP 以提升運算速度;然后,提出一個映射數(shù)據(jù)流,該數(shù)據(jù)流包含8 bit 和16 bit 兩種形式,可通過數(shù)據(jù)重用方式最大化減少冗余的數(shù)據(jù)處理和數(shù)據(jù)搬運操作。
圖1 展示了基于overlap-saved 頻域卷積的主要過程。其中,i、o和w分別代表空間域的輸入激活值、輸出激活值和權重;ifft、offt和wfft分別代表頻域的輸入激活值、輸出激活值和權重。如圖1 所示,空間域中的輸入激活值和權重經(jīng)FFT 操作變換至頻域。在進行FFT 變換前,需要先在空間域的輸入特征圖上進行切片,即將該輸入特征圖分割為多個相互重疊的小塊,這些小塊將分別進行FFT 操作,并與頻域中的權重進行EWMM 操作,最終得到頻域輸出激活值offt。最后經(jīng)過快速傅里葉反變換(Inverse Fast Fourier Transform,IFFT)操作,可將頻域輸出offt恢復為空間域輸出o。在頻域卷積中,EWMM 操作所執(zhí)行的是復數(shù)乘法,如式(1)所示:
圖1 頻域卷積過程Fig.1 Frequency-domain convolution process
其中:wfft=wr+wi?j,wr和wi分別代表實部和虛部;同理,ifft=ir+ii?j;x、y和z是中間參數(shù),代表該復數(shù)乘法所包含的3 個實數(shù)乘法。
圖2 展示了Xilinx FPGA Ultrascale 系列中DSP內(nèi)部的簡化架構(gòu)。具體來說,該DSP 主要包含一個預加法器(圖中以“+/-”表示,可執(zhí)行加法或減法操作)、一個乘法器(圖中以“×”表示)以及一個后加法器(圖中以“+”表示)。DSP 可通過控制信號來選擇執(zhí)行模式,如inmode 信號可控制預加法器執(zhí)行加法或減法操作;opmode 信號可控制后加法器的輸入,即選擇0 或輸入寄存器C[47:0]。
圖2 DSP 內(nèi)部架構(gòu)Fig.2 Internal architecture of DSP
本文設計的加速器同時支持8 bit 和16 bit 頻域卷積運算。在計算8 bit 頻域乘法時,輸入數(shù)據(jù)(8 bit)與DSP 固有的輸入帶寬(27 bit)相差較大,若不考慮優(yōu)化,DSP 一次執(zhí)行一個8 bit 頻域乘法運算,無疑會造成DSP 輸入帶寬的嚴重浪費(尚有70%的輸入帶寬未使用)。為充分利用DSP 的輸入帶寬,本文借鑒空間域中已有的數(shù)據(jù)打包策略[14-16],使一個DSP 可同時計算一對8 bit 頻域乘法。然而,空間域的打包策略僅適用空間域卷積計算模式,無法用于頻域卷積。因此,如何針對頻域卷積模式設計一種DSP 數(shù)據(jù)打包策略成為本文面臨的第1 個挑戰(zhàn)。其次,在設計過程中觀察到頻域卷積運算存在大量的可重用數(shù)據(jù),如何利用該特點減少冗余的數(shù)據(jù)處理和數(shù)據(jù)搬運操作為本文面臨的第2 個挑戰(zhàn)。
為解決第1 個挑戰(zhàn),本文設計了基于DSP 的頻域計算單元,當加速器計算8 bit 頻域卷積時,該單元可打包一對頻域乘法至DSP 以提升吞吐率。需要注意的是,位于打包結(jié)果較低比特位的有符號數(shù)在DSP 運算過程中會被識別為無符號數(shù),導致輸出結(jié)果不正確。本文通過在DSP 的輸入寄存器C[47:0]中放置偏移值,以此修正最后的運算結(jié)果,并提供了生成寄存器C 中偏移值的算法。當計算16 bit 頻域卷積時,頻域計算單元不執(zhí)行打包操作,可直接執(zhí)行頻域乘法運算。
為解決第2 個挑戰(zhàn),本文充分利用頻域卷積中的數(shù)據(jù)重用特性?;趫D1 和式(1),本文發(fā)現(xiàn)3 種頻域輸入數(shù)據(jù)可重用形式:1)圖1 中不同輸出通道的權重wfft可重用同一個切片上的輸入激活值ifft;2)圖1 中不同切片(如T1和T2)的輸入激活值ifft可重用同一輸出通道的權重wfft;3)式(1)中存在可重用數(shù)據(jù),如y和z的計算中,ir和ii是重復出現(xiàn)的?;谝陨? 種形式,本文設計一個能夠充分利用數(shù)據(jù)重用特性的映射數(shù)據(jù)流,以此減少冗余的數(shù)據(jù)處理和數(shù)據(jù)搬運操作。
本節(jié)闡述所提出的8 bit 和16 bit 混合精度頻域卷積神經(jīng)網(wǎng)絡加速器FHA,同時介紹加速器內(nèi)部相關模塊的設計以及所提出的映射數(shù)據(jù)流。
圖3 為所提出的FHA 加速器架構(gòu)。FHA 主要包含4 個模塊:片上緩存模塊,快速傅里葉(反)變換(FFT/IFFT)模塊,控制(Ctroller,Ctrl)模塊,頻域處理單 元(Frequency-domain Processing Element,F(xiàn)PE)模塊。
圖3 FHA 加速器架構(gòu)Fig.3 FHA accelerator architecture
在圖3 中,片上緩存模塊包括全局激活值緩存(Global Activiation Buffer,GAB)、全局權重緩存(Global Weight Buffer,GWB)和局部緩存(Local Buffer,LB)。GAB 存儲來自外部存儲器(Memmory,Mem)的輸入激活值和經(jīng)IFFT 模塊變換后的輸出激活值。GWB 存儲來自外部存儲器的復數(shù)權重。LB暫存經(jīng)FFT 模塊變換后的復數(shù)輸入激活值。FFT/IFFT 模塊將激活值在空間域和頻域之間進行轉(zhuǎn)換。FPE 模塊是一個頻域計算單元,可完成8 bit和16 bit的頻域乘法運算。FPE模塊由4個部分組成,分別為數(shù)據(jù)處理(Data Process,DP)模塊、DSP、累加(Accumulator,Acc)模塊和數(shù)據(jù)恢復(Recover,Rec)模塊。DP 模塊可以根據(jù)頻域卷積模式(8 bit 或16 bit),將數(shù)據(jù)填充至DSP 的輸入寄存器。特別地,對于8 bit 頻域卷積,DP 模塊可將一對頻域乘法打包至一個DSP 中進行運算。DSP 用于執(zhí)行頻域復數(shù)乘法。Rec模塊用于恢復復數(shù)輸出激活值的實部和虛部。緩存映射網(wǎng)絡(Buffer Mapping Net,BMN)模塊主要用于輸入數(shù)據(jù)到局部緩存LB 的有序映射。Ctrl模塊為中央控制器,用于控制所有模塊正確有序工作。
為進一步說明每個模塊的作用,圖4 展示了加速器FHA 的運轉(zhuǎn)過程。第①步,從片外存儲器Mem分別將權重和輸入激活值搬運至GWB 和GAB 模塊。需要注意的是,權重已在片外完成離線FFT 變換,因此存儲于GWB 模塊的是頻域權重;而GAB 模塊存儲的是未經(jīng)變換的空間域激活值。第②步,GAB 模塊中的空間域激活值進入FFT/IFFT 模塊執(zhí)行FFT 變換,得到頻域激活值。第③步,GWB 模塊中存儲的頻域權重和經(jīng)FFT 變換后的頻域激活值一同進入FPE 中的BMN、LB 和DP 模塊,分別完成數(shù)據(jù)路由、數(shù)據(jù)暫存和數(shù)據(jù)打包操作,打包結(jié)果將被送至FPE 進行計算。第④步,F(xiàn)PE 中的DSP 和Acc 模塊執(zhí)行頻域乘法和通道累加操作。第⑤步,Acc 模塊輸出的數(shù)據(jù)進入Rec 模塊,恢復頻域輸出激活值。第⑥步,頻域輸出激活值進入FFT/IFFT 模塊并執(zhí)行IFFT 變換。第⑦步,F(xiàn)FT/IFFT 模塊輸出空間域激活值至GAB 模塊。第⑧步,GAB 模塊將空間域輸出激活值存至片外存儲器Mem 中。以上每一步驟均接受來自Ctrl 模塊的控制和調(diào)度。至此,加速器FHA完成基于打包輸入的復數(shù)乘加計算流程。
圖4 FHA 加速器運轉(zhuǎn)過程Fig.4 FHA accelerator operation process
圖5 描述BMN 模塊和FPE 中的DP 模塊。在圖5 中,BMN 模塊可將輸入數(shù)據(jù)路由至局部緩存LB的有序位置,從而使DP 模塊在8 bit 和16 bit 模式下對LB 的訪存方式統(tǒng)一。如圖5(a)所示:對于8 bit 頻域卷積,輸入數(shù)據(jù)ir1、ii1、ir2、ii2經(jīng)過BMN 模塊后,將在局部緩存中以圖示1~4 的位置按序存放。如圖5(b)所示:對于16 bit 頻域卷積,輸入數(shù)據(jù)ir1的高有效字節(jié)ir1[15:8]存放在位置1,低有效字節(jié)ir1[7:0]存放在位置3;輸入數(shù)據(jù)ii1的高有效字節(jié)ii1[15:8]存放在位置2,低有效字節(jié)ii1[7:0]存放在位置4。之后在DP模塊中,無論8 bit 或16 bit 頻域卷積模式,寄存器A均從位置1 和3 處取值,寄存器D 均從位置2 和4 處取值,從而實現(xiàn)訪存方式統(tǒng)一。DP 模塊用于將輸入數(shù)據(jù)填充至DSP 的輸入寄存器A 和D 中,在8 bit 和16 bit 兩種模式下有不同的填充方式,如圖5(a)和圖5(b)所示。
圖5 BMN 模塊與DP 模塊Fig.5 BMN module and DP module
如圖6 所示,基于式(1)所示的復數(shù)乘法,以wi1?(ir1+ii1)和wi1?(ir2+ii2)為例,描述了FPE 的數(shù)據(jù)路徑。由于FPE 可計算8 bit 和16 bit 兩種模式的頻域乘法,因此圖6 所展示的數(shù)據(jù)路徑有兩個。對于每種計算模式,F(xiàn)PE 均需完成6 個階段(j~j+5)的操作。階段j為DSP 輸入數(shù)據(jù)的準備階段,對于8 bit 頻域卷積,兩個8 bit 數(shù)據(jù)將打包在寄存器A 或D 中,ir1和ir2打包于寄存器A,ii1和ii2打包于寄存器D;對于16 bit 計算模式,單個16 bit 數(shù)據(jù)直接放置于寄存器A 或D 中,如ir1置于寄存器A,ii1置于寄存器D。在階段j+1 和j+2 中,依次執(zhí)行加/減法操作和乘法操作。對于8 bit頻域卷積,DSP 中可同時計算一對頻域乘法。由于在8 bit 頻域乘法運算中,位于寄存器A 和D 較低字節(jié)的有符號數(shù)ir2和ii2會被DSP 識別為無符號數(shù),因此可能造成后續(xù)結(jié)果不正確。為解決這一問題,本文在階段j+3 中通過加上偏移值以修正乘法結(jié)果,該偏移值存儲在DSP 的輸入寄存器C 中。寄存器C 中偏移值的計算將在2.3 節(jié)具體闡述。對于16 bit 頻域卷積,寄存器C 不必使用,在階段j+3 中始終加零。在階段j+4 和j+5,F(xiàn)PE 能夠在輸入通道方向累加乘法結(jié)果,最后在Rec 模塊中恢復出最終的復數(shù)輸出激活值。Rec 模塊的具體細節(jié)如圖6 最右側(cè)所示,x、y、z為式(1)中的中間參數(shù),復數(shù)輸出的實部可由x+y得出,虛部可由x+z得出。
圖6 FPE 數(shù)據(jù)路徑Fig.6 Data path of FPE
算法1 描述了如何生成寄存器C 中的偏移值以修正乘法結(jié)果的低位項,本節(jié)結(jié)合理論分析,具體闡述該算法。
算法1DSP 中寄存器C 的數(shù)值生成
輸入Al,Dl,B,inmode//Al和Dl分別為DSP 中寄存器A和D 打包后的較低字節(jié),B為DSP 中寄存器B 的值,inmode 為DSP 預加法器的控制信號
設Al和Dl分別為DSP 中寄存 器A 和D 打包后的較低字節(jié),B為DSP 中寄存器B 的值。C為寄存器C中存儲的偏移值。inmode 為DSP 中預加法器的控制信號,可控制寄存器A 和D 執(zhí)行加法或減法運算。由于Al和Dl為8 bit有符號整數(shù),因此其值可表示為:
其中:a7和d7分別為Al和Dl的 符號位分別為Al和Dl數(shù)值位部分的值。則(Al±Dl)?B可表示為:
由于Al和Dl分別位于寄存器A 和D 的較低字節(jié),在進行(Al±Dl)?B運算時被解讀為無符號數(shù),不妨設Al和Dl所對應的無符號數(shù)分別為的值可表示為:
由式(2)和式(4)可知,實際結(jié)果與正確結(jié)果間存在偏移值C,即:
當inmode為“+”時(表示Al和Dl之間執(zhí)行加法操作),C=-(a7+d7)?B?28存在3種取值情況:1)當Al和Dl均為負時(a7=1,d7=1),C=-B?29;2)當Al和Dl一個為負而另一個非負時(a7=1,d7=0 或a7=0,d7=1),C=-B?28;3)當Al和Dl均非負時(a7=0,d7=0),乘法結(jié)果無需修正,C=0。如算法1 第1~7 行所示。
當inmode為“-”時(表示Al和Dl之間執(zhí)行減法操作),C=-(a7-d7)?B?28也存在3 種取值情況:1)當Al為負而Dl非負時(a7=1,d7=0),C=-B?28;2)當Al非負而Dl為負時(a7=0,d7=1),C=B?28;3)當Al和Dl同號時(a7=0,d7=0 或a7=1,d7=1),乘法結(jié)果無需修正,C=0。如算法1 第8~14 行所示。
圖7 基于FPE 描述本文所提加速器FHA 的映射數(shù)據(jù)流。
圖7 映射數(shù)據(jù)流Fig.7 Mapping dataflow
圖7(a)和圖7(b)給出了頻域卷積的一個實例。在該實例中,輸出通道M=2,輸入通道c=2,ifft和offt分別為頻域中的輸入激活值和輸出激活值,ifft的尺寸為3(H=W=3),wfft的尺寸為2(H'=W'=2)。A1、A2、W1和W2均為復數(shù),在本例中,
圖7(c)描述了8 bit 頻域卷積模式的映射數(shù)據(jù)流。在圖7(b)所示的一組頻域乘法中,
圖7(d)描述了16 bit 頻域卷積模式的映射數(shù)據(jù)流。由于DSP 寄存器的位寬限制,16 bit 的輸入數(shù)據(jù)沒有采用打包策略,DSP 在每一個周期中僅計算一個頻域乘法。值得一提的是,數(shù)據(jù)重用特征在16 bit 映射數(shù)據(jù)流中仍存在。例如,cycle 1~3 中的計算可重用cycle 0 的輸入數(shù)據(jù)ir1和ii1。FPE 中加減法器產(chǎn)生的中間結(jié)果同樣可以被重用,如在cycle 1 和cycle 3,加減法器均可重用上一周期的執(zhí)行結(jié)果,從而跳過該執(zhí)行周期。
從上文對于映射數(shù)據(jù)流的描述可知,數(shù)據(jù)重用源于兩個方面:
1)來自不同切片(如T1和T2)的輸入激活值ifft可被不同輸出通道的復數(shù)權重所重用。例如,對于8 bit 頻域卷積,在cycle 0 中打包好的復數(shù)輸入激活值{ir1,ir2}和{ii1,ii2}可以在cycle 1 中被另一權重W2的虛部wi2所重用;此外,通過配置DSP 加減法器的控制信號inmode,該打包數(shù)據(jù)同樣可以在cycle 2 為權重W1的實部wr1所重用。對于16 bit 頻域卷積也存在相同的情況,如圖7(d)所示,cycle 0 中復數(shù)輸入激活值A1的實部ir1和虛部ii1可以在cycle 1~3 中分別被wi2、wr1、wr2所重用。
2)來自不同輸出通道的復數(shù)權重wfft可以被不同切片的復數(shù)輸入激活值所重用。例如,對于8 bit頻域卷積,在cycle 4 中打包好的復數(shù)權重{wr1,wr2}和{wi1,wi2}可以在cycle 5 中被另一輸入激活值A2的虛部ii2所重用。除上述情形外,F(xiàn)PE 第二個階段(stagej+1)生成的中間結(jié)果也可以被重用,從而減少能耗開銷。
圖8 展示了映射數(shù)據(jù)流數(shù)據(jù)重用的效果,分別從訪存量和能耗兩個方面進行評估。在圖8 中,折線展示了歸一化的訪存量。可以發(fā)現(xiàn),對于ResNet-18和VGG16 模型,數(shù)據(jù)重用相比無數(shù)據(jù)重用分別減少了33%和36%的訪存量。柱狀圖展示了在數(shù)據(jù)重用和無數(shù)據(jù)重用情形下加速器的能耗。可以發(fā)現(xiàn),數(shù)據(jù)重用相比無數(shù)據(jù)重用具備更低的能耗,如在ResNet-18 中利用數(shù)據(jù)重用相比無數(shù)據(jù)重用情形可以降低10%的能耗。因此,考慮了數(shù)據(jù)重用的映射數(shù)據(jù)流能夠降低訪存量和加速器能耗。
圖8 映射數(shù)據(jù)流數(shù)據(jù)重用效果Fig.8 Data reuse effects of mapping dataflow
本文基于Xilinx Ultra96-V2 FPGA[17]進 行評估。Ultra96-V2 的數(shù)字信號處理塊為DSP48E2,由一個27 位預加法器、27×18 位乘法器、48 位算術邏輯單元(ALU)和48 位累加器所組成。本文基于ImageNet 數(shù)據(jù)集[18-19]和兩個具有代表性的CNN 模型(ResNet-18[20]和VGG16[21])對所提FPGA 加速器進行評估。其中,ImageNet 數(shù)據(jù)集為當前最經(jīng)典和分類齊全的數(shù)據(jù)庫之一,廣泛應用于CNN 加速器設計領域(包括本文所對比的相關加速器)。ResNet-18 和VGG16 均為當前流行的CNN 模型,本文將它們作為所設計加速器的測試基準。文獻[22-23]表明CNN 模型的第一層和最后一層卷積層對模型的影響最大,因此本文對這兩個卷積層設置為16 bit fixed,其他卷積層則設置為8 bit fixed,如表1 中的方案5 所示。為進一步探索卷積層數(shù)據(jù)精度變化對CNN 模型算法性能的影響,本文給出了其他4 種方案的精度配置,如表1 中的方案1~4 所示。其中,方案1 為各卷積層均設置為8 bit fixed,方案2 為各卷積層均設置為16 bit fixed,方案3 和4 為第一層或最后一層卷積層為16 bit fixed 且其他卷積層為8 bit fixed。本文在下文對表1 中5 種方案的模型準確率進行了比較,深入分析卷積層數(shù)據(jù)精度變化對CNN 模型準確率的影響,并進一步驗證方案5 的合理性。本文的設計平臺為Xilinx Vivado v2018.3 套件,首先基于Vivado HLS 對ResNet-18 和VGG16 進行模型實現(xiàn)和硬件優(yōu)化,并基于Vivado 完成所設計加速器的硬件綜合實現(xiàn)。表2 為本文加速器的硬件配置。
表1 各卷積層的數(shù)據(jù)精度配置Table 1 Data precision configuration for each convolutional layer
表2 FHA 的硬件配置Table 2 Hardware configuration of FHA
本文從3 個角度出發(fā)評估所提出的加速器:
1)本文與當前最先進的基于FPGA 的8 bit 空間域卷積神經(jīng)網(wǎng)絡加速器[14]進行了比較。文獻[14]將空間域中兩個8 bit 的乘累加操作打包在一個DSP 塊中以提高吞吐量。
2)由于目前還未出現(xiàn)基于FPGA 的混合精度頻域卷積神經(jīng)網(wǎng)絡加速器,本文通過與當前最具代表性的基于FPGA 的頻域卷積神經(jīng)網(wǎng)絡加速器[11,24-25]進行比較,以此來評估本文所提出的加速器架構(gòu)FHA。其中:文獻[11]基于overlap-saved 方法實現(xiàn)頻域FPGA 加速器并取得了不錯的性能;文獻[24]利用高度的數(shù)據(jù)并行和任務并行來提升頻域卷積計算的吞吐率;文獻[25]在3 種硬件平臺上實現(xiàn)了基于overlap-add 方法的頻域加速器。
3)為了進行更全面的評估,本文對所提加速器以3 種形態(tài)進行實現(xiàn),并比較不同形態(tài)間的性能差異:(1)本文所提加速器中的FPE 模塊以LUT 資源進行實現(xiàn),此時對于8 bit 頻域卷積而言沒有數(shù)據(jù)打包操作,用FHA-lut 表示;(2)FPE 模塊以DSP 資源進行實現(xiàn),但是在8 bit 頻域卷積中不對輸入數(shù)據(jù)進行打包,用FHA-dsp-basis 表示;(3)FPE 模塊以DSP 資源進行實現(xiàn),且在8 bit 頻域卷積中將一對頻域乘法進行打包以提高吞吐能力,用FHA 表示。
表3 將FHA 與具有代表性的基于FPGA 的空間域和頻域卷積神經(jīng)網(wǎng)絡加速器進行了比較,其中,性能指標為GOP,能效比為GOP 與能耗的比值,資源效率為GOP 與乘法數(shù)的比值。
表3 加速性能比較Table 3 Comparison of acceleration performance
與文獻[14]的空間域加速器方案對比,本文加速器的性能僅為其10%,但所用到的乘法數(shù)相比其卻有大幅減少,這表明本文的加速器能夠達到更高的資源效率(1.9 倍)。FHA 較高的資源效率來自于頻域計算復雜度的降低。
與文獻[11,24-25]的頻域加速器方法相比,F(xiàn)HA 的能效比是它們的1.2~6.0 倍。能效比的提升來自于3 個方面:1)FHA 中的FPE 模塊能夠打包8 bit 頻域乘法以提高吞吐量,同時能夠節(jié)省內(nèi)存訪問和計算開銷;2)FHA 可以重用DSP 輸入寄存器中的數(shù)據(jù)以節(jié)省能耗開銷;3)FHA 可以重用中間計算結(jié)果,從而減少DSP 加減法器部件的能耗。
表4 展示了本文所提加速器3 種不同形態(tài)的性能比較??梢园l(fā)現(xiàn):
表4 3 種不同形態(tài)加速器的比較Table 4 Comparison of three different forms of accelerators
1)8 bit 頻域卷積中的DSP 打包操作可提高能效比,能效比的提高來自于更高的吞吐量和更低的功耗。例如,與FHA-lut 相比,F(xiàn)HA 在ResNet-18 和VGG16 模型的推斷上分別達到了原來能效比的1.8和2.2倍。
2)與FHA-dsp-basis 相比,F(xiàn)HA 的LUT 資源使用率有所增加,在ResNet-18 和VGG16 上分別增加了10.45 和12.52 個百分點,這主要來源于FHA 中的數(shù)據(jù)處理操作,如對8 bit 頻域乘法的打包。然而多余的資源開銷帶來的效果是顯著的,如與FHA-dspbasis 相比,F(xiàn)HA 在ResNet-18 和VGG16 模型的推斷上可分別達到1.6 和1.9 倍的性能提升。同時多余的LUT 資源開銷可平衡FPGA 的資源使用。
3)面對相同的計算規(guī)模,DSP 資源比LUT 資源具有更低的功耗。例如,與FHA-lut相比,F(xiàn)HA-dsp-basis具有更低的功耗,在ResNet-18 和VGG16 上分別降低0.479 和0.552 W。
圖9 展示了3 種不同形態(tài)加速器的功耗分解??梢园l(fā)現(xiàn)對片外存儲器的訪問占據(jù)總功耗的較大部分,在FHA-lut、FHA-dsp-basis 和FHA 中分別占據(jù)了45.4%、54.4%和53.5%。因此,利用8 bit 和16 bit 混合精度頻域卷積來減少內(nèi)存占用,進而降低加速器的能耗開銷是很有必要的。
圖9 3 種不同形態(tài)加速器的功耗分解Fig.9 Power breakdown of three different forms of accelerators
由于在8 bit 和16 bit 混合精度頻域卷積中,低精度卷積運算部分會導致CNN 模型的準確率下降,因此本文進一步評估了模型的準確率性能,如圖10 所示,其中展示了ResNet-18 和VGG16 模型準確率隨訓練迭代數(shù)變化的曲線??梢园l(fā)現(xiàn),與全精度的空間域CNN 模型和頻域CNN 模型相比,混合精度頻域CNN 模型可以在訓練中實現(xiàn)相似的準確率變化趨勢。與傳統(tǒng)空間域的CNN 模型相比,混合精度頻域CNN 模型能夠達到可觀的準確率。例如:在ResNet-18 的訓練中,混合精度頻域CNN 模型能夠達到與全精度空間域CNN 模型相同的準確率;在VGG16 的訓練中,混合精度頻域CNN 模型相比全精度空間域CNN 模型僅有1.7%的精度損失。微小的準確率下降主要來自低精度數(shù)據(jù)表征能力的減弱,但低精度數(shù)據(jù)位寬的減少也降低了硬件的內(nèi)存需求和計算資源開銷。
圖10 模型準確率隨訓練迭代的變化趨勢Fig.10 Change trend of model accuracy with training iterations
在表5 中,列出了ResNet-18 和VGG16 模型在表1 中5 種不同數(shù)據(jù)精度配置方案下的準確率。對于ResNet-18 模型,方案5 的準確率與方案2 相同,這得益于ResNet-18 的殘差網(wǎng)絡結(jié)構(gòu)和較少的網(wǎng)絡層數(shù);且方案5 的準確率相比方案1 有1.3 倍的提升,相比方案3、4 分別有1.03 和0.83 倍的提升。對于VGG16 模型,方案5 的準確率相比方案2 有1.2%的下降,相比方案1 有1.3 倍的提升,相比方案3 和4 分別有1.03 和0.83 倍的提升。雖然VGG16 模型在方案5 的準確率相比方案2 有微小下降,但由于方案5 只有第一層和最后一層卷積層的精度為16 bit fixed,因此能夠有效降低模型大小,同時8 bit頻域卷積可在DSP 中進行數(shù)據(jù)打包,進一步加快了模型推理速度。對于ResNet-18和VGG16 模型,方案5 相比于方案1、3、4 有更高的準確率,進一步驗證了本文依據(jù)文獻[22-23]將第一層和最后一層卷積層設置為16 bit fixed 的合理性。
表5 不同數(shù)據(jù)精度配置方案下的模型準確率Table 5 Models accuracy under different data precision configuration schemes %
本文設計了基于FPGA 的8 bit 和16 bit 混合精度頻域卷積神經(jīng)網(wǎng)絡硬件加速器,該加速器能夠動態(tài)配置8 bit 和16 bit 的頻域卷積模式,同時能夠打包8 bit 頻域乘法至DSP 以提高吞吐量。本文利用頻域數(shù)據(jù)重用的特點最大限度減少冗余操作,進而減少數(shù)據(jù)移動和計算開銷。下一步將探索本文設計對更多混合精度組合的支持,進一步優(yōu)化內(nèi)存占用和資源開銷,提升加速器性能。