?

基于異構平臺的卷積神經網絡加速系統設計*

2024-01-24 14:37秦文強吳仲城
計算機工程與科學 2024年1期
關鍵詞:加速器流水卷積

秦文強,吳仲城,張 俊,李 芳

(1.安徽大學物質科學與信息技術研究院,安徽 合肥 230601; 2.中國科學院合肥物質科學研究院強磁場科學中心,安徽 合肥 230031;3.強磁場安徽省實驗室,安徽 合肥 230031)

1 引言

隨著深度神經網絡算法的發展[1,2],智能應用不再局限于在云端服務器上運行,諸如智慧城市、智能安防等應用場景,對算法的移動嵌入式計算提出了迫切需求[3]。卷積神經網絡CNN(Convolutional Neural Network)的前向推理過程是計算密集型任務,由于網絡參數量和推理計算量大,使其難以高效地部署于資源有限的低功耗嵌入式設備。近年來,卷積神經網絡在終端和邊緣側的應用處于快速發展階段,模型的加速計算通??刹捎肅PU、GPU、專用ASIC、FPGA 4類芯片實現。直接使用CPU進行CNN的前向運算,很難滿足實時性的要求;基于GPU的運算雖然速度快,但該類硬件平臺一般體積大、成本高、功耗高。專用ASIC通過定制化可以有效提升模型運算速度,但開發周期長、難度大,一次性成本高。而FPGA因其高并行、低功耗、靈活可編程的優勢,成為嵌入式設備部署智能應用的主要選擇[4]。

在基于FPGA的嵌入式設備上實現高效的CNN模型部署,業界主要聚焦于研究如何降低網絡在硬件上的實現復雜度,并實現高并行計算,減少訪存開銷,提升系統的吞吐率,同時保證模型推理精度。文獻[5]采用量化的方法,降低資源消耗;文獻[6]利用循環展開實現并行計算,利用流水化操作提升計算效率,但由于數據加載和卷積計算是串行進行,系統吞吐率較低;文獻[7]利用循環優化增大并行度,同時提出了一種數據路由器,減少了內存訪問的開銷,但是該文獻中的方法將權重參數全部導入片上BRAM,消耗大量資源,導致該方法難以應用于資源受限的平臺,伸縮性較差。

目前,大部分神經網絡加速器[8,9]都是針對大型CNN模型(如VGG16、ResNet50)進行設計的,硬件資源消耗較多且難以獲得較高性能。近年來,一些研究人員開始研究輕量化網絡的加速,文獻[10]實現了輕量化模型SqueezeNet的FPGA加速器,利用特征圖的稀疏性,采用跳過零激活及數據共享的方法,減少了計算量,但其批標準化在FPGA上實現,導致硬件復雜度和資源開銷較大。文獻[11]針對輕量化MobileNet設計了一個并行加速單元,并在卷積層之間實現了流水化操作,但由于其數據讀取的速度不能很好地與計算并行度相匹配,導致計算效率不高。

針對以上問題,本文分別從網絡模型優化以及硬件加速優化2個方面進行研究,通過批標準化融合和動態定點數量化對模型進行預處理,降低硬件實現復雜度;利用卷積分塊策略,使系統具有較好的伸縮性;通過循環展開、流水化、數組分割的方法實現高效并行卷積計算,同時通過數據流優化的方法,提升了系統吞吐率。根據MobileNet網絡結構特點,基于FPGA分別設計了標準卷積、逐點卷積、深度卷積、殘差連接、池化和全連接IP (Intellectual Property)核,并結合CPU進行資源調度,實現了基于異構平臺的MobileNet神經網絡加速系統。

2 MobileNet神經網絡

MobileNet系列網絡模型[12-14]的主要特點是引入了深度可分離卷積的設計理念[15]。深度可分離卷積由深度Dw(Depthwise)卷積和逐點Pw(Pointwise)卷積組成,分別起到濾波和轉換通道的作用。相比標準卷積操作,Dw卷積的卷積核負責單個通道的特征提取,通道間不疊加;Pw卷積是卷積核為1*1的標準卷積,通過將特征圖在深度方向上進行加權組合,實現通道間信息的融合。該系列模型中,MobileNetV2網絡采用線性瓶頸的反向殘差結構,對特征空間先升維再降維,在移動應用上可提供高效的內存實現[13]。如圖1所示,反向殘差結構分為卷積步長分別為1和2的2種類型,圖1中BN(Batch Normalization)為批標準化操作,ReLU6和Linear為激活函數。

Figure 1 Structure of reverse residual圖1 反向殘差結構

MobileNetV2網絡整體配置如表1所示。其中,Conv 為標準卷積,bottleneck為線性瓶頸的反向殘差結構,Avgpool 為平均池化,c為輸出通道數,n為該模塊重復次數,s為步長。

3 網絡模型優化

3.1 批標準化融合

網絡中每個卷積層的結構包括:卷積計算、批標準化和激活函數。本文將批標準化作為一個線性的操作融合到卷積計算中,融合過程如下所示。

卷積計算公式如式(1)所示:

y=w*x+b

(1)

其中,w為權重,b為偏置。

批標準化計算公式如式(2)所示:

(2)

其中,mean為均值,var為方差,γ為縮放系數,β為偏移系數。

將式(1)和式(2)進行結合得到式(3):

(3)

融合后,得到的卷積層新參數權重w_new和偏置b_new分別如式(4)和式(5)所示:

(4)

(5)

批標準化融合之后,在FPGA上,只需要讓融合后得到的權重參數w_new和b_new參加卷積計算即可,省去了批標準化運算在FPGA端的實現以及批標準化參數傳輸的開銷,同時降低了FPGA資源的消耗,提升了網絡在硬件上的執行效率。

3.2 量化

神經網絡訓練完成后得到的參數是浮點型的,而在FPGA上進行浮點數運算,需要消耗大量的DSP資源和較多的時鐘周期。因此,本文采用動態定點數量化方法[16],將32位的浮點型參數量化為16位的定點數,以減少資源的消耗和數據傳輸的開銷,加快網絡的推理速度。浮點數轉化為定點數如式(6)所示:

xfixed=(int)(xfloat*2wd)

(6)

其中,wd為定點數中小數部分的位寬。

量化流程如下所示:

(7)

(2)確定第i層參數和特征圖數據的整數位寬Ii,如式(8)所示:

(8)

(3)確定第i層參數和特征圖數據的小數位寬Fi,如式(9)所示:

Fi=16-Ii

(9)

前向推理時,權重參數是固定的,但由于不同的網絡輸入,得到的每層輸出不同。為了能保證最終結果的精度,本文用1 000幅圖像進行推理,通過對每一層的輸出求平均值,使特征圖的數據范圍更加準確。

4 硬件加速系統設計與優化

XILINX公司推出Vivado高層次綜合HLS(High Level Synthesis),可以將高級抽象語言如 C、C++轉換成 VHDL硬件描述語言,方便用戶進行FPGA電路的設計、調試,提高開發效率[17,18]。本文利用Vivado HLS和C語言進行MobileNet加速器的FPGA設計與優化。

4.1 系統總體架構及功能劃分

本文利用軟硬件協同設計的方法。其中,CPU負責完成上層應用程序的執行以及系統的調度和控制,FPGA負責加速神經網絡的前向推理,充分結合CPU的邏輯控制能力和FPGA的并行計算優勢。異構系統需要在FPGA中設計軟核處理器,雖然會消耗一定的FPGA資源,但可以實現軟硬件設計的分離,底層的硬件開發人員負責對FPGA進行設計并封裝,軟件開發人員負責編寫應用驅動程序,調用設計好的硬件模塊。同時,在面對不同的上層應用需求時,無需再對底層的硬件設計進行不斷的修改和調試,實現硬件模塊的復用,較好地滿足終端設備復雜的應用需求,非常適合人工智能在嵌入式邊緣場景中的應用。

Figure 2 Overall framework of accelerated system圖2 加速系統總體框架

圖2為加速系統總體框架。在CPU端,設計應用驅動程序,完成推理前的準備工作。根據網絡結構調用加速器中的相應模塊完成前向推理,主要包括:系統初始化;為網絡參數分配內存空間,加載參數到內存;對輸入圖像進行歸一化、量化等預處理;將網絡各層的配置參數傳給加速器并調用具體功能模塊進行計算;對加速器返回的圖像分類結果進行評估。在FPGA端,根據MobileNet網絡的結構特點,設計神經網絡加速器,主要包括:標準卷積模塊、深度卷積模塊、逐點卷積模塊、殘差連接模塊、池化模塊、全連接模塊。同時,在FPGA的片上BRAM中分別設計輸入緩存、輸出緩存、權重緩存,然后將FPGA加速器與CPU集成,構建模型加速SoC(System on a Chip)異構系統。加速器通過AXI4總線與CPU的AXI_HP接口連接,緩存與DDR3內存之間通過AXI4總線進行數據交互;通過AXI_Lite總線與CPU的AXI_GP接口連接,CPU利用AXI_Lite總線對加速器內部寄存器進行配置。內存DDR與AXI接口之間的數據交互主要由DDR控制器負責控制。

4.2 卷積加速架構設計

4.2.1 卷積分塊

由于神經網絡每層具有不同的規模,為了使設計具有一定的伸縮性,本文采用卷積分塊策略[19],設計一個固定規模大小的通用卷積塊單元,對卷積進行分塊計算。如圖3所示,輸入的分塊變量表示包括通道數Tn、寬Tic和高Tir,卷積核分塊表示包括通道數Tm*Tn、寬Tkc和高Tkr,輸出的分塊變量表示包括通道數Tm、寬Toc和高Tor。其中,輸入和輸出分塊變量滿足如下關系:Tir=(Tor-1)*S+Tkr,Tic=(Toc-1)*S+Tkc,其中S為卷積核移動步長。

Figure 3 Computation in blocks of convolution圖3 卷積分塊計算

卷積塊單元每次進行固定塊大小的卷積計算,同時通過滑動窗口的方式對卷積塊單元進行分時復用,從而完成所有輸出特征圖的計算。卷積塊單元規模的確定需要綜合考慮整個網絡中所有卷積層的特征圖尺寸、卷積核尺寸、輸入和輸出通道大小以及硬件開發平臺的資源情況。在理想情況下,規模越大,并行計算時計算并行度越高,前向推理速度越快,但同時消耗的DSP和片上BRAM等硬件資源也越多??紤]到本文使用的目標硬件Zynq-7020芯片共有220個DSP,BRAM數量也較少,還需要給其他模塊預留空間和資源,最終確定標準卷積的分塊變量大小為:Tm=8,Tn=3,Tkc=Tkr=3,Toc=Tor=28。在實際應用中,需要在推理速度和資源消耗上進行折衷考慮。通過調節卷積塊單元規模,使設計具備一定的伸縮性,以適應不同資源規模的平臺。

4.2.2 并行卷積計算

卷積計算主要由輸出特征圖(高、寬)、輸出通道、輸入通道、卷積核(高、寬)6個維度嵌套的循環結構組成。本文通過調整卷積塊內的嵌套循環順序,將輸出通道和輸入通道的循環置于最內層,并且通過UNROOL指令對這2個維度進行循環展開,讓編譯器創建多組相同的硬件計算單元來實現并行計算,以此提高卷積計算效率。同時,通過PIPELINE指令進行流水化(如圖4所示),使讀數據(RD)、計算(CMP)和寫數據(WR)流水化進行,增大吞吐率[20]。

Figure 4 Schematic diagram of pipelining圖4 流水化示意圖

Figure 5 Core hardware structure of parallel computing圖5 并行計算的核心硬件結構

4.2.3 緩存分割

卷積塊內的計算并行度分別為Tn、Tm*Tn和Tm,為了滿足并行計算,需要在一個周期內完成數組中多個數據的同時讀寫。然而,數組在BRAM中是連續存放的,最多只有2個數據端口,為實現數據同時讀寫,本文采用了緩存分割的設計。如圖6所示,ARRAY PARTIRION指令將輸入緩存、權重緩存、輸出緩存分別分割為具有Tn個讀端口、Tm*Tn個讀端口、Tm個寫端口的BRAM區塊,由此增加其讀寫端口的數量,從而實現了并行讀寫。圖6中,Tm表示分割后BRAM區塊的個數,[Tor][Toc]表示分割后BRAM區塊的大小為Tor*Toc,[Tor]表示數組的行數,[Toc]表示數組的列數,其他變量的含義類似。

Figure 6 Schematic diagram of cache segmentation圖6 緩存分割示意圖

4.3 數據流優化

4.3.1 數據傳輸優化

由于FPGA 訪問內存DDR會有較大的延時,為了減少訪存開銷,本文在設計上增加了讀取數據的接口數量和接口位寬。如圖7所示,將數據地址空間平均劃分為4塊,將每一塊的首地址作為每個通道的入口地址,利用4個AXI接口并行讀取數據,增加數據傳輸帶寬,并且設置每個接口的位寬最大為64 bit。由于量化后的每個數據位寬為16 bit,所以每個通道可以同時傳送4個數據,數據到達緩存后按16 bit分解為單個數據,并同時送入PE陣列進行運算。

Figure 7 Schematic diagram of data transmission optimization圖7 數據傳輸優化示意圖

同時,將數據在內存中以行優先的方式排布,使數據的讀取順序與數據在內存中的排布方式一致。在并行傳輸數據的同時,通過較長的突發傳輸長度抵消讀地址通道握手的時間和一個數據讀出所需等待的時間,以減少數據傳輸延遲。

Figure 8 Ping-pong caching mechanisms圖8 “乒乓”緩存機制

4.3.2 任務級流水化

卷積分塊計算可分為3個階段:加載數據、卷積計算和寫回結果。為了掩蓋數據傳輸的時間,本文采用“乒乓”緩存機制實現任務級流水化。如圖8所示,在FPGA的片上BRAM中設置2塊同樣大小的輸入緩存、權重緩存和輸出緩存,當緩存1加載數據時,PE陣列處理緩存2中的數據,并將結果寫回;當緩存2加載數據時,PE陣列處理緩存1中的數據,并將結果寫回。通過這種方式,使數據傳輸時間與計算時間重疊,減少了延遲并改善吞吐量,進一步提高了加速系統的性能。圖8中的×代表沒有數據流,該通路不工作。

Vivado HLS的綜合結果分析界面如圖9所示??梢钥吹?經過緩存分割和數據流優化后,模塊的數據加載、卷積計算和寫回結果3個過程同時執行。

Figure 9 Synthesis results analysis of Vivado HLS圖9 Vivado HLS綜合結果分析

4.4 其它模塊設計

4.4.1 深度卷積模塊

深度卷積計算方式與標準卷積不同,一個卷積核只負責卷積特征圖的一個通道。因此,深度卷積只需要5個維度嵌套的循環,其它實現方法與標準卷積基本一致。首先,進行卷積分塊,根據深度卷積層的特征,確定分塊大小為:Tm=8,Tkc=Tkr=3,Toc=Tor=7,然后,在輸出通道上進行循環展開、流水化、數組分割操作,并利用數據傳輸優化和“乒乓”緩存機制進行數據流優化,以提高計算的并行度和吞吐率。

4.4.2 逐點卷積模塊

逐點卷積與標準卷積計算方式一致。卷積核尺寸為1*1。先進行卷積分塊,確定分塊大小為:Tm=Tn=8,Toc=Tor=14,之后將塊內的計算變為二維矩陣的乘法運算,即A[14*14][8]*B[8][8]=C[14*14][8]。然后,在輸入、輸出通道2個維度上進行循環展開、流水化、數組分割操作,利用數據傳輸優化和“乒乓”緩存機制進行數據流優化。

4.4.3 殘差連接模塊

該模塊用來完成反向殘差結構中的支路殘差求和,輸入2幅同樣大小的特征圖,將2幅圖對應位置的數據相加取和,得到輸出數據。通過在通道維度上使用循環展開和流水化的方法來加快運算過程。

4.4.4 池化模塊

池化部分采用一種基于“部分和緩存”的多路并行計算方法,池化核大小為7*7,內部邏輯如圖10所示,計算原理如下所示:

(1)模塊先從DDR讀取數據到In_buf中,用通道指針來控制數據讀取的位置,在設計中使用5個部分和緩存Psum存儲中間結果。

(2)將每個通道的數據兩兩相加,放入Psum中,并通過PIPELINE指令使部分和間的計算并行流水進行,得到最終的平均池化值,送入Out_buf。

(3)同時,在輸入通道維度進行循環展開和流水化,設置通道并行度T=32,直到完成所有通道的池化計算。

該池化操作通過多路通道并行的部分和累加計算,加快了池化計算的速度。

Figure 10 Pooling operation process圖10 池化運算過程

4.4.5 全連接模塊

全連接用于最終的分類輸出。本文使用的ImageNet數據集共有1 000個類別。全連接計算的實質為:向量A[1280]與矩陣B[1280][1000]相乘得到向量C[1000]。本文對矩陣的行、列2個維度進行循環展開和流水化,設置并行度為:Tn=32和Tm=10,并使用“乒乓”緩存機制來加快計算過程。

5 實驗及結果分析

實驗采用XILINX公司推出的 PYNQ-Z2開發板作為測試平臺,該平臺采用ZYNQ-7020芯片,芯片內部資源如表2所示,FPGA端的時鐘頻率為125 MHz,ARM端的時鐘頻率為667 MHz。

Table 2 Chip resources表2 芯片資源

本文首先在PC端用ImageNet數據集訓練MobileNetV2網絡,得到網絡每層的權重參數和批標準化參數;然后經過批標準化融合和量化將最終的權重參數導入開發板中。實驗對比了分別利用CPU和CPU+FPGA進行CNN推理的性能表現。CPU方案是指在ARM端安裝TensorFlow深度學習框架,搭建MobileNetV2網絡模型,只利用CPU進行網絡前向推理;CPU+FPGA方案是指不使用深度學習框架,利用本文設計的加速器進行前向推理。

加速系統的實驗流程設計如下:

(1)首先,基于FPGA使用Vivado HLS完成加速器各模塊IP核的設計;

(2)然后,利用Vivado將加速器IP核結合CPU搭建加速系統,驗證設計并生成比特流,加載到開發板;

(3)最后,在CPU端設計應用驅動程序,調用加速器完成神經網絡的前向推理。

實驗結果如表3所示??梢钥吹?基于MobileNet神經網絡的加速系統對單幀圖像的推理時間為0.18 s,相對于僅使用ARM單核處理器實現了128倍的加速效果。本文采用了動態定點數量化的方法,將32位浮點型參數量化為16位的定點數。為了比較量化前后模型的準確率,采用1 000幅圖像進行測試。結果表明,量化后的準確率僅下降了0.3%,說明本文采用的量化方法對模型的精度影響較小;加速系統運行時的平均功耗為2.62 W,滿足低功耗的設計要求。

Table 3 Experimental results表3 實驗結果

各模塊資源占用情況如表4所示,可以看到加速系統整體資源消耗較少。由于本文采用了卷積并行計算和任務級流水化等方法使卷積部分資源消耗占比較大,其中卷積部分消耗的DSP資源占總耗資源的97%,消耗的BRAM資源占總耗資源的65%。

Table 4 Resource usage of each module表4 各模塊資源占用情況

表5對比了本文工作與相關工作的綜合性能。其中,文獻[8]提出了一種數據重排方法,提高了外部存儲器帶寬的利用率,但由于其加速的網絡為參數量較大的VGG16,在占用較大資源的情況下,單幀推理時間較長且功耗較高;文獻[11]實現了卷積層之間的流水化,增大了系統的吞吐率,整體設計消耗的資源較少,系統功耗也較低,但系統的推理延遲較大;文獻[21]在FPGA中直接用32位的浮點數進行運算,盡管通過通道間并行計算提升了卷積計算效率,同時采用DMA加快了數據在內存和FPGA片上緩存之間的交互,減小了訪存延遲,但最終的推理延遲較大。在量化策略上,本文和文獻[8]、文獻[11]的設計中都將網絡參數量化為16位定點數??梢钥闯?本文單幀推理速度是文獻[11]的16.08倍,是文獻[21]的99倍。

6 結束語

本文提出了一種新的基于異構平臺的卷積神經網絡加速架構,設計并實現了基于MobileNet的輕量化卷積神經網絡加速系統,利用動態定點數量化和批標準化融合的方法,減少了硬件復雜度和資源開銷;利用卷積分塊、并行卷積計算、數據流優化的方法,提高了卷積運算效率,增大了系統吞吐率,使系統具有較好的伸縮性。在PYNQ-Z2平臺的實驗結果表明,該系統具有高效的計算內核,圖像識別速度快,加速效果明顯且功耗低,可以將Mobilenet網絡高效地應用于資源有限的嵌入式設備。下一步利用卷積神經網絡加速系統研制面向行業應用的視覺檢測智能終端,將系統部署于實際應用場景中。

Table 5 Comparison of system design synthesis results表5 系統設計綜合對比

猜你喜歡
加速器流水卷積
莫比斯加速器眾創辦公空間
知識快餐店 科學加速器
基于3D-Winograd的快速卷積算法設計及FPGA實現
全民小康路上的“加速器”
流水
從濾波器理解卷積
基于傅里葉域卷積表示的目標跟蹤算法
流水有心
等待“加速器”
前身寄予流水,幾世修到蓮花?
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合