呼延烺,李 映,蔣冬梅,張艷寧,周 詮,魏佳圓,劉娟妮
(1.西北工業(yè)大學(xué)計算機(jī)學(xué)院,西安 710129;2.空間微波技術(shù)國家級重點(diǎn)實驗室,西安 710100)
近年來人工智能技術(shù),尤其是深度學(xué)習(xí)技術(shù)取得了突破性進(jìn)展,在多個任務(wù)上均取得了最優(yōu)性能。相比于傳統(tǒng)技術(shù),深度學(xué)習(xí)技術(shù)在性能上有巨大優(yōu)勢,眾多學(xué)者嘗試將該技術(shù)應(yīng)用到目標(biāo)檢測[1]和識別、異常檢測[2]、變化檢測[3]、對地觀測[4]等空間任務(wù)中。相關(guān)研究成果表明深度學(xué)習(xí)技術(shù)性能優(yōu)異,在空間任務(wù)中具有廣闊的應(yīng)用前景。
遙感圖像目標(biāo)檢測是遙感圖像處理的基本任務(wù)之一,也是遙感圖像分析、圖像理解和場景理解等高級應(yīng)用的基礎(chǔ)。但受空間環(huán)境限制,星上計算能力和存儲能力與地面相差甚遠(yuǎn),而且深度學(xué)習(xí)算法是計算密集型和存儲密集型算法,其優(yōu)異的性能是以大量計算資源和存儲資源消耗為代價。在星上部署基于深度學(xué)習(xí)的目標(biāo)檢測算法比地面上更具有挑戰(zhàn)性,因此,目標(biāo)檢測算法在軌加速技術(shù)是一個重要研究領(lǐng)域,同時也是研究熱點(diǎn)和難點(diǎn)。
在星上實現(xiàn)深度學(xué)習(xí)算法加速主要涉及加速器硬件平臺、算法模型以及計算引擎三個方面。
加速器硬件平臺主要有圖形處理器(GPU)、中央處理器(CPU)以及現(xiàn)場可編程門陣列(FPGA)。當(dāng)前地面深度學(xué)習(xí)算法加速以GPU為主,盡管GPU計算性能強(qiáng)勁,但其功耗動輒百瓦以上,能效比較低;CPU能效相對GPU較高,但其計算能力有限,因此GPU及CPU均無法滿足在軌應(yīng)用需求。
隨著深度學(xué)習(xí)算法在地面上不斷深入應(yīng)用,諸如Nvidia Jetson系列GPU及Myriad 2視覺處理器(VPU)等高能效比加速器也隨之產(chǎn)生。此類加速器配套和生態(tài)也較為成熟,可很好應(yīng)用于地面移動場景。但此類加速器并非針對空間環(huán)境設(shè)計,在空間應(yīng)用時,會因空間環(huán)境的單粒子效應(yīng)造成加速器發(fā)生單粒子翻轉(zhuǎn)[5],導(dǎo)致算法性能急劇下降甚至造成加速器永久損壞。因此,需要選用適合空間環(huán)境的硬件平臺來實現(xiàn)深度學(xué)習(xí)算法的加速。
FPGA在傳統(tǒng)星上處理中應(yīng)用廣泛,具有應(yīng)對空間環(huán)境的成熟方法。此外,F(xiàn)PGA具有可編程特點(diǎn),在模型和算法開發(fā)過程中可以不斷改進(jìn)和完善,甚至可以實現(xiàn)在軌重構(gòu)。文獻(xiàn)[6-7]表明ESA Φ-Sat-1衛(wèi)星采用Myriad 2 VPU實現(xiàn)在軌智能云檢測,但由于其可靠性問題,在后續(xù)任務(wù)中已經(jīng)采用FPGA作為在軌加速器件。鑒于FPGA的高可靠性、在軌重構(gòu)能力以及強(qiáng)大的處理能力,將FPGA作為星載深度學(xué)習(xí)算法加速硬件平臺是一個可行的方案。
在加速器所實現(xiàn)的算法模型方面,學(xué)者們對此進(jìn)行了廣泛研究[8-10],但基于FPGA的加速器設(shè)計與最新算法模型之間仍有較大差距[11]。有一部分FPGA加速器是針對AlexNet[12],VGG16[13],ResNet[14]等模型所設(shè)計,此類模型參數(shù)量大,消耗大量計算資源和存儲資源,難以在星上部署。
有一部分FPGA加速器是針對輕量化模型所設(shè)計[15-17],此類模型參數(shù)量少,消耗的計算量也小。此類加速器所消耗的硬件資源和功耗相對通用大模型具有較大優(yōu)勢,適合在星上進(jìn)行部署。
針對目標(biāo)檢測算法在軌應(yīng)用需求,在前期工作中將輕量化思想引入遙感圖像目標(biāo)檢測,提出了一種輕量化遙感圖像目標(biāo)檢測算法MSF-SNET[18]。該算法參數(shù)量僅有1.54 M,計算量僅有0.21 GFLOPs(每秒千兆次浮點(diǎn)運(yùn)算),適合在星上部署。針對特定算法設(shè)計特定加速器,可以有效提高資源利用率,是未來FPGA加速器發(fā)展的一個重要方向。
在加速器設(shè)計與實現(xiàn)方面,根據(jù)加速器的結(jié)構(gòu)大致可以分為兩大類,一類是流水線結(jié)構(gòu)[16],另外一類是統(tǒng)一處理結(jié)構(gòu)[15,19]。
流水線結(jié)構(gòu)的優(yōu)點(diǎn)是流水線上的每一個卷積層并行處理,有利于提高加速器性能。該結(jié)構(gòu)的缺點(diǎn)是其硬件開銷較大,每一個卷積層都需要獨(dú)立的處理單元,每一個處理單元也只能處理與其對應(yīng)的卷積層,從而造成了硬件資源開銷大,利用率低。因此,流水線結(jié)構(gòu)只適合用來實現(xiàn)層數(shù)較少且結(jié)構(gòu)單一的卷積網(wǎng)絡(luò)加速。
統(tǒng)一處理結(jié)構(gòu)的優(yōu)點(diǎn)是能夠大幅降低硬件資源消耗,能夠在有限的硬件資源上實現(xiàn)任意層數(shù)的CNN加速,硬件資源利用率較高。該結(jié)構(gòu)的缺點(diǎn)是需要不斷從外部DDR中讀取輸入特征圖到片上緩存,因而加速器需要有足夠的外部存儲器帶寬,且增加了數(shù)據(jù)從外部存儲器進(jìn)入加速器的時延以及不斷讀寫外部緩存造成功耗的增加。
在空間環(huán)境中能夠提供的硬件資源有限,且MSF-SNET輕量化算法具有分支網(wǎng)絡(luò),在星上采用統(tǒng)一處理結(jié)構(gòu)具有可行性。
無論流水線結(jié)構(gòu)還是統(tǒng)一處理結(jié)構(gòu),都需要計算引擎來完成CNN中的運(yùn)算。計算引擎按照其實現(xiàn)方式可以分為GEMM[19](General matrix multiplic-ations),WT[20](Winograd transform),FFT[21](Fast Fourier transform)以及乘累加樹[22-23]。
GEMM的基本思想是將3維卷積轉(zhuǎn)換成兩個矩陣相乘。其優(yōu)點(diǎn)是通用性強(qiáng),CPU、GPU以及Intel的OpenCL均采用該方法實現(xiàn)加速,缺點(diǎn)是矩陣相乘會在輸入特征圖中引入冗余數(shù)據(jù),從而造成硬件資源利用率降低,計算效率下降[24]。
WT方法同樣是將卷積轉(zhuǎn)換為矩陣相乘進(jìn)行運(yùn)算。其優(yōu)點(diǎn)是可以有效減少計算量,缺點(diǎn)是需要設(shè)計不同的變換矩陣來應(yīng)對不同大小的卷積核,在FPGA中實現(xiàn)矩陣乘法需要消耗大量的存儲資源。
FFT方法是將卷積從空域轉(zhuǎn)換到頻域進(jìn)行計算,文獻(xiàn)[25]指出FFT方法在卷積核尺寸大于5時計算效率較高,在卷積核尺寸較小時并無優(yōu)勢。
乘累加樹在FPGA加速器中使用較多,該方法通過給卷積核的每一元素設(shè)計一個乘法器,然后使用累加樹將乘積累加起來從而實現(xiàn)卷積運(yùn)算,其優(yōu)點(diǎn)是計算效率高且實現(xiàn)方便簡單,缺點(diǎn)是針對不同的卷積算子需要設(shè)計不同的計算引擎。
雖然文獻(xiàn)中對基于FPGA的CNN網(wǎng)絡(luò)加速技術(shù)進(jìn)行了廣泛研究,但在輕量化目標(biāo)檢測加速中仍然存在挑戰(zhàn)。主要體現(xiàn)在輕量化網(wǎng)絡(luò)中往往同時涉及到多種卷積算子,例如ShuffleNet V2以及Mobi-leNetsV2中均涉及到普通3×3卷積和深度可分離卷積,MSF-SNET涉及到了普通3×3卷積、3×3空洞深度可分離卷積和1×1卷積三種卷積算子。目前主流做法是通過GEMM方法或者在加速器中設(shè)計多種計算引擎來實現(xiàn)CNN中多種卷積算子的計算。文獻(xiàn)[15]針對MobileNets中涉及到的普通3×3卷積和深度可分離卷積分別設(shè)計了兩種不同計算引擎,在CNN中卷積逐層計算,不同計算引擎難以同時利用從而造成了硬件資源利用低,計算效率下降。
本文針對輕量化目標(biāo)檢測算法MSF-SNET在軌部署需求,提出了一種在軌目標(biāo)檢測算法加速框架以及一種能夠兼容三種卷積算子的計算引擎,解決了目前輕量化算法FPGA加速中面臨的硬件資源利用低和計算效率低的問題,實現(xiàn)了輕量化目標(biāo)檢測算法MSF-SNET在軌加速。
MSF-SNET算法的骨干網(wǎng)主要由如圖1(a)所示的BU(Basic building unit)和圖1(b)所示的SDU(Spatial down sampling(2x) unit)組成。涉及到3×3卷積、1×1卷積及3×3空洞深度可分離卷積。
圖1 骨干網(wǎng)組成模塊Fig.1 Building blocks of MSF-SNET
當(dāng)輸入特征圖X的通道數(shù)為C,高和寬分別為H和W,采用輸入通道數(shù)為C、輸出通道數(shù)為T的3×3卷積核K進(jìn)行卷積時,輸出特征圖Y為式(1)所示,其尺寸為T×H×W。
(1)
卷積運(yùn)算占用的存儲空間Msc和消耗的計算量Jsc分別為式(2)和式(3)所示。
Msc=T×C×D2×Nb
(2)
Jsc=(2×C×T×D2)×H×W
(3)
式中:D表示標(biāo)準(zhǔn)卷積核尺寸;Nb表示每個參數(shù)量化的比特數(shù)。
當(dāng)采用3×3空洞深度可分離卷積算子對輸入特征圖X進(jìn)行卷積時其輸出特征圖Y為式(4)所示。
(4)
其占用的存儲空間Mdsc和消耗的計算量Jdsc分別表示為式(5)和式(6)。
Mdsc=C×D2×Nb
(5)
Jdsc=(C×D2×H×W)/2
(6)
當(dāng)采用1×1卷積對輸入特征圖X進(jìn)行卷積時,其輸出特征圖Y為式(7)所示。
(7)
其占用的存儲空間MPSC和消耗的計算量Jpsc分別表示為式(8)和式(9)。
Mpsc=C×D2×Nb
(8)
Jpsc=(C×D2×H×W)/2
(9)
為了高效完成MSF-SNET算法中多種卷積算子運(yùn)算,需要將算法并行化。由于卷積核之間相互獨(dú)立,卷積核各個通道之間相互獨(dú)立,通道內(nèi)各個元素之間的運(yùn)算相互獨(dú)立,因此可以在通道和卷積核兩個維度將其展開,并在通道內(nèi)采用乘累加樹的思想實現(xiàn)算法的并行化。
若通道并行度為C,在設(shè)計加速引擎時,采用C個并行計算單元實現(xiàn)并行運(yùn)算。如果卷積核并行度為N,則采用N個加速引擎實現(xiàn)卷積核并行運(yùn)算。
在卷積運(yùn)算中輸入特征圖是一個3維張量,其通道數(shù)為Nin,寬和高分別為W和H,卷積核是一個4維張量,其中卷積核數(shù)目為Nout,其通道數(shù)、寬和高與輸入特征圖對應(yīng)參數(shù)相同。由于FPGA片上資源有限,并不能夠?qū)⑺惴ㄍ耆⑿谢?,因此需要在通道和卷積核兩個維度上進(jìn)行切片。并行化后第q層卷積運(yùn)算所消耗的時間如式(10)所示,所有卷積層消耗時間如式(11)所示。
(10)
(11)
式中:Tr表示輸入特征圖寬和高的分割因子;Nreused是行數(shù)據(jù)復(fù)用因子Nreused_r和列復(fù)用因子Nreused_c之積。
從式(10)和式(11)可以看出算法所消耗的時間與并行度C和N成反比,受片上計算資源限制,C和N需要受式(12)約束。
N×C×NC_DSP≤αNDSP
(12)
式中:NC_DSP為單個通道卷積計算所消耗的計算資源數(shù)量;NDSP為片上計算資源總數(shù);α為經(jīng)驗因子,一般情況下該值取0.7為宜。
為了提高計算引擎效率,減少硬件資源消耗,將批歸一化運(yùn)算融合到卷積層中。在訓(xùn)練過程中,批歸一化可以用式(13)和式(14)表示,其中μ和σ2為均值和方差。
(13)
(14)
(15)
(16)
Y=X*W+B
(17)
Y=X*W′+B′
(18)
在訓(xùn)練結(jié)束后超參數(shù)γ和β以及統(tǒng)計參數(shù)均值和方差已經(jīng)確定,模型中的權(quán)重和偏置可以分別表示為式(15)和式(16)。因此,式(17)所示的卷積運(yùn)算可以融合為式(18)所示的運(yùn)算。在加速器中無需再單獨(dú)設(shè)計批歸一化處理單元。
加速總體框架如圖2所示,主要包含控制模塊、緩存模塊和計算模塊三大部分。緩存模塊用于臨時存儲模型權(quán)重、輸入特征圖和輸出特征圖。片上緩存容量有限,無法將模型所有參數(shù)及輸入特征圖緩存在片上RAM中,需要將模型參數(shù)和輸入特征圖分割成運(yùn)算數(shù)據(jù)單元逐次加載。
圖2 MSF-SNET算法加速總體框架Fig.2 The overall structure of accelerator for MSF-SNET algorithm
在運(yùn)算時通過數(shù)據(jù)總線將輸入特征圖和模型權(quán)重從片上緩存器加載到計算單元。在運(yùn)算結(jié)束后通過數(shù)據(jù)總線將計算結(jié)果寫入片上緩存。
計算模塊負(fù)責(zé)完成MSF-SNET算法中涉及到的所有運(yùn)算。計算模塊由多個功能相同的計算引擎組成,完成卷積核維度的并行計算,其數(shù)量為N,每個計算引擎中含有16 bit定點(diǎn)運(yùn)算資源,完成基本的乘累加及比較運(yùn)算。各個計算引擎之間通過數(shù)據(jù)總線和控制總線相連。根據(jù)FPGA可提供的計算資源靈活增加或者減少計算引擎數(shù)量,各個計算引擎并行完成所分配的計算任務(wù)。
由1.2節(jié)分析可知,計算單元的通道并行度為C,卷積核并行度為N,每個時鐘周期加速器可以處理N個卷積核的C個通道,因此在加速器啟動后將N個卷積核的C個參數(shù)從外部DDR3加載到權(quán)值緩存中,然后將切片后的輸入特征圖從外部DDR3中加載到輸入特征緩存。當(dāng)輸入特征圖和權(quán)值參數(shù)準(zhǔn)備就緒之后,將二者同時加載到計算單元完成相應(yīng)運(yùn)算。以此方式完成卷積層中卷積核所有通道運(yùn)算,并通過輸入特征緩存將計算結(jié)果寫入外部DDR3。
深度卷積網(wǎng)絡(luò)模型參數(shù)通常采用32 bit全精度浮點(diǎn)數(shù)表示,但FPGA并不擅長處理浮點(diǎn)型數(shù)據(jù)。為了在FPGA上實現(xiàn)該算法,在通道間采用動態(tài)量化策略,在通道內(nèi)采用靜態(tài)量化策略將32 bit全精度浮點(diǎn)數(shù)模型參數(shù)轉(zhuǎn)換為16比特定點(diǎn)模型參數(shù)。
計算引擎需要完成MSF-SNET目標(biāo)檢測算法中所包含的1×1卷積、3×3卷積、3×3可分離空洞卷積、ReLU激活、maxpool等功能。為了實現(xiàn)不同卷積算子,文獻(xiàn)[16]針對不同算子設(shè)計了不同計算單元,由于同一時刻并非所有算子都參與運(yùn)算,這種設(shè)計方法大大降低了計算資源利用率。為了提高計算引擎的效率及利用率,本文提出了一種3維立體計算引擎,實現(xiàn)了在同一計算單元中兼容1×1卷積、3×3卷積及3×3可分離空洞卷積三種卷積算子,有效提高了資源利用率。
如圖3所示,3維立體計算引擎由多個計算單元堆疊形成,其數(shù)量為C。每個計算單元均能夠獨(dú)立完成三種卷積算子運(yùn)算、激活及池化運(yùn)算。計算引擎并行完成C個通道的運(yùn)算,這種設(shè)計具有很高的靈活性,可以根據(jù)FPGA片上資源以及加速器的性能需求來選擇合適的計算單元數(shù)量。每個計算單元中包含9個乘法器、9個加法器、9個寄存器、后處理單元以及ReLU模塊。
圖3 三維立體計算引擎Fig.3 3D computing engine
對于標(biāo)準(zhǔn)3×3卷積,每個通道需要進(jìn)行9次乘法運(yùn)算并將其結(jié)果累加。輸入特征圖緩存器輸入一個通道的數(shù)據(jù),權(quán)重緩存器中輸入卷積核的一個通道的參數(shù)。采用9個乘法器完成卷積中的乘法運(yùn)算,之后通過選擇器將9個加法器組成一個加法樹,以流水線方式實現(xiàn)乘累加。卷積結(jié)果寫入寄存器R9中,多個通道的卷積結(jié)果通過加法器累加到一起。再將同一計算引擎中的多個計算單元的計算結(jié)果累加即實現(xiàn)了一個卷積核的一次卷積運(yùn)算。
3×3可分離空洞卷積與標(biāo)準(zhǔn)3×3卷積的計算過程相同,但輸入特征圖和卷積核不同。標(biāo)準(zhǔn)卷積一次輸入3×3的特征圖,空洞卷積則需要輸入5×5的特征圖;標(biāo)準(zhǔn)卷積每個卷積核有多個通道,而空洞卷積每個卷積核僅有一個通道。由于二者計算過程一致,在輸入特征圖進(jìn)入緩存時,將空洞去除,從而使得同一計算單元能夠計算空洞卷積。
對于1×1卷積,每個通道僅需要一次乘法運(yùn)算,然后將多個通道的乘積累加。為了充分利用計算單元中的運(yùn)算資源,通過選擇器將計算單元中的9個乘法器和9個加法器配置為可以獨(dú)立運(yùn)算的卷積運(yùn)算單元。此時,輸入特征圖緩存器輸入一個通道的數(shù)據(jù),權(quán)重緩存器輸入9個卷積核,在一個計算單元中可并行完成9個卷積核運(yùn)算。
圖4 最大池化單元Fig.4 Maxpooling unit
MSF-SNET算法在第一層卷積之后需要進(jìn)行一次3×3最大池化。通常卷積計算采用逐行滑動方法,這種卷積計算方法需要采用line buffer組成池化窗口[15]。為了減少池化所消耗的存儲資源,本文利用卷積計算順序形成池化窗口。卷積運(yùn)算順序按照局部Z形滑動,即在卷積計算過程中先水平滑動3次,然后垂直滑動1次,以此類推,完成9個卷積窗口計算后便會形成一個3×3的池化窗口。從而避免因使用line buffer造成的資源消耗。
最大池化單元設(shè)計如圖4所示。池化運(yùn)算單元輸入為3×3卷積運(yùn)算結(jié)果。兩個控制信號分別為是否是池化層及是否需要進(jìn)行激活。寄存器R用來存儲當(dāng)前最大值,如果是池化層,則將寄存器中存儲的最大值與當(dāng)前卷積結(jié)果進(jìn)行比較,并更新寄存器。當(dāng)9個卷積窗口均完成之后得到最大值。
為降低頻繁訪問外部緩存帶來的數(shù)據(jù)傳輸時延和功耗,需要設(shè)置片內(nèi)特征圖緩存和模型參數(shù)緩存。
模型參數(shù)緩存設(shè)計如圖5所示,加速器中N個計算引擎同步并行運(yùn)行,針對各計算引擎設(shè)計獨(dú)立緩存器WB(Weight Buffer),從而實現(xiàn)模型參數(shù)到計算引擎的同步加載。每個計算引擎中又包含了C個獨(dú)立計算單元,每個計算單元可獨(dú)立完成一次3×3卷積或9次1×1卷積。在WB中設(shè)置C個獨(dú)立BR(Block RAM),分別用來緩存每個計算單元所需要的參數(shù)。BR位寬為9個16位字(144 bit),深度為2×Mi,其中Mi為單次加載的輸入特征圖的通道數(shù)。每個地址存儲1個3×3×Mi卷積核中一個通道的參數(shù)或者9個1×1卷積核中一個通道的參數(shù)。
計算3×3卷積時每個WB中緩存1個卷積核。卷積核按照通道均勻存儲在不同BR中,每個地址存儲一個通道。例如,在C=16,Mi=32時,對于3×3×512的卷積核,第0至31通道按照順序緩存在BR(0)中,第32至第63通道緩存在BR(1)中,以此類推,第480通道至511通道緩存在BR(15)中。每個時鐘周期每個計算單元從其對應(yīng)的BR中加載一個卷積核的一個通道進(jìn)行運(yùn)算。Mi個時鐘周期便可以完成一個卷積核的運(yùn)算。
圖5 模型參數(shù)緩存設(shè)計Fig.5 Weight buffer organization
1×1卷積核在緩存中的組織如圖6所示。每個WB中緩存9個卷積核,9個卷積核并列存儲,同樣按照通道均勻存儲在不同BR中,每個地址并列存儲9個卷積核的一個通道。例如,9個1×1×512的卷積核的第0通道并列存儲在BR(0)中的0地址上。其中第0比特至第15比特為Filter0第一通道的參數(shù),第16比特至第31比特為Filter1第一通道的參數(shù),以此類推,在第128比特至第143比特為Filter8第一通道參數(shù)。每個時鐘周期每個計算單元可以從其對應(yīng)BR中加載9個卷積核的一個通道進(jìn)行運(yùn)算。Mi個時鐘周期便可以完成9個卷積核運(yùn)算。
圖6 1×1卷積核參數(shù)緩存設(shè)計Fig.6 1×1 convolution weight buffer organization
受FPGA內(nèi)部BRAM資源限制,無法將特征圖中所有數(shù)據(jù)加載到片上緩存,因此需要將特征圖進(jìn)行分塊后逐塊加載。為了適配算法中3×3空洞卷積,特征圖按照5×5×Mi大小的數(shù)據(jù)塊進(jìn)行加載,其中Mi為所加載的輸入特征圖的通道數(shù)。
如圖7所示,加速器中共設(shè)置4個數(shù)據(jù)緩沖器DB(Data Buffer),每個DB緩存容量與特征圖數(shù)據(jù)塊大小一致。將DB0和DB1組成一個乒乓緩沖器,DB2和DB3組成另外一個乒乓緩沖器,從而使得加速器能夠連續(xù)將數(shù)據(jù)送入計算引擎進(jìn)行計算。在使用DB0中的數(shù)據(jù)時將第2塊數(shù)據(jù)預(yù)加載到DB1中。在使用DB1中的數(shù)據(jù)時將第3塊數(shù)據(jù)加載到DB0中,以此類推循環(huán)使用兩個數(shù)據(jù)緩存器。
每個DB由5個獨(dú)立的子緩存器組成,每個子緩存器用來存儲數(shù)據(jù)塊一行中所有通道的數(shù)據(jù)。從子緩存器中讀出的數(shù)據(jù)共享給所有計算引擎,并與不同的卷積核進(jìn)行卷積。從圖中可以看出每個子緩存器設(shè)計為三維立體緩存形式,其存儲位寬為5個字,深度為Mi,高度為N,其中N為計算引擎中計算單元數(shù)目。數(shù)據(jù)塊的一行中Mi個通道所有數(shù)據(jù)按照通道均勻存儲在子緩存器中。在一個時鐘周期內(nèi)可以并行讀出N個通道的數(shù)據(jù)。
由于5個子緩存器中分別存儲了5行特征圖,在卷積計算過程中,分別從不同的子緩存器中讀出特征圖數(shù)據(jù)即可以組成一個卷積窗口。
圖7 輸入特征圖緩存設(shè)計Fig.7 Input feature map buffer organization
文獻(xiàn)[10]引入了針對FPGA的Roofline模型用于評估算法與加速器之間的匹配程度。本文采用該模型對所設(shè)計的加速器進(jìn)行定量分析。
加速器性能PATP為
PATP=min(PPE×S,IC×BW)
(19)
式中:PPE為單個計算單元的峰值性能(GFLOPS)。
式(19)中S為可擴(kuò)展因子,表示為
(20)
式中:AR表示FPGA中可用資源;RCPE表示每個計算單元所消耗的資源。
IC計算強(qiáng)度,定義為每字節(jié)外部DRAM數(shù)據(jù)流所能支撐的計算量(FLOPS/Byte),該參數(shù)與算法相關(guān),代表了加速器所需要的帶寬。BW表示加速器可以提供的帶寬。
根據(jù)FPGA的Roofline模型中各個參數(shù)的定義可知,在本算法中PPE為
PPE=F×NBPW×NWOPK
(21)
式中:F表示計算單元運(yùn)行頻率;NBPW表示運(yùn)算字的字節(jié)數(shù)目,本設(shè)計中運(yùn)算字節(jié)數(shù)為2;NWOPK表示單個計算單元所能完成的運(yùn)算量,本設(shè)計中一個時鐘周期內(nèi)完成乘法和加法運(yùn)算各9次。
根據(jù)可擴(kuò)展因子的定義,S可表示為
(22)
式中各項分子表示FPGA中所包含的LUT,F(xiàn)F,DSP,BRAM資源,分母為單個計算單元所消耗的FPGA資源。
計算強(qiáng)度為一個數(shù)據(jù)復(fù)用周期內(nèi)總計算量與數(shù)據(jù)讀寫總量的比值,表示為
(23)
將運(yùn)算中各個參數(shù)代入式(23)之后,計算強(qiáng)度IC表示為
(24)
式中:Nreused_r為行數(shù)據(jù)復(fù)用因子;Nreused_c為列數(shù)據(jù)復(fù)用因子;NPE為同一復(fù)用數(shù)據(jù)通道計算單元數(shù)目;Nread為數(shù)據(jù)復(fù)用周期內(nèi)從外部DRAM中讀取數(shù)據(jù)的次數(shù);Ndata為單次讀取的數(shù)據(jù)量;No為單個數(shù)據(jù)復(fù)用周期內(nèi)需要向外部DARM寫入的數(shù)據(jù)量。三種卷積算子參數(shù)及計算強(qiáng)度如表1所示。
表1 三種卷積算子參數(shù)及計算強(qiáng)度Table 1 Computational intensity and parameters for three convolution operators
BW為運(yùn)算平臺所具有的外部DRAM帶寬,本文所設(shè)計的平臺外部掛8片DDR3,總數(shù)據(jù)位寬為256 bit,數(shù)據(jù)總線頻率為800 MHz,按照80%的效率計算,DDR帶寬為40.96 GB。從roofline模型可知,可擴(kuò)展因子S、時鐘頻率F以及外部DRAM帶寬BW是影響加速器性能的主要因素,其中F和S確定了加速器算力上限,BW確定了加速器帶寬上限。
當(dāng)BW確定時,加速器的帶寬上限確定。由式(19)可知其帶寬瓶頸IC×BW為2589.01GFLOPs。此時,增加時鐘頻率F和可擴(kuò)展因子S均會提高加速器的計算性能,但前者會消耗FPGA中的布線資源,后者會消耗FPGA中的計算資源。當(dāng)時鐘頻率為100 MHz時,S是影響加速器的主要因素。例如,當(dāng)S為128時,其計算性能為460.8GFLOPs,當(dāng)S增加到256時,其計算性能提升到了921.6GFLOPs。當(dāng)S確定時,提高時鐘頻率會提升加速器的性能,例如,在S為256時,將時鐘頻率從100 MHz提高到200 MHz時,其計算性能從921.6GFLOPs提升到1843.2GFLOPs。但是時鐘頻率超過200 MHz之后FPGA布線難度增大,甚至?xí)斐刹季€失敗。
在時鐘頻率F和可擴(kuò)展因子S確定,即加速器所消耗的資源確定的情況下,外部BRAM的帶寬BW是影響加速器性能的主要因素。例如,當(dāng)時鐘頻率為200 MHz,S為256時,由式(21)可知,其計算性能的瓶頸PPE×S為1843.2GFLOPs。當(dāng)DDR芯片從8片減少到4片時,加速器的計算性能IC×BW為1294.54 GFLOPs,由此可見,由于DDR帶寬不足造成了加速器性能由1843.2GFLOPs下降到了1294.54 GFLOPs,損失了29.76%。
本文中使用Verilog硬件描述語言在Xilinx XC7VX690T,XC7K480T,XC7A200T,XC7Z045四種FPGA上實現(xiàn)了該加速器,并對不同F(xiàn)PGA平臺上加速器的性能進(jìn)行評估,通過峰值性能、功耗及推理時間三個指標(biāo)對加速器進(jìn)行評價。加速器設(shè)計采用了Xilinx VIVADO2019.2,加速器功耗采用Xilinx功耗分析工具獲得。
本文加速器在不同F(xiàn)PGA上的資源占用情況如表2所示。當(dāng)N=16,C=16時,此時擴(kuò)展因子S為256,可以在XC7VX690T上實現(xiàn)該加速器。DSP消耗達(dá)到64%,BRAM資源消耗達(dá)到69.80%,LUT和FF資源消耗分別為21.32%和21.15%。
表2 加速器在不同F(xiàn)PGA上的資源消耗情況Table 2 Utilization of the accelerator on different FPGA
可見,DSP資源和BRAM資源是限制加速器規(guī)模和性能的主要因素。時鐘頻率改變不影響DSP資源和BRAM資源的消耗,對FF資源和LUT資源的消耗稍有不同。當(dāng)N和C參數(shù)均為8時,可將該加速器適配到Xilinx中端FPGA XC7K480T上,當(dāng)N和C參數(shù)分別為4和8時,可以將該加速器適配到低端平臺XC7A200T上,當(dāng)N和C參數(shù)分別為4和12時,可以將該加速器適配到Xilinx嵌入式平臺XC7Z045上??梢?,該框架具有良好的擴(kuò)展性,可以根據(jù)需求部署到不同F(xiàn)PGA上。
表3 加速器在不同F(xiàn)PGA上的性能(100 MHz)Table 3 Performance of the accelerator on different FPGA (100 MHz)
當(dāng)頻率為100 MHz時,加速器在不同F(xiàn)PGA上的性能如表3所示。由于XC7VX690T的DSP資源和BRAM資源最多,其可擴(kuò)展因子S最大,在相同的時鐘頻率下加速器可以達(dá)到最高性能和最大能效比。此時,加速器計算性能為921.6GFLOPs,功耗為9.94 W,能效比為92.71,推理時間為0.43 ms。四種FPGA平臺中XC7A200T資源最少,其可擴(kuò)展因子S最高僅為32,此時加速器性能為115.2GFLOPs??梢姡谙嗤瑫r鐘頻率下,不同F(xiàn)PGA平臺上可擴(kuò)展因子不同,所能達(dá)到的性能也不同。
當(dāng)頻率為150 MHz時,加速器在不同F(xiàn)PGA上的性能如表4所示。由于頻率提高了50%,加速器在XC7VX690T上的計算性能提高了50%,達(dá)到了1382.4GFLOPs,推理時間也縮短到了0.29 ms,但功耗增加了3.17 W。在其它三種FPGA平臺上加速器的性能也相應(yīng)提高了50%,功耗也有所增加??梢?,頻率是影響加速器性能的關(guān)鍵因素,提高頻率,可以提高加速器性能,但其功耗也會增加。
表4 加速器在不同F(xiàn)PGA上的性能(150 MHz)Table 4 Performance of the accelerator on different FPGA (150 MHz)
當(dāng)時鐘頻率為200 MHz時,加速器在不同F(xiàn)PGA上的性能如表5所示。當(dāng)頻率進(jìn)一步增加,加速器在XC7VX690T上性能達(dá)到了1843.2GFLOPs,功耗也增加到了16.32 W,能效比為112.94。
表5 加速器在不同F(xiàn)PGA上的性能(200 MHz)Table 5 Performance of the accelerator on different FPGA (200 MHz)
顯然,在加速器帶寬和FPGA平臺確定的情況下,可以通過提高時鐘頻率來提高加速器性能,但是,當(dāng)頻率提高到某一個值時,進(jìn)一步提高時鐘頻率會使得布線失敗。在本設(shè)計中,時鐘頻率超過200 MHz時,布線資源緊張。值得注意的是在時鐘頻率為200 MHz時也可以將本文加速器部署到Xilinx低端FPGA XC7A200T上。在功耗為3.88 W時可以達(dá)到230.4GFLOPs的計算性能,對于256×256×3的圖像推理時間只需要1.72 ms。
由于不同F(xiàn)PGA的資源以及采用的工藝不同,加速器能達(dá)到的規(guī)模和性能也不同。為了實現(xiàn)公平對比,本文分別在Xilinx Virtex-7系列FPGA,Xilinx Z系列FPGA和Intel FPGA上進(jìn)行了對比。Virtex系列FPGA是空間應(yīng)用的主流器件,本文將所提出的加速器分別在100 MHz,150 MHz和200 MHz時與其它性能較好的加速器進(jìn)行對比。
表6 與其它加速器性能對比(100 MHz)Table 6 Performance comparison with other accelerators (100 MHz)
表6顯示了在Virtex-7系列FPGA上頻率為100 MHz時本文所提加速器與其它加速器性能對比結(jié)果。文獻(xiàn)[27]與本文均采用了XC7VX690T,雖然文獻(xiàn)[23,26]采用了XC7VX485T,但屬于同一系列,具有可比性。此時,本文加速器計算性能為921.6GFLOPS,是文獻(xiàn)[27]加速器的2.07倍,是文獻(xiàn)[23]加速器的14.96倍。本文加速器功耗為9.94 W,是文獻(xiàn)[27]加速器功耗的38.2%,是文獻(xiàn)[23]加速器功耗的53%。本文所提出加速器能效比達(dá)到了92.71,是文獻(xiàn)[23]中加速器能效比的28倍,是文獻(xiàn)[27]中加速器能效比的5.16倍。由于本文采用了輕量化網(wǎng)絡(luò),計算時間為0.43 ms,是文獻(xiàn)[27]推理時間的12.75%。可見,在100 MHz時,本文加速器在計算性能、計算時間以及能效比方面具有優(yōu)勢。
表7顯示了頻率為150 MHz時本文提出的加速器與其它加速器的性能對比。可以看出文獻(xiàn)[13,28]中加速器頻率為150 MHz,文獻(xiàn)[12]中加速器頻率為156 MHz。由于本文計算引擎中實現(xiàn)了三種卷積算子的有機(jī)融合,從而大大提高了FPGA中DSP資源的利用率,在150 MHz頻率下,性能達(dá)到了1382.4GFLOPs,是文獻(xiàn)[12]加速器性能的2.44倍,是文獻(xiàn)[13]加速器性能的6.78倍,是文獻(xiàn)[28]加速器的2.17倍。由于本文采用了輕量化模型,推理時間具有極大優(yōu)勢,僅0.29 ms即可完成一幅圖像推理,而文獻(xiàn)[13]中的加速器采用了VGG網(wǎng)絡(luò),推理時間高達(dá)151.8 ms。在能效方面,本文加速器能效是文獻(xiàn)[13]加速器的18.08倍,是文獻(xiàn)[12]加速器的4.76倍。
表7 與其它加速器性能對比(150 MHz)Table 7 Performance comparison with other accelerators (150 MHz)
表8顯示了頻率為200 MHz時本文加速器與其它加速器的性能對比。表中TY3代表Tiny YOLO V3,Y2代表YOLO V2,RS18代表ResNet-18。在相同時鐘頻率下本文加速器計算性能與文獻(xiàn)[16]所提加速器的計算性能相當(dāng),在功耗和能效比方面有一定優(yōu)勢。但是在推理時間上文獻(xiàn)[16]消耗時間是本文所提方案的41.59倍。本文加速器在性能、推理時間和能耗方面遠(yuǎn)超文獻(xiàn)[14,17]中的加速器。
表8 與其它加速器性能對比(200 MHz)Table 8 Performance comparison with other accelerators (200 MHz)
表9顯示了本文提出的加速器在Xilinx Z系列FPGA上與其它加速器的性能對比。文獻(xiàn)[29]中加速器的時鐘頻率為150 MHz,文獻(xiàn)[30-31]中加速器時鐘頻率分別為167 MHz和142 MHz。本文加速器計算性能方面略優(yōu)于文獻(xiàn)[30-31]中加速器計算性能,是文獻(xiàn)[29]中加速器計算性能的1.89倍。本文加速器功耗為1.58 W,是文獻(xiàn)[29]中加速器功耗的35.5%,是文獻(xiàn)[31]的80%。本文加速器能效比為81,是文獻(xiàn)[29]中加速器能效比的5.7倍,是文獻(xiàn)[31]中加速器能效比的1.43倍??梢?,在Xilinx Z系列FPGA上,本文加速器性能優(yōu)于同類加速器性能。
表9 在Xilinx Z系列FPGA上與其它加速器性能對比Table 9 Performance comparison with other accelerators on Xilinx Z series FPGA
本文提出了一種在軌高效目標(biāo)檢測加速器框架,并在Xilinx多款FPGA上實現(xiàn)了該加速器。所提出的計算引擎設(shè)計方法實現(xiàn)了三種卷積算子的有機(jī)融合,使得目標(biāo)檢測算法與硬件加速器更好的匹配,達(dá)到最優(yōu)性能和最高能效比。
通過在多款FPGA及多種時鐘頻率下對該加速器的性能評估我們可以得出以下結(jié)論:
1) 與同類加速器方案相比,本文所提出的加速器框架在性能、功耗、能效比及計算時間方面具有優(yōu)勢,適合部署在資源受限環(huán)境中,具有良好的星上應(yīng)用前景和價值;
2) 通過在Xilinx XC7VX690T,XC7K480T,XC7A200T,XC7Z045 FPGA上的驗證表明該框架具有良好的可擴(kuò)展性和適配性,可以根據(jù)性能、功耗、推理時間及成本要求將其部署到不同F(xiàn)PGA上;
3) 雖然本文提出的目標(biāo)檢測算法加速框架是針對MSF-SNET算法所做的加速,但該加速框架可以推廣應(yīng)用到其它算法的加速中。
綜上所述,本文所提出的加速器框架具有良好的性能,不僅具有理論價值也具有工程借鑒意義。此外,該加速框架針對目標(biāo)檢測算法設(shè)計,下一步可以將其推廣到其它算法。