許金偉,王慶林,李婭琳,姜晶菲,高 蕾,李榮春*,李東升
(1. 國防科技大學 計算機學院, 湖南 長沙 410073; 2. 國防科技大學 并行與分布計算全國重點實驗室, 湖南 長沙 410073)
卷積神經(jīng)網(wǎng)絡(luò)已經(jīng)成為人工智能領(lǐng)域應用最廣泛的模型之一,不僅在圖像分類[1]、目標識別[2]、視頻分析[3]等計算機視覺領(lǐng)域的應用中取得了顯著效果,還在自然語言處理[4]、語音識別[5]等其他領(lǐng)域同樣取得了突破性進展。隨著精確感知和高精度識別任務需求的不斷增長,大量智能應用在深度學習算法中均使用層數(shù)更深的結(jié)構(gòu),這需要高算力專用硬件的支持,因此卷積神經(jīng)網(wǎng)絡(luò)的加速技術(shù)一直是研究的熱點[6-7]。典型的卷積神經(jīng)網(wǎng)絡(luò)主要由卷積層、全連接層、非線性激活函數(shù)層、池化層等構(gòu)成,其中卷積層和全連接層集中了卷積神經(jīng)網(wǎng)絡(luò)的主要計算負載。因此研究卷積神經(jīng)網(wǎng)絡(luò)的加速技術(shù)變成了卷積層加速優(yōu)化的難點和關(guān)鍵點。
目前常用的卷積優(yōu)化方法主要有直接卷積[8]、通用矩陣乘法(general matrix multiplication, GEMM)[9-10]和快速算法[11-12]三種實現(xiàn)方式。通用矩陣乘法實現(xiàn)卷積是將卷積操作轉(zhuǎn)換成矩陣操作,再優(yōu)化矩陣乘法,從而達到優(yōu)化卷積計算的目的。整個過程中需要增加img2col[10]操作,同時由于輸入數(shù)據(jù)轉(zhuǎn)換成矩陣時會膨脹,從而存儲壓力也會增加。快速算法是將卷積操作通過winograd[11]和快速傅里葉變換(fast Fourier transform, FFT)[12]等變換方式轉(zhuǎn)換成其他快速實現(xiàn)方法的操作,其降低了計算復雜度,并在此基礎(chǔ)上開發(fā)了并行性以加速卷積的計算。但快速算法也存在計算精度損失和卷積核規(guī)模限制等問題。
直接卷積是通過循環(huán)展開的方式開發(fā)卷積計算的并行性,優(yōu)化過程中不會增加存儲壓力,也不會降低計算精度。最近,已經(jīng)提出了一些直接卷積方法[13-15]來直接實現(xiàn)卷積層。Georganas等[14]通過動態(tài)編譯方法在x86架構(gòu)上引入了直接卷積實現(xiàn),并達到了接近理論極限的性能。Zhang等[13]提出了一種直接卷積實現(xiàn),在各種CPU架構(gòu)上顯示出比基于GEMM的卷積算法更好的性能。Wang等[15]在ARMv8多核CPU上提出了一種新的并行逐層直接卷積實現(xiàn),該實現(xiàn)針對具有批次、通道、高度、寬度(batch, channel, height, width, BCHW)數(shù)據(jù)布局的逐層卷積。與基于GEMM的卷積相比,直接卷積不會產(chǎn)生額外的內(nèi)存空間開銷,在實現(xiàn)中,矢量化和線程級并行化分別用于矢量單元和多核并行性能的有效地利用,寄存器和緩存塊用于提高片上多級存儲器中的數(shù)據(jù)重用。這些實現(xiàn)在Phytium FT-1500A和FT-2000處理器上進行了測試,在性能和可擴展性方面,優(yōu)于Caffe conv和Mxnet conv實現(xiàn)。
FT-M7032是國防科技大學面向E級計算自主研發(fā)的一款通用多核數(shù)字信號處理(digital signal processing, DSP)芯片[16],由32個DSP核和16個ARMv8 CPU核構(gòu)成。該芯片的DSP核支持FP32和FP16操作,工作主頻為1.6 GHz時,FP16峰值浮點性能可達19.7 TFLOPS,而半精度浮點足以支持人工智能領(lǐng)域中大多數(shù)應用的推理計算精度,由此可見,FT-M7032芯片在人工智能領(lǐng)域存在著巨大的應用潛力。在FT-M7032中,采用基于超長指令字的順序執(zhí)行架構(gòu),并采用軟件控制的存儲作為片上緩存,提供豐富的直接存儲訪問(direct memory access, DMA)模式,DMA模式實現(xiàn)各級存儲空間的快速訪問?,F(xiàn)有的面向GPU、CPU等通用處理平臺和張量處理單元(tensor processing unit, TPU)等專用處理平臺的卷積優(yōu)化算法在FT-M7032上無法直接運行或者執(zhí)行效率很低。因此,面向多核向量處理器體系結(jié)構(gòu)進行針對性算法優(yōu)化有助于發(fā)揮FT-M7032芯片的計算性能。因此,本文基于FT-M7032芯片,聚焦直接卷積實現(xiàn)方式,通過不同維度的并行度開發(fā),實現(xiàn)卷積計算在向量處理器上的高效執(zhí)行。
面向FT-M7032芯片處理卷積神經(jīng)網(wǎng)絡(luò)的應用需求,本文結(jié)合FT-M7032芯片的體系結(jié)構(gòu)設(shè)計,針對目前卷積神經(jīng)網(wǎng)絡(luò)中的卷積計算,仔細分析了不同卷積核大小的卷積計算的執(zhí)行特點和并行粒度,從而針對1×1卷積提出了按行計算的優(yōu)化方法,針對卷積核大于1的卷積提出了逐元素計算的向量化優(yōu)化方法,同時針對深層卷積神經(jīng)網(wǎng)絡(luò)中,不同層輸入數(shù)據(jù)和權(quán)值矩陣規(guī)模的變化,提出了不同的多核并行處理方案,從而提升輸入數(shù)據(jù)和權(quán)值矩陣的復用度,降低帶寬壓力。之后,又采用DMA 乒乓緩沖機制,實現(xiàn)數(shù)據(jù)搬移和計算的遮掩。為了驗證本文所提方案的有效性,將所提方法在ResNet50卷積神經(jīng)網(wǎng)絡(luò)[17]上進行驗證。
卷積涉及3個張量:輸入特征圖(I)、濾波器(F)和輸出特征圖(O)。在C代碼樣式中,這些具有BCHW布局的張量可以表示為I[B][Ci][Hi][Wi],F[Co][Ci][Hf][Wf]和O[B][Co][Ho][Wo]。卷積的定義如下:
(1)
式中,0≤b1.2 FT-M7032異構(gòu)處理器
FT-M7032異構(gòu)處理器由1個16核ARMv8 CPU和4個通用數(shù)字信號處理器(general purpose digital signal processor, GPDSP)集群組成,如圖1所示。多核CPU是Phytium FT-2000plus處理器的簡化版本,主要負責線程管理和通信。多核CPU的單精度浮點峰值性能為281.6 GFLOPS。每個GPDSP集群包括8個DSP核,它們共享6 MB片上全局共享內(nèi)存(global shared memory, GSM)。每個集群中的所有8個DSP核和GSM都可以通過片上縱橫網(wǎng)絡(luò)進行通信,通信帶寬達到了300 Gbit/s。軟件開發(fā)人員需要維護它們之間的數(shù)據(jù)一致性。多核CPU和4個GPDSP集群共享相同的主內(nèi)存空間,多核CPU可以訪問整個主空間,但每個GPDSP集群只能使用42.6 Gbit/s的硬件帶寬訪問自己的相應部分。由于CPU內(nèi)核之間的緩存一致性如FT-2000plus所提供的那樣,CPU的緩存數(shù)據(jù)必須在每個GPDSP集群上運行的函數(shù)啟動之前寫入主內(nèi)存,并在其完成后退出。
圖1 FT-M7032的整體架構(gòu)Fig.1 Architecture of FT-M7032
每個GPDSP簇中的每個DSP核基于超長指令字架構(gòu)(very long instruction word, VLIW),包括指令調(diào)度單元(instruction fetch unit, IFU)、標量處理單元(scalar processing units, SPU)、向量處理單元(vector processing units, VPU)和DMA引擎,如圖2所示。IFU被設(shè)計為每個周期最多啟動11條指令,其中包含5條標量指令和6條矢量指令。SPU用于指令流控制和標量計算,主要由標量處理元件(scalar processing element, SPE)和64 KB標量內(nèi)存(scalar memory, SM)組成,它們匹配5條標量指令。VPU為每個DSP核提供主要計算性能,包括768 KB陣列存儲器(array memory, AM)和以單指令多數(shù)據(jù)流(single instruction multiple data,SIMD)方式工作的16個矢量處理元件(vector processing element, VPE)。每個VPE有64個64位寄存器和3個浮點乘累加(float multiply accumulate, FMAC)單元,1個FMAC單元每周期可以處理2個FP32或者4個FP16的乘加計算。其中,FP32數(shù)據(jù)類型的SIMD寬度為32,FP16數(shù)據(jù)類型的SIMD寬度為16,當工作在1.8 GHz時,每個DSP核可以提供的單精度浮點峰值性能為345.6 GFLOPS,半精度浮點峰值性能為691.2 GFLOPS。AM可以通過兩個加載存儲向量單元,在每個周期向寄存器傳送多達512 B數(shù)據(jù)。在SPU和VPU之間,可以通過廣播指令和共享寄存器傳輸數(shù)據(jù)。DMA引擎用于在不同級別的存儲器(即主存儲器、GSM和SM/AM)間傳輸數(shù)據(jù)。AM 每個周期可以向向量寄存器提供 512 B數(shù)據(jù),即 AM與向量寄存器之間的帶寬為921.6 GB/s。
圖2 FT-M7032中的DSP單核微架構(gòu)Fig.2 Macro-architecture of each DSP core in FT-M7032
在進行卷積計算時,為了降低帶寬壓力,提升計算效率,需要盡可能地將可復用的權(quán)值或者特征圖放置在GSM或者AM中。為此,將根據(jù)深度卷積神經(jīng)網(wǎng)絡(luò)中特征圖和權(quán)值矩陣數(shù)據(jù)規(guī)模隨著層數(shù)而產(chǎn)生的變化,來規(guī)劃多核間的并行方式。一般深度卷積神經(jīng)網(wǎng)絡(luò)中,在模型的前層,特征圖規(guī)模大、通道數(shù)小,因而輸入輸出特征圖所占用的存儲空間大,權(quán)值占用的空間相應較少;后層則是特征圖規(guī)模小、通道數(shù)多,因而輸入輸出特征圖所占存儲空間的比例會減少,權(quán)值矩陣隨著通道數(shù)的增加而急劇變大,所占存儲空間的比例會相應增加。因此,本文根據(jù)卷積層的存儲分布特點在多核間分別采用層內(nèi)多核并行和任務多核并行兩種不同的優(yōu)化方法。另外,由于FT-M7032芯片中不同簇之間并不共享GSM,本文所提的多核并行方案僅是在單簇內(nèi)部,不同簇之間均采用任務級并行方案。
為了后續(xù)行文方便,先介紹在面向FT-M7032芯片時所采用的數(shù)據(jù)布局。卷積的輸入特征圖的數(shù)據(jù)布局格式為NCHW,其中N為batchsize,C為輸入通道數(shù),H和W為特征圖的高和寬,由于在FT-M7032的向量處理器中,單FMAC一次處理的位寬是64位,所以向量寄存器中單個寄存器的位寬也是64位,本文在數(shù)據(jù)布局時同時處理來自4幅圖的數(shù)據(jù),將4幅圖對應的每個元素拼接成一個64位數(shù)據(jù)。所以輸入特征圖的數(shù)據(jù)布局方式為N4CHW4,其中4(非下標)表示最內(nèi)部是來自4幅圖的4個元素,N4表示N除以4。
卷積層內(nèi)多核并行開發(fā)的難點在于如何將任務有效地分配到不同的處理核上,且在并行開發(fā)過程中,降低對帶寬的需求,增加多核之間對于輸入數(shù)據(jù)和權(quán)值的復用度??紤]到這一點,在設(shè)計時提出了特征圖級并行和窗口級并行兩種不同的實現(xiàn)方案。
卷積層內(nèi)多核并行優(yōu)化是指將卷積按照特征圖區(qū)域或者輸出通道進行劃分,其中按照特征圖區(qū)域劃分是針對卷積核大于1的卷積層,將輸入特征圖劃分成M等份,分給M個核同時處理,即多核間采用窗口級并行;輸出通道劃分是針對卷積核為1的卷積層,按照輸出通道劃分成M等份,分給不同核處理,即多核間采用特征圖級并行。其中,M是單簇中DSP的核數(shù),在FT-M7032中M最大為8。
2.2.1 特征圖級多核并行
在卷積核為1×1(Conv1×1)時,輸入特征圖可以看作列為Hi×Wi×4、行為Ci的矩陣,記作輸入數(shù)據(jù):[Ci][Hi×Wi×4],其中Ci表示輸入通道,Hi和Wi表示輸入特征圖的高和寬。權(quán)值數(shù)據(jù)可看作列為Ci、行為Co的矩陣,記作權(quán)值數(shù)據(jù):[Co][Ci],其中Co表示輸出通道。輸出特征圖可看作列為Ho×Wo×4、行為Co的矩陣,記作輸出數(shù)據(jù):[Co][Ho×Wo×4],其中Ho和Wo表示輸出特征圖的高和寬。因此可以將1×1的卷積操作看成一個矩陣乘操作。
Conv1×1多核并行優(yōu)化方案是在權(quán)值數(shù)據(jù)的輸出通道Co上作切分,本文將Co切分為M等份,令m=「Co/M?,將數(shù)據(jù)依次按核分配后傳輸?shù)綄说腟M上,而各核中所有輸入數(shù)據(jù)都需要參與計算,故本文將通過DMA通道傳輸完整的輸入數(shù)據(jù)到每個核的AM上,各核計算后將得到m個對應輸出通道的輸出結(jié)果,圖3為Core0的具體實現(xiàn),實際運行中各核是同步進行的。
圖3 特征圖級多核并行優(yōu)化Fig.3 Feature map level multi-core parallel optimization
核內(nèi)外的數(shù)據(jù)傳輸均需通過DMA通道,因為GSM到核內(nèi)的帶寬要遠高于雙倍數(shù)據(jù)速率(double data rate, DDR)同步動態(tài)隨機存儲器到核內(nèi)的帶寬,因此,可以將大部分輸入輸出數(shù)據(jù)暫存在GSM空間中,GSM空間不足時,再存入DDR中,此舉能最大限度減少輸入輸出的帶寬壓力。計算中,各核所需要的權(quán)值數(shù)據(jù)將以點對點的方式傳輸?shù)綄腟M中;輸入數(shù)據(jù)在GSM/DDR中連續(xù)存儲,每次將其中的一個計算分塊從GSM/DDR中以廣播的方式傳輸?shù)胶藘?nèi)的AM上,各核用標量加載指令讀取SM上的權(quán)值數(shù)據(jù)分塊,再通過標量的廣播指令傳輸?shù)较蛄看鎯ζ髦?這種方法能夠顯著降低對DDR的數(shù)據(jù)帶寬需求),同時用向量加載指令讀取AM上的輸入數(shù)據(jù)分塊,再對兩者進行計算,所有核都計算結(jié)束后,將輸出數(shù)據(jù)用向量存儲指令存回AM,再按分塊邏輯存儲至GSM/DDR中。依次加載并計算下一個分塊,直到完成所有計算和數(shù)據(jù)存儲。
2.2.2 窗口級多核并行
在卷積核大于1×1時,采用窗口級多核并行優(yōu)化設(shè)計,將輸入特征圖按區(qū)域劃分為M份,分配到各個核上,每個核上都需要訪問完整的權(quán)值數(shù)據(jù),所以需要將權(quán)值數(shù)據(jù)存放在AM中實現(xiàn)向量化,將各個核分配好的輸入數(shù)據(jù)存放在SM中,按照元素計算的方式進行向量化卷積。
同樣地,核內(nèi)外的數(shù)據(jù)傳輸需要通過DMA通道。首先將輸入數(shù)據(jù)按多核機制分配,將其按基礎(chǔ)分塊大小從GSM/DDR中以點對點的方式傳輸?shù)綄说腟M上,然后從DDR中將權(quán)值數(shù)據(jù)按分塊大小廣播到各核的AM中,分別用標量指令和向量指令將數(shù)據(jù)加載到標量和向量寄存器中,按逐元素計算的方法完成卷積,等到所有核的卷積計算完成,再將數(shù)據(jù)依次存儲到AM中和DDR/GSM中,再依次加載并計算下一個分塊,直到結(jié)束。
任務級多核并行優(yōu)化設(shè)計中,核與核之間是獨立運行的,每個核將獨立處理4幅圖,因此該方案下,單簇能同時處理4×M幅圖的計算,因此需要等待前面的卷積層處理4×M幅圖后才會啟動該層的處理。
任務級多核并行優(yōu)化設(shè)計中,因為單次處理的數(shù)據(jù)量過大,無法暫存在GSM中,所有的輸入輸出均需要傳輸回DDR存儲。同樣地,本文將不同的圖片數(shù)據(jù)從DDR以點對點的方式搬移至多核,而各核之間的權(quán)值數(shù)據(jù)是共享的,所以將權(quán)值數(shù)據(jù)從DDR以廣播的方式傳輸至各核,同樣是按照分塊大小依次傳輸與計算。
為減少數(shù)據(jù)搬移開銷提高卷積計算效率,本文提出基于兩級DMA雙緩沖的數(shù)據(jù)搬移優(yōu)化策略,分別在SM和AM中為輸入數(shù)據(jù)或權(quán)值數(shù)據(jù)設(shè)計兩個緩沖區(qū),Conv1×1計算中,在SM中為權(quán)值數(shù)據(jù)建立兩個緩沖區(qū),在AM中為輸入數(shù)據(jù)建立兩個緩沖區(qū);卷積核大于1×1的卷積計算中,在SM中為輸入數(shù)據(jù)建立兩個緩沖區(qū),在AM中為權(quán)值數(shù)據(jù)建立兩個緩沖區(qū)。該機制將核心計算和數(shù)據(jù)搬移同步進行,兩者的執(zhí)行時間重疊,能覆蓋耗時較短的那部分操作時長,提高計算性能,具體兩級DMA雙緩沖機制如圖4所示。
圖4 兩級DMA雙緩沖機制Fig.4 Two level DMA double buffer mechanism
將核心計算需要的第一組數(shù)據(jù)A1先搬移至SM/AM的緩沖區(qū)buffer1中,同時開啟A1核心計算與下一組數(shù)據(jù)塊A2到buffer2的搬移,等到A1的核心計算和A2的數(shù)據(jù)搬移都結(jié)束后,再開始進入下一輪A2的核心計算和A3的數(shù)據(jù)搬移,如此計算和數(shù)據(jù)通信同時進行,直至DDR/GSM的數(shù)據(jù)遍歷結(jié)束。
FT-M7032芯片中DSP核上的存儲空間是有限的,SM的存儲空間是64 KB,AM的存儲空間是768 KB。面對不同規(guī)格的卷積,需要對輸入數(shù)據(jù)和權(quán)值數(shù)據(jù)進行分塊處理。
由于DSP內(nèi)部的VPU包含16個VPE,每個VPE包含3個FMAC,本文開發(fā)元素級并行就是將卷積計算中每個特征圖元素的48個輸出通道放到48個FMAC上并行執(zhí)行,從而有效利用DSP內(nèi)部的計算資源,提升卷積計算在每個DSP的執(zhí)行性能。
令輸入數(shù)據(jù)的子塊為Ib,權(quán)值數(shù)據(jù)子塊為Wb,輸出數(shù)據(jù)的子塊為Ob。
3.1.1 Conv1×1分塊設(shè)計
Conv1×1計算中,權(quán)值將存放在SM中,輸入和輸出存放在AM中,由于程序設(shè)計了DMA和計算的乒乓緩沖機制,故SM和AM空間將劃兩個緩沖區(qū)分別存儲子塊。令輸入的Hi×Wi×4維度的分塊大小為Nb,結(jié)合處理器結(jié)構(gòu)特點,分塊遵循以下原則:分塊大小不得超出片上存儲空間,Nb為192的倍數(shù),盡可能在單維度切分且盡可能減少數(shù)據(jù)的切割次數(shù)。
令子塊Wb為m×K,Ib為K×Nb,分塊思路如下:①結(jié)合處理器結(jié)構(gòu)特點,考慮到處理器指令的延遲槽循環(huán)和流水線排布,Wb的m取6~12較為合適;②確立好m,判斷當K=Ci時權(quán)值的子塊是否滿足SM的存儲空間要求,若否,則將Ci按二分法繼續(xù)切分直至滿足SM存儲空間要求;③輸入數(shù)據(jù)分塊中首先將Nb設(shè)為192,結(jié)合Wb的取值K判斷K×192是否符合AM存儲空間要求,若是,則繼續(xù)以192為倍數(shù)擴大Nb,直到取到范圍內(nèi)的最大值,若否,則在K上按二分法繼續(xù)切割,直到滿足存儲要求為止。
3.1.2 Conv1×1核內(nèi)計算
結(jié)合上述分塊設(shè)計可以得到子塊Ib和Wb,按行實現(xiàn)的Conv1×1如圖5所示,具體算法見算法1。
圖5 按行實現(xiàn)的Conv1×1示意Fig.5 Schematic diagram of row-wise Conv1×1
算法1 按行實現(xiàn)的Conv1×1算法
3.2.1 Conv3×3分塊設(shè)計
Conv3×3計算中,輸入數(shù)據(jù)將存放在SM中,權(quán)值和輸出數(shù)據(jù)存放在AM中,由于輸入和權(quán)值的數(shù)據(jù)量較大,無法全部存入核內(nèi),也需對各數(shù)據(jù)進行分塊。
Wb分塊設(shè)計:考慮到處理器核內(nèi)有16個VPE,每個VPE有3個FMAC,則處理器單周期可處理48個64位數(shù)據(jù)。Conv3×3的分塊設(shè)計思路如下:①向量化并行設(shè)計需要數(shù)據(jù)間具備計算的非相關(guān)性,Ci通道需要做循環(huán)累加,不具備該條件,而特征圖尺寸變化跨度大也不適合向量化,故只能在Co維做向量化設(shè)計;②向量的數(shù)據(jù)加載是連續(xù)的,故應將Co維的數(shù)據(jù)在格式上連續(xù)存儲,按大小48劃分,并將其提取到格式里面;③結(jié)合ResNet50網(wǎng)絡(luò)結(jié)構(gòu)特征和AM存儲空間的大小,將Ci維按大小64劃分。故權(quán)值子塊為Wb:[3][3][64][48][4](舍入部分用零填充)。
Ib分塊設(shè)計:面對不同規(guī)格的輸入數(shù)據(jù),需要結(jié)合SM空間大小、DMA雙緩沖機制和Conv3×3卷積的計算原理綜合考慮。已知Ib的Ci維分塊為64,而逐元素Conv3×3計算每次需要加載3行輸入數(shù)據(jù),則padding=1的情況下,可計算出特征圖Wi維度分塊的最大值Wib,即輸入數(shù)據(jù)子塊為Ib:[64][3][Wib][4] 。
3.2.2 Conv3×3核內(nèi)計算
逐元素Conv3×3計算中,將Ib和Wb加載到核內(nèi)空間后,讀取同一Ci通道的Ib和Wb數(shù)據(jù),將Ib感受野區(qū)域的3×3數(shù)據(jù)與Wb的卷積核數(shù)據(jù)對應相乘,遍歷Ci維將累加計算結(jié)果,再將3×3的9個像素點數(shù)據(jù)相加,即得到單元素卷積結(jié)果,如圖6所示,具體步驟見算法2。
圖6 逐元素Conv3×3示意Fig.6 Schematic diagram of element-wise Conv3×3
算法2 逐元素Conv3×3算法
單元素計算完成后,需要按序依次對輸入子塊Ib中的其他元素做卷積,根據(jù)上述設(shè)計已知子塊為Wb3×3×64×48×4和Ib64×3×Wib×4,得到的輸出子塊為Ob48×Wib×4,算法實現(xiàn)見算法3。
算法3 Conv3×3子塊卷積算法
本節(jié)將全面評估與分析本文所提出的面向FT-M7032異構(gòu)處理器的卷積并行優(yōu)化方法的性能。
本節(jié)主要涉及所提卷積并行優(yōu)化方案與CPU上卷積實現(xiàn)之間的性能對比,CPU卷積實現(xiàn)是指基于PyTorch[18]框架實現(xiàn)的在Intel(R) Xeon(R) CPU E5-2640 v3上的卷積計算。
在本節(jié)中涉及四個指標來評判卷積的性能,第一個是完成卷積計算的時間T,第二個是卷積計算所達到的計算性能Pconv,第三個是卷積計算在單個GPDSP簇上的計算效率Econv(計算效率是指實際執(zhí)行時所達到的計算性能與峰值計算性能之間的比率),第四個是卷積計算的擴展效率Sconv(擴展效率是指n核并行時所達到的計算性能與單核計算性能的n倍之間的比率)。四個指標之間的相互關(guān)系可表示為:
(2)
(3)
(4)
其中,Peakgpdsp表示單個GPDSP簇的FP16峰值計算性能,Pn表示n個DSP核時所能達到的計算性能。
為了評估本文所提出的核內(nèi)計算和分塊設(shè)計的有效性,本節(jié)選取典型的卷積層來評估其在單核上的計算性能和計算效率。
在實驗時,首先評估了Conv1×1的單核性能,從ResNet50的stage2、stage3、stage4和stage5中分別選取了其第二個block的第一層卷積,其特征圖大小分別為56、28、14、7,輸入通道分別為256、512、1 024、2 048,輸出通道分別為64、128、256、512。圖7展示了其各層的執(zhí)行時間和計算效率。其中Tconv1和Econv1分別代表Conv1×1的執(zhí)行時間和計算效率,Tconv3和Econv3分別代表Conv3×3的執(zhí)行時間和計算效率,后續(xù)圖表中的Sconv1和Sconv3分別表示Conv1×1和Conv3×3的擴展效率。由圖7可以看出,由于這四層的總計算量是一樣的,在本文提出的分塊設(shè)計和核內(nèi)計算優(yōu)化的情況下,前三層的執(zhí)行時間基本一致,計算效率也保持在60%以上,可見本文所提的方法是有效的。而第四層的計算效率之所以偏低,是因為其特征圖規(guī)模變得過小,在進行分塊時需要添加冗余以保證程序的正確性。
圖7 不同規(guī)模卷積時DSP單核性能和計算效率Fig.7 Performance and calculation efficiency of DSP single core for different scale convolution
其次評估了Conv3×3的單核性能和執(zhí)行效率,從ResNet50的stage2、stage3、stage4和stage5中分別選取了其第二個block的第二層卷積,其特征圖大小分別是56、28、14、7,輸入通道為64、128、256、512。圖7展示了其各層的執(zhí)行時間和計算效率,可以看出,后三層的執(zhí)行時間相當,計算效率分別為50.01%、51.37%和45.07%,這是因為這四層的計算量是相同的,同時也說明本文的方法對于不同規(guī)模的卷積都是適應的。第一層的計算效率之所以會略微偏低,是因為輸出通道相比于分塊方法中所提出的基本塊輸出通道分割基數(shù)48偏小,需要填充較多冗余。
在深度學習應用中,由于特征圖像和權(quán)值數(shù)據(jù)過大,無法在片上進行存儲,當計算峰值和帶寬不匹配時,即當帶寬不足時,會影響其計算性能和計算效率。為此,特別設(shè)計不同的數(shù)據(jù)訪存方式和多核方案,為了驗證帶寬受限情況下本文方法的有效性,本節(jié)選取了不同核數(shù)進行了計算效率評估和擴展效率評估,結(jié)果如圖8所示。
圖8 不同核數(shù)時卷積計算效率和擴展效率Fig.8 Convolution calculation efficiency and scalability efficiency with different cores
首先,選取和上節(jié)相同的典型卷積層進行Conv1×1的多核測試,分別測試1、2、4、8核的計算效率以及擴展效率。實驗結(jié)果表明: 隨著核數(shù)的增加,本文的計算效率在降低,以第一個卷積為例,其1核、2核、4核和8核的計算效率分別為64.95%、57.18%、46.78%和31.41%,其2核、4核和8核的擴展效率為88.04%、72.02%和48.36%。可見,2核時帶寬影響較小,其擴展效率較高,隨著核數(shù)變多,計算峰值提升,而帶寬壓力變大,其擴展效率就逐步降低,但8核時仍能保持31.41%的計算效率。
其次,采用同樣的實驗方法對Conv3×3進行了測評。實驗結(jié)果表明: 隨著核數(shù)的增加,本文的計算效率逐步降低,以第二個卷積為例,其1核、2核、4核和8核的計算效率分別為50.01%、44.27%、38.21%和26.93%,擴展效率分別為100%、88.52%、76.42%和53.86%。Conv3×3的評估結(jié)果同樣表明: 隨著核數(shù)提升,由于帶寬的影響,計算效率會降低,但8核的計算峰值仍能保持26.93%的計算效率。
為了對比不同平臺上的性能,選擇E5-2640 CPU作為對比平臺。在實驗時,為了保持結(jié)果的可靠性,本文設(shè)置batchsize為32,在FT-M7032上,N4則為8,即單簇執(zhí)行32幅圖的性能。圖9展示了在不同卷積規(guī)模下E5-2640 CPU和FT-M7032平臺上的執(zhí)行時間,其中執(zhí)行時間是指32幅的總計執(zhí)行時間。從圖中可以看出,在FT-M7032上的卷積實現(xiàn)時間能夠達到E5-2640的1.52~8.22倍,這個結(jié)果驗證了本文方法的有效性。
圖9 不同平臺上不同卷積規(guī)模性能對比Fig.9 Performance comparison of different convolution scales on different platforms
4.5.1 典型網(wǎng)絡(luò)在不同平臺上的性能對比
在本小節(jié),將采用典型網(wǎng)絡(luò)ResNet50模型進行測評。在ResNet50中,核為7×7的卷積(Conv7×7)采用與Conv3×3相類似的方式實現(xiàn),全連接層采用與Conv1×1相類似的方式實現(xiàn),池化層同樣根據(jù)類似的設(shè)計理念進行了優(yōu)化實現(xiàn),卷積計算后緊跟批量歸一化(batch normalization, BN)和ReLu操作,包括Conv1×1、Conv3×3和Conv7×7。為了提高網(wǎng)絡(luò)的效率,將BN、ReLu和卷積計算融合在一起,卷積計算之后的輸出數(shù)據(jù)不立即存回AM空間,在寄存器中繼續(xù)做BN和ReLu計算,ReLu計算之后將數(shù)據(jù)傳輸?shù)紸M和核外。該處理能減少輸入輸出數(shù)據(jù)的通信次數(shù)和時間,提高計算性能。面向典型卷積神經(jīng)網(wǎng)絡(luò)與通用平臺性能對比結(jié)果見表1,基于FT-M7032所實現(xiàn)的ResNet50模型在batchsize為32的情況下,相比于E5-2640 CPU有5.39倍的加速比,其中E5-2640 CPU上的執(zhí)行時間是基于PyTorch架構(gòu)測試獲得的。
表1 面向典型卷積神經(jīng)網(wǎng)絡(luò)與通用平臺性能對比
4.5.2 擴展效率對比
為了進一步展現(xiàn)本文工作的有效性,本文方法與文獻[15]的方法進行了擴展效率的比較,見表2,文獻[15]僅選用ResNet50中的Conv1×1作為測試對象,因此比較時本文同樣選取Conv1×1作為對比對象。從表2數(shù)據(jù)可知,本文方法的擴展效率略有優(yōu)勢。關(guān)于計算性能,文獻[15]中,面向Conv1×1,其性能相比于同平臺的Caffe架構(gòu)獲得1.16~3.79倍的性能加速,其文中無絕對時間。而本文所測完整ResNet50相比于E5-2650有5.39倍的加速比。因此,由于平臺的差異性,無法進行絕對的對比。
表2 面向典型卷積神經(jīng)網(wǎng)絡(luò)與相關(guān)工作擴展效率對比Tab.2 Scalability efficiency comparison with related work for typical convolutional neural network
本文針對FT-M7032異構(gòu)多核DSP體系結(jié)構(gòu)和卷積計算的特點,分析并行機理,針對不同的卷積規(guī)模設(shè)置了不同的多核并行優(yōu)化方案和核內(nèi)優(yōu)化方法,針對Conv1×1提出了特征圖級多核并行方案,針對核大于1×1的卷積提出了窗口級多核并行優(yōu)化設(shè)計,同時提出了逐元素向量化計算的核內(nèi)并行優(yōu)化實現(xiàn)。實驗結(jié)果表明: 并行優(yōu)化方法單核計算效率最高能達到64.95%,在帶寬受限的情況下,多核并行擴展效率可達到48.36%~88.52%,在典型網(wǎng)絡(luò)ResNet50上的執(zhí)行性能與E5-2640 CPU相比,獲得了5.39倍加速。該項研究工作對于推動國產(chǎn)自主DSP芯片在智能領(lǐng)域的應用具有重要意義。
致謝
感謝FT-M7032設(shè)計團隊對于本文工作的大力支持。