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