謝坤鵬 盧 冶,3 靳宗明 劉義情 龔 成 陳新偉 李 濤,3
1(南開大學(xué)計(jì)算機(jī)學(xué)院 天津 300350) 2(天津市網(wǎng)絡(luò)與數(shù)據(jù)安全技術(shù)重點(diǎn)實(shí)驗(yàn)室(南開大學(xué)) 天津 300350) 3(計(jì)算機(jī)體系結(jié)構(gòu)國家重點(diǎn)實(shí)驗(yàn)室(中國科學(xué)院計(jì)算技術(shù)研究所) 北京 100190) 4(福建省信息處理與智能控制重點(diǎn)實(shí)驗(yàn)室(閩江學(xué)院) 福州 350108)
由于卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural network, CNN)往往規(guī)模龐大、參數(shù)量眾多,難以直接部署于邊緣計(jì)算平臺,因此為遷移CNN到資源受限的嵌入式現(xiàn)場可編程門陣列(field programable gate array, FPGA)平臺來加速邊緣應(yīng)用計(jì)算,研究人員提出了多種CNN量化方法,在符合應(yīng)用要求的基礎(chǔ)上降低CNN的計(jì)算規(guī)模和存儲需求[1-2].CNN的權(quán)值和激活值經(jīng)過量化操作后,只需低位寬的算術(shù)運(yùn)算單元和少量的存儲資源就可以部署CNN模型.FPGA憑借其獨(dú)特的靈活性、可編程性、高層次綜合設(shè)計(jì)和出色的能效比[3],成為設(shè)計(jì)CNN加速器的首選平臺[4-6].因此,利用嵌入式FPGA來實(shí)現(xiàn)量化模型的低位寬加速器已成為當(dāng)前的研究熱點(diǎn)[7-10].然而,以往的CNN加速器設(shè)計(jì)通常存在3個問題:
1) CNN模型量化算法與相應(yīng)硬件加速器的設(shè)計(jì)緊耦合,導(dǎo)致模型重構(gòu)需要相應(yīng)的硬件修改量大且復(fù)雜,無法高效適配不同量化方法,代碼復(fù)用效率極低.傳統(tǒng)量化CNN加速器的設(shè)計(jì)是根據(jù)量化方法的數(shù)據(jù)格式定義和數(shù)據(jù)位寬聲明來設(shè)定計(jì)算規(guī)則,然后將計(jì)算規(guī)則映射成為相應(yīng)的硬件配置[4-5].研究人員往往期望以類似“即插即用”的方式將各種量化CNN快速地部署于FPGA來驗(yàn)證其硬件效率[11-12].然而,不同的量化方案在實(shí)現(xiàn)過程中,通常具有自身特殊的數(shù)據(jù)格式和運(yùn)算規(guī)則,這些差異導(dǎo)致重構(gòu)時無法高效復(fù)用.具體來說,數(shù)據(jù)格式會直接影響數(shù)據(jù)傳輸模式和讀寫方式,重構(gòu)時需要針對特定數(shù)據(jù)格式重新設(shè)定編碼規(guī)則和數(shù)據(jù)重組織方案;而特定的運(yùn)算規(guī)則又需要重新定制算子才能支持高效計(jì)算,另外計(jì)算的高度并行需求也會增加硬件重構(gòu)時的難度.
2) 已有的工作多是利用切片處理方式從不同的角度將大塊計(jì)算分解為可部署到FPGA上的多個小塊計(jì)算,并優(yōu)化數(shù)據(jù)交換機(jī)制來減少片上存儲和片外存儲之間的通信代價(jià)[10,13].但是,低位寬數(shù)據(jù)在片上片外數(shù)據(jù)交換過程中,由于缺少對數(shù)據(jù)的有效組織,導(dǎo)致帶寬資源利用不充分、并行讀寫效率低,從而成為制約高效計(jì)算的瓶頸.盡管可將多個數(shù)據(jù)項(xiàng)打包為單個寬字[14-15],然后在每個周期并行地傳輸這些數(shù)據(jù)項(xiàng),但是未進(jìn)行編碼設(shè)計(jì)和數(shù)據(jù)重組織則會降低并行解碼的執(zhí)行效率.此外,并行解碼操作需要存儲數(shù)據(jù)的硬件資源獨(dú)立分布,才能避免片上數(shù)據(jù)并行訪問沖突.在計(jì)算方面,并行計(jì)算同樣也需要合理的數(shù)據(jù)存儲資源分布,才能保證數(shù)據(jù)的無沖突并行訪問.因此,以往的設(shè)計(jì)方案需要大量的片上存儲資源才能同時滿足并行解碼和并行計(jì)算的需要.
3) 實(shí)際部署CNN時需要調(diào)整計(jì)算并行規(guī)模、存儲資源類型、通信緩沖大小等一系列參數(shù)配置以符合FPGA片上資源的約束并進(jìn)行性能優(yōu)化,但片上資源配置與優(yōu)化嚴(yán)重依賴人工經(jīng)驗(yàn),缺乏建模分析和明確的理論依據(jù)來支持決策,導(dǎo)致資源未有效利用、FPGA性能發(fā)揮不充分.具體來講,僅憑人工經(jīng)驗(yàn)難以精準(zhǔn)決策要分配哪種資源、分配多少資源來用于計(jì)算操作、數(shù)據(jù)存儲和數(shù)據(jù)通信.盡管有一些相關(guān)研究嘗試對CNN加速器的性能和資源進(jìn)行分析來解決FPGA片上資源如何配置的問題,但未能構(gòu)建全面地覆蓋所有資源的分析模型,造成資源配置方法具有局限性.例如,利用Roofline搜索最優(yōu)的DSP資源配置[16],但LUT等其他片上資源并未涉及和充分利用.因此,對于CNN加速器來說,缺乏FPGA片上資源(如LUT,DSP,BRAM)利用率與CNN推理延遲的聯(lián)合分析,會使加速器的設(shè)計(jì)和優(yōu)化缺乏理論依據(jù),進(jìn)而難以進(jìn)行資源合理配置,無法充分發(fā)揮硬件性能.
目前,學(xué)術(shù)界和工業(yè)界缺乏針對量化CNN模型提供框架級支撐的靈活通用FPGA加速器設(shè)計(jì)研究工作,現(xiàn)有框架級工作主要集中于適配專用、特定量化方法的FPGA加速器設(shè)計(jì)研究.這是由于FPGA設(shè)計(jì)流程相對復(fù)雜且靈活度較高,需要研究人員具備軟硬件協(xié)同設(shè)計(jì)能力,既要熟悉硬件研發(fā)方法又要對算法執(zhí)行流程[17]一清二楚,無形中提高了FPGA加速框架的設(shè)計(jì)門檻,也造成了當(dāng)前面向CNN的FPGA加速框架相關(guān)研究的匱乏.相比而言,GPU平臺上的算法加速研究和應(yīng)用卻很充分,先后出現(xiàn)了多種加速庫和框架工具來加速深度神經(jīng)網(wǎng)絡(luò)并簡化其部署過程,如cuDNN[18],cuBlas[19],TensorFlow等功能強(qiáng)大又豐富的類庫和框架工具,而FPGA平臺上的量化CNN加速器框架相關(guān)內(nèi)容還未被深入探索.盡管Xilinx推出的VITIS AI工具可支持Caffe和TensorFlow的模型直接進(jìn)行量化并部署到目標(biāo)平臺[20],但是該工具所采用的量化方法固定,難以更改或拓展,而量化CNN加速器的研究人員亟需快速集成各種類型量化方法來驗(yàn)證硬件效率[12].
因此,為解決上述問題,本文提出一種面向量化CNN模型的嵌入式FPGA加速框架FAQ-CNN,從計(jì)算并行、數(shù)據(jù)通信與數(shù)據(jù)存儲3方面來進(jìn)行相關(guān)設(shè)計(jì)、方案實(shí)現(xiàn)和聯(lián)合優(yōu)化.FAQ-CNN把量化方法相關(guān)操作抽象成模板化的量化組件,以此支持各種量化算法的靈活接入和量化模型快速部署.CNN模型量化和方案部署研究人員可利用FAQ-CNN框架中的缺省量化組件或自定義新量化組件,以類似“即插即用”的方式來快速定制量化CNN加速器,從而減少設(shè)計(jì)重構(gòu)帶來的代價(jià).為提升定制量化CNN加速器的性能,F(xiàn)AQ-CNN利用搜索工具實(shí)現(xiàn)硬件參數(shù)快速自動配置,從而發(fā)揮各種量化方法的優(yōu)勢并避免框架通用性帶來的性能損失.在加速器設(shè)計(jì)方面,F(xiàn)AQ-CNN分別實(shí)現(xiàn)卷積、池化、ReLU激活和全連接4種不同的CNN算子,以此作為建立通用CNN結(jié)構(gòu)的基礎(chǔ),并運(yùn)用算子融合、雙緩沖和流水線等優(yōu)化技術(shù),提升CNN推理任務(wù)內(nèi)部并行的執(zhí)行效率.在數(shù)據(jù)傳輸方面,F(xiàn)AQ-CNN采用高位寬的數(shù)據(jù)傳輸模式實(shí)現(xiàn)單周期交付多數(shù)據(jù),并結(jié)合數(shù)據(jù)預(yù)處理、數(shù)據(jù)并行解碼和并行計(jì)算等機(jī)制進(jìn)行協(xié)同優(yōu)化.此外,F(xiàn)AQ-CNN綜合分析片上資源利用情況并構(gòu)建資源配置模型,以CNN推理最小延遲為性能目標(biāo),以片上資源為約束,來支持搜索工具尋求最佳的片上資源配置方案.本文相關(guān)實(shí)驗(yàn)驗(yàn)證了FAQ-CNN能夠高效地實(shí)現(xiàn)如BNN[1],TNN[2],μL2Q[12],DoReFa-Net[21],VecQ[11],PoT[22]等量化CNN加速器.以8 b位寬的DoReFa量化算法加速器為例,其在Xilinx ZCU102平臺上FAQ-CNN可獲得高達(dá)1.23TOPS的計(jì)算性能.
本文的主要貢獻(xiàn)包括3個方面:
1) 提出面向量化CNN的FPGA加速框架FAQ-CNN.軟件工具FAQ-CNN可提供快速部署量化CNN模型的解決方案,將量化方法的相關(guān)操作模板化為FAQ-CNN框架的量化組件,并提供2種不同粒度的CNN硬件加速器實(shí)現(xiàn)方式;通過算子融合將卷積層的輸出結(jié)果作為激活層和池化層的輸入數(shù)據(jù),并采用雙緩沖存儲張量數(shù)據(jù),從而實(shí)現(xiàn)4段流水線來提升FAQ-CNN迭代時的并行執(zhí)行效率.
2) 提出針對數(shù)據(jù)特征的分級編碼和位寬無關(guān)編碼的方案,設(shè)計(jì)低位寬與高位寬數(shù)據(jù)的編解碼規(guī)則,高效利用帶寬傳輸數(shù)據(jù).在數(shù)據(jù)傳輸前,將片外數(shù)據(jù)重組織為按固定維度展開的連續(xù)分布數(shù)據(jù);在數(shù)據(jù)解碼時,通過存儲資源復(fù)用機(jī)制來滿足并行解碼和并行計(jì)算的資源需求,降低總體資源消耗.
3) 建立資源配置優(yōu)化模型并轉(zhuǎn)為整數(shù)非線性規(guī)劃問題,將輸入通道與輸出通道的切片因子與權(quán)值存儲方式設(shè)定為超參數(shù)來探索設(shè)計(jì)空間.在求解時采用啟發(fā)式剪枝策略縮小設(shè)計(jì)空間規(guī)模,借助CPU-GPU異構(gòu)平臺來加速參數(shù)搜索過程,快速完成相應(yīng)的FPGA片上資源的最佳配置.
關(guān)于FPGA平臺的CNN加速器研究集中于上層CNN量化方法和底層硬件設(shè)計(jì)2個方面[23-24].上層CNN量化方法側(cè)重降低數(shù)據(jù)位寬來契合FPGA硬件計(jì)算要求[1];底層硬件設(shè)計(jì)側(cè)重從CNN計(jì)算、數(shù)據(jù)通信、存儲等方面來優(yōu)化加速器性能[13].
在CNN模型量化方法方面,量化可分為超低位寬[1]、線性[21]和非線性[22]這3類方法.對于超低位寬,Courbariaux等人[1]提出了二值化網(wǎng)絡(luò)BNN,將模型權(quán)值量化為1或-1這2個值,僅用1 b即可表示模型的參數(shù).Zhao等人[25]基于FPGA平臺實(shí)現(xiàn)了BNN,將其模型權(quán)值數(shù)據(jù)全部置于片上存儲器,避免片外數(shù)據(jù)加載高延遲.Xilinx研究實(shí)驗(yàn)室提出了基于FPGA的BNN加速框架FINN[26],所實(shí)現(xiàn)的加速器能夠在CIFAR-10數(shù)據(jù)集上獲得283 μs的推理延遲.Li等人[2]提出了三值化網(wǎng)絡(luò)TNN,將模型權(quán)值量化為1,-1或0,相比于BNN,TNN能夠有效提升模型分類精度.Prost-Boucle等人[5]部署TNN量化算法到FPGA平臺并獲得了16.7TOPS的計(jì)算性能.Wang等人[27]提出基于BNN和TNN的混合精度神經(jīng)網(wǎng)絡(luò),并采用多種組合方案來權(quán)衡模型的準(zhǔn)確性和計(jì)算復(fù)雜度.對于線性量化,Gong等人[11]提出VecQ量化方法,利用范數(shù)形式化表示量化值和全精度值之間的偏差,能夠在給定位寬下最小化量化誤差.Zhou等人[21]提出了DoReFa-Net,量化反向傳播過程中的梯度值為低位寬定點(diǎn)數(shù),從而能夠利用FPGA平臺加速CNN模型的訓(xùn)練和推理過程.Wang等人[28]提出HAQ量化框架,利用增強(qiáng)學(xué)習(xí)機(jī)制優(yōu)化量化策略,對模型的各層采取不同的量化策略,能夠有效降低推理延遲并減少量化造成的精度損失.對于非線性量化,Miyashita等人[22]提出了PoT量化算法,將模型權(quán)值量化為0或2的冪.Jing等人[29]部署PoT量化算法到FPGA平臺,利用冪計(jì)算的性質(zhì)將乘法和累加運(yùn)算轉(zhuǎn)換為利用LUT實(shí)現(xiàn)的移位運(yùn)算.Li等人[30]提出APoT算法,將浮點(diǎn)數(shù)量化為多個PoT值(2的冪)的和,從而更好地?cái)M合權(quán)值分布.Tambe等人[24]提出AdaptiveFloat量化算法,利用指數(shù)和底數(shù)來表示量化后的數(shù)值,不僅擴(kuò)大了數(shù)值表示范圍,而且支持硬件的高效實(shí)現(xiàn).Jain等人[31]提出BiScaled-Fxp定點(diǎn)數(shù)表示方式,采用2個不同的縮放因子來擬合長尾分布,按比例分別縮放模型權(quán)值中較大數(shù)值和較小數(shù)值,并成功部署于FPGA平臺.
在CNN模型計(jì)算方面,主要的計(jì)算量集中于卷積層,Cong等人[32]證明了卷積層的計(jì)算量占據(jù)整個模型計(jì)算量的90%.針對卷積層中大量的循環(huán)操作,Zhang等人[16]采用多種嵌套循環(huán)優(yōu)化技術(shù)來提升卷積層的計(jì)算效率,如循環(huán)流水線、循環(huán)展開和循環(huán)平鋪.盧冶等人[33]從數(shù)據(jù)訪問獨(dú)立性的角度提出通道并行計(jì)算的方案,引入循環(huán)切割因子并在通道維度展開循環(huán),利用數(shù)據(jù)流優(yōu)化和緩存優(yōu)化技術(shù)加速CNN的卷積計(jì)算.Liang等人[34]利用Winograd算法降低卷積層的計(jì)算復(fù)雜度,提高卷積層的處理速度.然而,Winograd算法效率依賴卷積步長的選取,當(dāng)步長為1時計(jì)算效率較高,而其他情況下算法效率不夠理想.為了部署CNN到配備大規(guī)模硬件資源的FPGA平臺上,有研究人員從處理器結(jié)構(gòu)方面來加速卷積計(jì)算.例如,Wei等人[10]提出利用脈動陣列來進(jìn)行卷積層計(jì)算的方案,能夠以280 MHz的工作頻率處理CNN推理任務(wù),大幅度降低推理延遲.Cong等人[35]利用多面體模型自動化設(shè)計(jì)CNN的脈動陣列結(jié)構(gòu),探索了從計(jì)算需求到硬件結(jié)構(gòu)的最佳映射方案.然而,這些基于脈動陣列的計(jì)算方案會消耗大量局部存儲資源.此外陳桂林等人[36]將卷積計(jì)算映射為2維陣列的計(jì)算和相應(yīng)的數(shù)據(jù)流調(diào)度,并通過加速器實(shí)例進(jìn)行了相應(yīng)驗(yàn)證.
在數(shù)據(jù)交換效率方面,CNN加速器片上與片外的數(shù)據(jù)存儲和訪問方式對加速器的處理速度提升至關(guān)重要.Du等人[37]提出ShiDianNao,將所有的模型參數(shù)置于片上SRAM,消除對DRAM的訪問,避免因片外數(shù)據(jù)訪問引起的高功耗和高延遲.Zhang等人[13]提出將全連接層的計(jì)算任務(wù)映射到卷積的計(jì)算引擎中,通過探究輸入特征圖和權(quán)重?cái)?shù)據(jù)的映射方式并利用共享機(jī)制,來減少對片外存儲器的訪問時間.Li等人[38]提出矩陣分解的方案,將全連接層的矩陣乘法分解為多個小規(guī)模矩陣乘法,并采用批處理的模式來緩解外存訪問壓力.除了訪存優(yōu)化,數(shù)據(jù)讀取方式優(yōu)化也能夠提高數(shù)據(jù)傳輸效率.對片外存儲器非連續(xù)存放的權(quán)值數(shù)據(jù)進(jìn)行重新排列,可增大數(shù)據(jù)讀取的猝發(fā)長度,進(jìn)而提高實(shí)時帶寬[13,39].此外,Cong等人[14]提出了利用高位寬模式傳輸數(shù)據(jù)的方案,將多個32 b的字合并為1個512 b的寬字來實(shí)現(xiàn)單周期傳輸多數(shù)據(jù),以充分利用帶寬資源.
Fig. 1 FAQ-CNN framework components and implementation mechanism圖1 FAQ-CNN框架組成和實(shí)現(xiàn)機(jī)制
在片上資源配置優(yōu)化和設(shè)計(jì)空間探索方面,Zhang等人[16]提出roofline模型,利用帶寬需求和實(shí)時處理性能2個指標(biāo)建模,最小化卷積層處理時間.Motamedi等人[40]聯(lián)合各類CNN設(shè)計(jì)方案與硬件平臺參數(shù)提出基于FPGA的CNN加速器性能評估模型,并利用設(shè)計(jì)空間自動化搜索工具獲取給定平臺的最佳實(shí)現(xiàn)方案.Mu等人[41]提出LoopTrees數(shù)據(jù)結(jié)構(gòu),對CNN加速器進(jìn)行資源建模,通過2階段先后的粗粒度和細(xì)粒度分析來獲取精準(zhǔn)的資源模型.這些工作在搜索最優(yōu)的CNN硬件實(shí)現(xiàn)結(jié)構(gòu)時,主要針對部分片上資源進(jìn)行建模,如DSP和BRAM.然而,作為片上資源重要組成部分的LUT未被充分探索,導(dǎo)致片上資源利用不充分.LUT的使用會增大建立資源模型的復(fù)雜度,而現(xiàn)有的工作缺乏關(guān)于LUT資源利用方面的探索.
本節(jié)首先介紹FAQ-CNN加速框架的總體架構(gòu),然后分別從數(shù)據(jù)并行計(jì)算、數(shù)據(jù)通信和數(shù)據(jù)存儲3個方面具體論述FAQ-CNN的設(shè)計(jì)思路和優(yōu)化方法,并詳細(xì)闡述FAQ-CNN的優(yōu)勢.
FAQ-CNN加速框架的FPGA設(shè)計(jì)架構(gòu)如圖1所示,分別由量化組件、數(shù)據(jù)引擎、片上緩存單元、指令單元及計(jì)算引擎5個部分組成.
1) 量化組件.量化方法往往具有自身獨(dú)特的數(shù)據(jù)格式和運(yùn)算規(guī)則.FAQ-CNN通過量化組件來形式化地描述量化方法的硬件代碼實(shí)現(xiàn)規(guī)則,將量化方法的硬件實(shí)現(xiàn)過程分解為運(yùn)算規(guī)則和量化數(shù)值映射,以靈活支持各類量化方法的快速集成.具體來講,量化組件中的模塊op負(fù)責(zé)量化算法所涉及的乘加(multiply accumulate, MAC)操作;模塊quanti-zation負(fù)責(zé)量化算法的數(shù)值映射.這2個模塊的具體實(shí)現(xiàn)可根據(jù)量化方法的特點(diǎn)來定制,3.1節(jié)中將詳細(xì)介紹這2個模塊的模板化實(shí)現(xiàn)方法.
2) 數(shù)據(jù)引擎.低位寬數(shù)據(jù)不經(jīng)重組而直接傳輸,往往對帶寬利用不夠充分且效率低下,甚至?xí)?dǎo)致通信瓶頸,而將低位寬數(shù)據(jù)組織成高位寬的數(shù)據(jù)來提升帶寬利用率又會增加設(shè)計(jì)復(fù)雜性.FAQ-CNN設(shè)計(jì)了支持并行讀寫的數(shù)據(jù)引擎,包含編碼器和解碼器2個模塊,用來實(shí)現(xiàn)單時鐘周期內(nèi)多個數(shù)據(jù)的并行讀寫,緩解數(shù)據(jù)傳輸與數(shù)據(jù)計(jì)算間速率不匹配的矛盾.
3) 片上緩存.FAQ-CNN中的片上緩存資源用于存儲輸入特征圖、輸出特征圖及模型權(quán)重.如圖1所示,數(shù)據(jù)引擎中的Load操作將輸入特征圖與模型權(quán)重加載到片上緩存,并通過Store操作將輸出特征圖寫入片外存儲器.
4) 指令單元.負(fù)責(zé)按照預(yù)先定義的指令規(guī)則解析模型配置參數(shù),這些配置參數(shù)規(guī)定了數(shù)據(jù)引擎與計(jì)算單元的工作方式.在FAQ-CNN中,指令由8個元素構(gòu)成:輸入通道、輸出通道、輸入特征圖高度、輸入特征圖寬度、卷積核大小、卷積步長、卷積填充和計(jì)算類型.其中,計(jì)算類型用來明確是卷積層的計(jì)算還是全連接層的計(jì)算以及是否還包含激活層和池化層計(jì)算.如圖2所示,以AlexNet[42]模型的第4個卷積層為例,按照FAQ-CNN所定義的指令格式,則其相應(yīng)的指令配置參數(shù)實(shí)例為(384,384,13,13,3,1,1,1).
Fig. 2 Definition of instruction format圖2 指令格式定義
5) 計(jì)算引擎.當(dāng)加載滿足計(jì)算條件的輸入數(shù)據(jù)之后,F(xiàn)AQ-CNN的計(jì)算引擎按指令配置參數(shù)來對這些數(shù)據(jù)進(jìn)行計(jì)算并輸出相應(yīng)的結(jié)果數(shù)據(jù).由于CNN模型各層的計(jì)算任務(wù)類型不同,比如卷積層是計(jì)算密集型的,而全連接層卻是通信密集型的,因此FAQ-CNN在計(jì)算引擎中采用2個計(jì)算內(nèi)核來分別處理這2類計(jì)算.
此外,由于FPGA片上資源受限,所以在CNN模型部署時無法將其某一層的全部張量數(shù)據(jù)都直接加載進(jìn)來,只能利用數(shù)據(jù)切片來迭代地完成整個層的計(jì)算.對于每次的迭代處理,其過程可分為4個階段,即加載、計(jì)算、后處理、存儲.其中,后處理主要包括非線性激活操作和池化2類操作.此外,F(xiàn)AQ-CNN為片上緩存相應(yīng)地設(shè)計(jì)了雙緩沖區(qū).雙緩沖區(qū)的設(shè)計(jì)能夠有效支持FAQ-CNN利用流水線技術(shù)對該4個階段數(shù)據(jù)流進(jìn)行并行處理.
當(dāng)張量數(shù)據(jù)加載到片上存儲器后,F(xiàn)AQ-CNN中的卷積層和全連接層進(jìn)行相應(yīng)計(jì)算,其流程代碼如圖3所示.結(jié)合硬件設(shè)計(jì)特性,F(xiàn)AQ-CNN采用多種機(jī)制加速計(jì)算.
Fig. 3 Computing engine of convolutional layer and full connected layer圖3 卷積層和全連接層的計(jì)算引擎
1) 循環(huán)展開.FAQ-CNN卷積層的嵌套循環(huán)結(jié)構(gòu)如圖3(a)的代碼所示.由于張量數(shù)據(jù)在不同通道上的計(jì)算操作是彼此獨(dú)立的,因此可將與輸入和輸出數(shù)據(jù)通道相關(guān)的2個循環(huán)放置到嵌套循環(huán)的最內(nèi)層并進(jìn)行循環(huán)展開.pragma指令規(guī)定了編譯器以復(fù)制硬件資源的方式來展開這2個內(nèi)部循環(huán)并進(jìn)行流水線處理.
2) 數(shù)據(jù)切片.在圖3(a)中,代碼的4個外層循環(huán)用來對單個通道的卷積核和特征圖進(jìn)行處理,tm和tn參數(shù)分別代表輸出特征圖和輸入特征圖在通道維度上的切片因子.因此,卷積計(jì)算的并行度可由tm與tn的乘積獲得.此外,為符合并行計(jì)算的要求,權(quán)重?cái)?shù)據(jù)需沿著輸入通道和輸出通道進(jìn)行數(shù)組分割,輸入特征圖和輸出特征圖同樣需要在通道維度上進(jìn)行數(shù)組分割.全連接層的循環(huán)結(jié)構(gòu)代碼如圖3(b)所示.與卷積層類似,全連接層的輸入和輸出均是1維張量,圖3(b)中的tm和tn分別表示輸出和輸入張量模長的切片因子.
3) 運(yùn)算規(guī)則.圖3中op模塊定義運(yùn)算規(guī)則,可以代替MAC操作并依據(jù)特定量化方法的數(shù)據(jù)格式進(jìn)行定制.FAQ-CNN中提供了2種不同粒度的op運(yùn)算,有關(guān)op運(yùn)算操作更多的實(shí)現(xiàn)細(xì)節(jié)將在3.1節(jié)進(jìn)行詳細(xì)討論.
4) 算子融合.FAQ-CNN將激活與池化操作直接融合到卷積層或全連接層的后處理階段.該方式能夠充分利用FPGA片上資源,減少片上存儲器和片外存儲器的數(shù)據(jù)傳輸次數(shù),從而快速處理此類計(jì)算任務(wù).此外,在FAQ-CNN流水線處理流程中,計(jì)算階段和數(shù)據(jù)加載階段是主要的耗時階段,而后處理階段并不耗時,因此將激活層和池化層的計(jì)算任務(wù)融合到卷積層或者全連接層的后處理階段,不會影響FAQ-CNN流水線處理性能.
CNN參數(shù)量龐大,但FPGA片上存儲資源有限,難以容納如此眾多的參數(shù),因此張量數(shù)據(jù)須放置于片外存儲器以備訪問.FAQ-CNN為了充分利用數(shù)據(jù)傳輸帶寬資源,采用將多個數(shù)據(jù)項(xiàng)打包合并成1個寬字(例如512 b的字)的方式,在1個時鐘周期內(nèi)批量地傳輸數(shù)據(jù),以此來提高數(shù)據(jù)傳輸效率.FAQ-CNN依據(jù)CNN模型數(shù)據(jù)特征設(shè)計(jì)了2種便于高效讀寫的數(shù)據(jù)編碼規(guī)則和相應(yīng)的并行解碼方法,并充分利用猝發(fā)傳輸?shù)膬?yōu)勢來進(jìn)一步提高寬字傳輸效率.
1) 編碼規(guī)則.FAQ-CNN采用2種編碼規(guī)則來處理不同場景的張量數(shù)據(jù),分別是分級編碼和位寬無關(guān)編碼.考慮到實(shí)際應(yīng)用場景的位寬限制,分級編碼采用3種不同的位寬來編碼數(shù)據(jù),如圖4所示,分別是低位寬lbit,次高位寬qbit和高位寬hbit.低位寬的lbit數(shù)據(jù)是真正需要訪問的數(shù)據(jù),高位寬的hbit數(shù)據(jù)是所要傳輸?shù)膶ο髷?shù)據(jù).多個lbit的數(shù)據(jù)首先被編碼為1個qbit的數(shù)據(jù),然后多個qbit的數(shù)據(jù)再被編碼為hbit的數(shù)據(jù).在解碼時,可根據(jù)分級規(guī)則來讀取實(shí)際數(shù)據(jù),即按qbit直接讀取(一般為32 b),然后再逐個讀取lbit的數(shù)據(jù).位寬無關(guān)編碼則是將多個lbit的數(shù)據(jù)直接編碼為1個hbit的數(shù)據(jù),在解碼時可直接讀取每一個lbit的數(shù)據(jù).2種編碼規(guī)則在遇到多個數(shù)據(jù)項(xiàng)的比特位之和不足以填充目標(biāo)位寬時,將采用無效值0作為填充項(xiàng).
Fig. 4 Encoding scheme圖4 編碼規(guī)則示意
FAQ-CNN采用位寬無關(guān)編碼方式處理權(quán)重?cái)?shù)據(jù),而對輸入特征圖和輸出特征圖數(shù)據(jù)則采用分級編碼方式.這是因?yàn)?,對于?quán)值數(shù)據(jù)來講,在模型推理過程中只需加載一次并保持不變,采用位寬無關(guān)編碼方式可以最大限度地利用帶寬資源,避免填充大量無效值0.對于輸入特征圖和輸出特征圖數(shù)據(jù)來講,相比于權(quán)重?cái)?shù)據(jù),特征圖數(shù)據(jù)的數(shù)據(jù)項(xiàng)較少且維度不同,數(shù)據(jù)在線重組織會引入較高的時間消耗,而分級編碼方式適用于來自不同維度的少量數(shù)據(jù)項(xiàng),且能有效減少無效數(shù)據(jù),支持特征圖數(shù)據(jù)的實(shí)時處理.以輸出特征圖為例,圖5展示了具體的分級編碼流程,輸入特征圖亦可按類似方式進(jìn)行處理.
2) 并行解碼.片上與片外的數(shù)據(jù)交換性能除受帶寬利用率的影響外,還取決于數(shù)據(jù)的解碼速率.FAQ-CNN中的編碼數(shù)據(jù)對象是多維張量,對這些多維張量數(shù)據(jù)在同周期內(nèi)并行解碼將極大提升數(shù)據(jù)交換性能.為避免并行解碼引起片上存儲資源訪問沖突,F(xiàn)AQ-CNN將寬字?jǐn)?shù)據(jù)的各個數(shù)據(jù)項(xiàng)存放在FPGA上的不同存儲區(qū)域(bank)來解決此問題.FAQ-CNN解碼時利用資源復(fù)用機(jī)制同時支持解碼和計(jì)算引擎對存儲資源的訪問,從而降低總體資源消耗量.
具體來說,對于模型權(quán)重?cái)?shù)據(jù),F(xiàn)AQ-CNN解碼時沿著數(shù)據(jù)的輸入通道和輸出通道的維度進(jìn)行訪問,并采用與計(jì)算引擎相同的數(shù)組分割規(guī)則以便并行執(zhí)行,具體過程如圖6所示.盡管對輸入特征圖和輸出特征圖亦可沿著通道維度并行解碼,但是,考慮到輸入特征圖和輸出特征圖的數(shù)據(jù)拷貝方式是每次只傳輸通道維度的部分?jǐn)?shù)據(jù),如果沿著通道維度進(jìn)行編解碼,在傳輸過程中將會出現(xiàn)大量的碎片化數(shù)據(jù),導(dǎo)致傳輸性能大幅降低.雖然數(shù)據(jù)重組織能夠緩解數(shù)據(jù)碎片化的問題,但會引起額外的時間消耗.因此,對于輸入特征圖和輸出特征圖數(shù)據(jù),F(xiàn)AQ-CNN解碼時沿著特征圖數(shù)據(jù)的列維度處理,既能連續(xù)讀取數(shù)據(jù),又能有效支撐并行執(zhí)行.在實(shí)際應(yīng)用中,為減少列維度數(shù)組分割因子的大小,采用適當(dāng)?shù)木幋a位寬來滿足數(shù)據(jù)高效傳輸?shù)男枨笥植幌倪^多的片上存儲資源.
Fig. 5 Encoding detail of output feature map圖5 輸出特征圖編碼細(xì)節(jié)
Fig. 6 Decoding detail of model weights圖6 模型權(quán)值解碼細(xì)節(jié)
3) 猝發(fā)式傳輸.利用猝發(fā)式傳輸?shù)姆绞娇商岣邤?shù)據(jù)傳輸性能,尤其對于寬字傳輸更為有效.猝發(fā)式傳輸高效與否取決于猝發(fā)傳輸長度的具體設(shè)置,而猝發(fā)傳輸長度的取值受片外存儲和訪問方式的制約,2.4節(jié)中將討論提升猝發(fā)傳輸長度的存儲策略.本文前期初步探究了不同傳輸位寬和猝發(fā)傳輸長度在200 MHz頻率下的實(shí)時帶寬情況,如圖7所示.可以看到,帶寬峰值會隨著位寬的增加和猝發(fā)傳輸長度的增加而提升.當(dāng)位寬增加時猝發(fā)傳輸長度對實(shí)時帶寬的影響更加明顯.因此,F(xiàn)AQ-CNN通過提升猝發(fā)傳輸長度來利用猝發(fā)傳輸?shù)膬?yōu)勢進(jìn)一步提高寬字傳輸效率.
Fig. 7 Bandwidth of different bit width and burst lengths圖7 不同位寬和猝發(fā)傳輸長度下的帶寬
4) 傳輸頻率.數(shù)據(jù)中心的FPGA平臺能夠支持最大512 b的數(shù)據(jù)傳輸位寬,Zynq系列嵌入式FPGA的數(shù)據(jù)傳輸接口支持位寬有限,通常不超過256 b或128 b[43].因此,為提高數(shù)據(jù)接口讀寫效率,F(xiàn)AQ-CNN利用異步時鐘傳輸方式,并在AXI傳輸總線的路徑上添加時鐘轉(zhuǎn)換器和位寬轉(zhuǎn)換器來彌合通信接口速率差異,從而提高FPGA片外存儲器的數(shù)據(jù)讀寫速率.例如,片外存儲器的工作頻率設(shè)定為FPGA片上存儲器I/O端口頻率的2倍甚至更高,以支持快速讀寫.
數(shù)據(jù)存儲方式是影響加速器性能的另一重要因素.針對片上存儲,F(xiàn)AQ-CNN避免硬件資源訪問端口數(shù)目限制導(dǎo)致的數(shù)據(jù)訪問沖突,設(shè)計(jì)滿足單周期多數(shù)據(jù)訪問需求的存儲方案.對于片外存儲,數(shù)據(jù)重組織機(jī)制用于保證數(shù)據(jù)分布連續(xù)性,提升數(shù)據(jù)通信效率.FAQ-CNN針對片上存儲和片外存儲2個方面進(jìn)行聯(lián)合優(yōu)化.
Fig. 8 Weight reorganization of fully connected layer圖8 全連接層權(quán)值重組織過程
1) 片上存儲.在2.2節(jié)中,計(jì)算引擎沿?cái)?shù)據(jù)的通道維度并行訪問張量數(shù)據(jù).因此,為避免訪問沖突,不同通道的數(shù)據(jù)必須位于不同的存儲資源塊中.具體優(yōu)化時則利用pragma指令將張量數(shù)據(jù)沿通道維度進(jìn)行數(shù)組分割.需要注意的是,對卷積層的權(quán)重、輸入通道和輸出通道同時進(jìn)行數(shù)組分割將造成片上存儲壓力.為減少存儲資源消耗,F(xiàn)AQ-CNN設(shè)計(jì)了2級緩存機(jī)制,將從片外存儲器拷貝的大塊數(shù)據(jù)用高位寬模式緩沖于片上存儲中.2級存儲主要面向計(jì)算引擎,依靠LUT資源實(shí)現(xiàn).1級存儲既可以利用LUT資源也可以利用BRAM,實(shí)際使用時需要根據(jù)片上資源消耗的情況來進(jìn)行配置,同時還需決策是否對權(quán)重進(jìn)行雙緩沖.在3.3節(jié)中,本文將通過設(shè)計(jì)空間探索來具體闡述資源配置優(yōu)化的實(shí)現(xiàn)細(xì)節(jié).
2) 片外存儲.由于切片方式的設(shè)計(jì),F(xiàn)AQ-CNN對多維張量的數(shù)據(jù)訪問具有局部性.如圖8所示,F(xiàn)AQ-CNN每次所訪問的原始數(shù)據(jù)在片外存儲器中是非連續(xù)存放的.圖8中使用地址偏移量表示的數(shù)據(jù)是全連接層流水線處理過程中的一次迭代中需要傳輸?shù)臄?shù)據(jù),可以明顯地看到數(shù)據(jù)是碎片形式分布的.和圖8全連接層的權(quán)值相比,卷積層的權(quán)值僅多了卷積核行和列2個維度,權(quán)值訪問同樣存在數(shù)據(jù)碎片化的問題.在2.3節(jié)中提到,猝發(fā)傳輸長度直接影響實(shí)時的數(shù)據(jù)傳輸帶寬,而猝發(fā)傳輸長度取值受片外數(shù)據(jù)存儲方式和訪問方式的制約,碎片化數(shù)據(jù)訪問模式將嚴(yán)重降低數(shù)據(jù)傳輸性能.為了最大化數(shù)據(jù)傳輸硬件資源的性能,F(xiàn)AQ-CNN利用重組織操作將片外存儲碎片化的數(shù)據(jù)進(jìn)行整理,形成連續(xù)的數(shù)據(jù)分布.圖8顯示了全連接層權(quán)值數(shù)據(jù)的重組織過程,F(xiàn)AQ-CNN根據(jù)數(shù)據(jù)訪問方式,將每次需要傳輸?shù)臄?shù)據(jù)按照地址連續(xù)的方式存放于片外存儲器中.片外數(shù)據(jù)經(jīng)過重新組織后,可有效利用猝發(fā)傳輸長度機(jī)制來提高實(shí)時帶寬.由于CNN模型在處理圖像分類任務(wù)時,其權(quán)重?cái)?shù)據(jù)的訪問保持恒定順序,因此數(shù)據(jù)重組織的處理只需要離線執(zhí)行1次.一旦經(jīng)過重組織,權(quán)值數(shù)據(jù)加載到片外存儲器后每次需要訪問的數(shù)據(jù)是地址連續(xù)的.模型中卷積層權(quán)重?cái)?shù)據(jù)的具體處理過程如算法1所示:
算法1.卷積層權(quán)重?cái)?shù)據(jù)重組織算法(CWRA).
輸入:原始權(quán)重張量W、權(quán)值位寬bwl、編碼后的位寬bwh、輸出通道數(shù)m、輸入通道n、輸出通道切片因子tm、輸入通道切片因子tn;
輸出:重組織后的權(quán)重張量W′.
①weight_num←bwh/bwl;
⑤ for alli ⑥ for allti ⑦ for allto ⑧temp←0; ⑨ for alls ⑩ 使用bo,bi,i,ti,s計(jì)算源index; 本節(jié)分別從加速器的量化方法適配、片上資源建模和設(shè)計(jì)空間探索3個方面來闡明FAQ-CNN框架實(shí)現(xiàn)過程.為了適配多種量化方法,F(xiàn)AQ-CNN框架通過模板將量化方法自身的具體操作抽象成量化組件.為優(yōu)化FPGA片上資源的配置,F(xiàn)AQ-CNN對資源消耗情況進(jìn)行建模,采用啟發(fā)式規(guī)則來降低搜索規(guī)模,并利用CPU-GPU異構(gòu)平臺快速尋找最佳配置. 為了適配各種量化方法,F(xiàn)AQ-CNN中的量化組件需要與計(jì)算引擎、數(shù)據(jù)引擎等模塊解耦.FAQ-CNN通過模板化的方式將量化組件分解為數(shù)值映射與運(yùn)算規(guī)則,量化算法能夠靈活地適配到FAQ-CNN框架中,并定制CNN加速器. FAQ-CNN主要考慮量化后數(shù)值的數(shù)據(jù)位寬和數(shù)據(jù)格式,因?yàn)閿?shù)據(jù)位寬會影響數(shù)據(jù)拷貝的方式進(jìn)而影響傳輸效率,尤其處理寬字?jǐn)?shù)據(jù)時更為敏感,借助2.3節(jié)中的編解碼方案可以屏蔽底層數(shù)據(jù)傳輸時的位寬差異.每種量化方法都有其獨(dú)特的數(shù)據(jù)格式,而數(shù)據(jù)格式會影響到數(shù)值映射方式和相應(yīng)的運(yùn)算規(guī)則.例如,BNN中的1 b用于表示數(shù)值1和-1而不是0和1,所以運(yùn)算時需要用-1來替代0[1].與之不同的是,PoT量化方法的數(shù)值位表示2的冪,且最高位用作符號位,所以運(yùn)算時需要進(jìn)行移位等操作[22].為應(yīng)對數(shù)據(jù)位寬和數(shù)據(jù)格式的變化,F(xiàn)AQ-CNN分別實(shí)現(xiàn)了粗粒度和細(xì)粒度的量化方法適配方案. FAQ-CNN中的粗粒度適配方案能夠快速且簡便地定義數(shù)值映射和運(yùn)算規(guī)則,即將量化后的目標(biāo)數(shù)值轉(zhuǎn)化為可直接參與MAC操作的補(bǔ)碼數(shù)值,然后在運(yùn)算時對補(bǔ)碼數(shù)值直接進(jìn)行MAC操作.對于數(shù)值映射,線性量化過程通常包含縮放(scale)、截?cái)?clip)和取整(round)三個步驟.通過這3個步驟,F(xiàn)AQ-CNN可得到補(bǔ)碼數(shù)值,然后利用逆變換規(guī)則,將補(bǔ)碼數(shù)值轉(zhuǎn)換為目標(biāo)數(shù)值則可得到最終結(jié)果. 然而,粗粒度的解決方案無法應(yīng)對復(fù)雜的量化方法,例如基于K-means的量化[44].這類量化方法通常需要提供完整的量化規(guī)則才能完成相應(yīng)的數(shù)值映射.因此,為支持細(xì)粒度量化方法適配方案,F(xiàn)AQ-CNN將數(shù)值映射和運(yùn)算規(guī)則封裝成抽象接口函數(shù)來支持具體的量化方法實(shí)現(xiàn).對于數(shù)值映射,F(xiàn)AQ-CNN提供全精度輸入和量化后的低精度輸出,接口函數(shù)負(fù)責(zé)完成全精度數(shù)值向低精度輸出的投影(project);對于運(yùn)算規(guī)則,F(xiàn)AQ-CNN提供2個低精度的量化數(shù)值和1個全精度的輸出數(shù)值,該接口函數(shù)負(fù)責(zé)完成低精度數(shù)值的乘法操作并把乘法結(jié)果累加到單精度32 b浮點(diǎn)數(shù)表示的輸出數(shù)值上. 嵌入式FPGA上的片上資源有限,因此實(shí)現(xiàn)方案要充分利用這些資源才能達(dá)到最佳性能.在具體方案實(shí)現(xiàn)過程中,為了提高資源利用率和模型推理性能,F(xiàn)AQ-CNN通過對資源消耗分析并構(gòu)建資源模型來尋求最優(yōu)的資源配置.FPGA片上的主要資源為DSP,BRAM和LUT,因此FAQ-CNN將它們作為資源模型的主要分析對象.此外,還需要結(jié)合FAQ-CNN中卷積層與全連接層的未確定的切片因子,才能構(gòu)建FAQ-CNN的資源消耗模型.為方便理解,定義切片因子四元組 tFAQ-CNN=conv_tm,conv_tn,fc_tm,fc_tn, (1) conv_tm,conv_tn,fc_tm,fc_tn分別代表卷積層的輸出通道和輸入通道的切片因子以及全連接層輸出向量和輸入向量的切片因子.實(shí)際上,全連接層的操作可以復(fù)用卷積層的計(jì)算引擎來實(shí)現(xiàn),即可將全連接層的操作轉(zhuǎn)換為卷積操作,以減少FAQ-CNN中的資源占用.因此,全連接層的切片因子fc_tm和fc_tn可配置為0.對于以卷積層為主的CNN模型,這種復(fù)用機(jī)制非常有效.下面著重分析DSP,BRAM,LUT的資源使用場景并構(gòu)建資源消耗模型.對應(yīng)FPGA模塊調(diào)用的設(shè)計(jì)模式,F(xiàn)AQ-CNN采用樹狀自頂向下的方式分析總資源消耗. 1) DSP模型.DSP資源的使用分為2部分:①與卷積層和全連接層的乘法有關(guān),該部分DSP消耗量可由切片因子四元組tFAQ-CNN直接表示;②用于數(shù)組索引等計(jì)算,與切片因子四元組無關(guān).因此,DSP的資源模型可表示為 (2) 2) BRAM模型.在FAQ-CNN實(shí)現(xiàn)時,BRAM用于存儲大塊數(shù)組數(shù)據(jù).BRAM有3種不同的配置模式,分別是:①單端口(SP);②真雙端口(TDP);③簡單雙端口(SDP)[45].3種模式所支持的讀寫方式和存儲形式不同,因此BRAM的使用量與配置模式密切相關(guān).此外,數(shù)組分割因子也會影響所需的bank數(shù)量,而bank數(shù)量可直接反映消耗多少BRAM.BRAM的總消耗量可定義為 (3) (4) (5) 其中,data_bits是張量元素的位寬,buff_size表示輸入張量、輸出張量或者權(quán)重張量的大小,而width和depth取決于BRAM各種配置模式中塊BRAM的寬度和深度,pf表示數(shù)組分割因子.由于輸入特征圖數(shù)據(jù)和模型權(quán)重只進(jìn)行讀操作,所以使用單端口的存儲模式即可.輸出特征圖的數(shù)據(jù)包含累加操作,所以需要真雙端口的模式支持單周期的讀寫.以此類推,也可為全連接層構(gòu)造BRAM資源消耗模型.全連接層是通信密集的,F(xiàn)AQ-CNN需要傳輸大量的權(quán)值數(shù)據(jù),因此權(quán)值使用BRAM資源存儲并進(jìn)行雙緩存,輸入向量和輸出向量在寄存器資源中緩存確保并行訪問. 3) LUT模型.FAQ-CNN在循環(huán)控制、循環(huán)內(nèi)部模塊設(shè)計(jì)、BRAM、寄存器和獨(dú)立的表達(dá)式邏輯中都使用到LUT資源.事實(shí)上,幾乎所有的模塊設(shè)計(jì)都會用到FPGA中的LUT資源.因此,準(zhǔn)確構(gòu)建LUT資源模型十分重要.FAQ-CNN通過理論分析和Vivado[43]綜合工具來聯(lián)合構(gòu)建LUT資源模型.首先,借助文獻(xiàn)[14,17]的分析模式給出LUT資源消耗的參數(shù)化表示方式;然后,利用Vivado工具獲得表示方式中的未知參數(shù),并將這些參數(shù)作為常數(shù)來形成最終的資源模型.LUT資源的總消耗量可被定義為 (6) (7) (8) (9) (10) 在構(gòu)建資源模型后,F(xiàn)AQ-CNN通過探索設(shè)計(jì)空間確定卷積層等資源最佳配置方式,實(shí)現(xiàn)CNN推理延遲最小.根據(jù)2.1節(jié)中的數(shù)據(jù)流調(diào)度規(guī)則,F(xiàn)AQ-CNN利用流水線模型來表示總延遲.CNN模型中某i層計(jì)算延遲和CNN模型中所有層的處理延遲總和被定義為 (11) 其中,β是流水線的迭代次數(shù).流水線迭代計(jì)算2批不同輸出數(shù)據(jù)的間隔時間,取決于流水線4個階段中時間消耗最多的環(huán)節(jié).依據(jù)3.2節(jié)中已構(gòu)建的資源模型,F(xiàn)AQ-CNN將資源配置設(shè)計(jì)空間搜索問題轉(zhuǎn)換為整數(shù)非線性規(guī)劃(integer nonlinear programming, INLP)問題,即: 目標(biāo)函數(shù) min:latencytotal, 約束條件 (12) pf_min (13) 對于全連接層,可在每次迭代期間計(jì)算出fc_tm個元素.為了計(jì)算輸出向量的所有元素,需要將迭代次數(shù)向上取整.如果元素總個數(shù)不能被fc_tm整除,則向上取整操作必然會引入無效計(jì)算.因此,限制fc_tm來減少無效操作: (14) 其中,fc_m表示全連接層輸出向量的最大長度.fc_tn可以使用相同的方式約束.通過式(14)的約束條件,AlexNet的搜索空間規(guī)??捎?013降低到109.此外,本文在FAQ-CNN實(shí)現(xiàn)時利用CPU-GPU異構(gòu)平臺來加快參數(shù)搜索過程.在CPU端計(jì)算可行解并借助約束條件完成設(shè)計(jì)空間剪枝,然后在GPU端來驗(yàn)證可行解并尋找最優(yōu)解.借此,AlexNet[42],VGG16[46]等典型模型只需花費(fèi)數(shù)秒即可完成配置參數(shù)搜索. 本節(jié)通過實(shí)驗(yàn)驗(yàn)證FAQ-CNN性能收益,并通過設(shè)計(jì)空間探索實(shí)驗(yàn)來論證FAQ-CNN的資源配置方法.首先,介紹實(shí)驗(yàn)所需軟硬件配置,并選取典型量化方法作為FAQ-CNN加速器設(shè)計(jì)的實(shí)現(xiàn)對象.其次,通過7組不同傳輸位寬配置的實(shí)驗(yàn)來觀測FAQ-CNN編解碼方案對硬件加速器的數(shù)據(jù)傳輸效率的性能增益.再次,呈現(xiàn)各種量化方法在不同位寬下完成單個MAC操作所需的資源情況,并依據(jù)資源模型探究資源的整體消耗情況.最后,通過尋找片上資源最佳配置,并與其他最新方法進(jìn)行性能對比,明確FAQ-CNN的性能優(yōu)勢. 1) 軟件環(huán)境.實(shí)驗(yàn)采用集成開發(fā)環(huán)境Vitis 2020.1[47]進(jìn)行FPGA加速器設(shè)計(jì).通過編程語言C++設(shè)計(jì)各模塊,并利用Vitis HLS工具來進(jìn)行高層次綜合. 2) 硬件環(huán)境.實(shí)驗(yàn)采用Xilinx ZCU102 SoC FPGA開發(fā)板作為硬件加速器驗(yàn)證平臺,FPGA的運(yùn)行頻率設(shè)定為200 MHz.此外,配備工作站運(yùn)行Vitis軟件,搭載Intel Xeon Silver 4210 CPU@2.20 GHz和64 GB DDR4內(nèi)存.配備1塊GeForce RTX2080Ti GPU顯卡,用于搜索參數(shù)配置. 3) CNN模型與量化方法.選取AlexNet模型和當(dāng)前業(yè)界經(jīng)典的CNN量化方法,這些量化方法的激活值和權(quán)值的位寬配置如表1所示: Table 1 Bit Width and LUT Consumption of DifferentQuantization Methods’ MAC Operation表1 不同量化方法乘累加操作的位寬配置和LUT消耗 4) 評估指標(biāo).FAQ-CNN的實(shí)驗(yàn)評估選取3個定量指標(biāo)來觀測和分析FAQ-CNN的性能收益. ① 數(shù)據(jù)傳輸效率.為了驗(yàn)證FAQ-CNN的編解碼方案能夠有效提升數(shù)據(jù)傳輸效率,實(shí)驗(yàn)以量化方法DoReFa的加速器為例,來探究各種編解碼位寬對加速器的數(shù)據(jù)傳輸速度的影響. ② 片上資源利用率.該指標(biāo)能夠反映FAQ-CNN所實(shí)現(xiàn)的低位寬加速器在完成單個MAC操作后的資源消耗情況及該加速器的整體資源消耗情況,資源利用率數(shù)據(jù)可由Vivado綜合工具得到,能夠準(zhǔn)確反映FAQ-CNN是否高效利用FPGA片上資源. ③ 每秒運(yùn)算次數(shù).該指標(biāo)能夠反映FAQ-CNN所實(shí)現(xiàn)的低位寬加速器的峰值計(jì)算性能和CNN模型中各卷積層的實(shí)時計(jì)算性能. 依據(jù)2.3節(jié)給出的編解碼規(guī)則,高位寬字的位個數(shù)會直接影響數(shù)據(jù)傳輸?shù)男?本節(jié)實(shí)驗(yàn)通過評測數(shù)據(jù)傳輸?shù)膱?zhí)行時間,來探究編解碼位寬對數(shù)據(jù)傳輸效率的影響.在CNN卷積層流水執(zhí)行過程中,主要包含3個階段,分別是computing,loading input,loading weight,其中l(wèi)oading input和loading weight階段負(fù)責(zé)加載輸入特征圖和權(quán)值數(shù)據(jù)到片上存儲,占據(jù)數(shù)據(jù)傳輸?shù)闹饕糠?首先,根據(jù)搜索工具獲得的最佳配置來設(shè)定卷積層的輸入通道和輸出通道的切片因子,分別設(shè)置為24和128.在此基礎(chǔ)上,computing階段的時間會確定下來.然后,對不同位寬下的loading input和loading weight的時間進(jìn)行評測. 以DoReFa量化算法為例,實(shí)驗(yàn)結(jié)果如表2所示,可以看到施加編解碼之前,即數(shù)據(jù)的實(shí)際傳輸位寬和數(shù)據(jù)的位寬相同時,數(shù)據(jù)傳輸?shù)臅r間遠(yuǎn)遠(yuǎn)高于計(jì)算所需時間,成為CNN計(jì)算耗時的主要原因.隨著位寬的提升,數(shù)據(jù)傳輸耗時不斷降低.從表2可知,當(dāng)權(quán)重使用256 b的傳輸模式時,對于AlexNet的5層卷積層,數(shù)據(jù)傳輸?shù)哪芰Χ伎蓾M足計(jì)算引擎的需求,此時編解碼技術(shù)理論上帶來的增益是未使用編解碼時的32(32=256/8)倍.對于輸入特征圖,當(dāng)數(shù)據(jù)編碼位寬設(shè)置為32 b即可滿足數(shù)據(jù)傳輸需求,此時編解碼技術(shù)提升4倍的傳輸速度. Table 2 Clock Cycle of Computing, LI(loading input) and LW(loading weight) Phases表2 計(jì)算、LI(loading input)和LW(loading weight)三個階段的時鐘周期數(shù) 2.3節(jié)中明確指出權(quán)重?cái)?shù)據(jù)的編解碼是沿著通道維度進(jìn)行的.當(dāng)編碼位寬采用256 b時,F(xiàn)AQ-CNN要求片上權(quán)值的存儲資源在輸入或者輸出通道上的數(shù)組分割因子是32.因?yàn)橛?jì)算引擎的并行能力是24×128,即要求權(quán)重?cái)?shù)組在輸入通道的數(shù)組分割因子是24,在輸出通道維度的數(shù)組分割因子是128,所以通過復(fù)用的機(jī)制對權(quán)重?cái)?shù)據(jù)編解碼時沿著輸出通道進(jìn)行對數(shù)組的分割程度最小,即會使用最少的存儲資源.對于輸入特征圖,數(shù)據(jù)張量的存儲方式在列維度數(shù)組分割因子是4,盡管無法滿足計(jì)算引擎所要求的數(shù)組分割規(guī)則,即無法在通道維度上進(jìn)行資源復(fù)用.但是,仍可通過使用較低的輸入切片因子降低對輸入特征圖的數(shù)組分割因子,從而降低存儲資源的需求.在輸入切片因子較低時,使用較高的輸出切片因子保證較強(qiáng)的并行能力. 本節(jié)實(shí)驗(yàn)測量多種經(jīng)典量化方法中單個MAC操作的LUT資源消耗量,用來指導(dǎo)LUT資源配置方式和構(gòu)建資源模型.給定的操作數(shù)位寬下,分別使用細(xì)粒度和粗粒度2種方式完成各種量化方法的MAC操作.實(shí)驗(yàn)采用Vivado來獲取準(zhǔn)確的資源消耗量. 實(shí)驗(yàn)結(jié)果如表1所示,對于BNN和PoT算法,粗粒度方式比細(xì)粒度方式完成MAC操作需要更多的LUT資源,這是因?yàn)樗鼈兊臄?shù)值不能直接參與MAC操作.粗粒度計(jì)算模式中需要中間轉(zhuǎn)換步驟,例如BNN算法需要將1 b的0轉(zhuǎn)化為2 b的-1,而細(xì)粒度計(jì)算模式中通過定制的計(jì)算方式完成MAC操作.BNN只需要判斷1 b的操作數(shù)為0或者1,然后選通另一操作數(shù)原值或者取反后的值. 此外,可看出操作數(shù)位寬最低的BNN量化算法需要最少的LUT數(shù)量,在細(xì)粒度模式下只需要6個LUTs就可以完成MAC操作.操作數(shù)位寬相同的PoT量化算法和VecQ相比,PoT算法的MAC操作需要更少的LUT資源.PoT的數(shù)值表示的是2的冪次方,乘法操作可通過高效的移位操作來代替.對于激活值和權(quán)重配置為8 b的DoReFa量化方法,MAC操作需要89個LUTs來完成.由于LUT資源總量有限,優(yōu)先選擇使用DSP資源來實(shí)現(xiàn)8 b的MAC操作. 本節(jié)實(shí)驗(yàn)部署多種量化算法到FAQ-CNN框架中,得到不同量化算法的加速器并統(tǒng)計(jì)相應(yīng)的資源消耗量和計(jì)算性能.片上資源面向AlexNet模型進(jìn)行配置且該模型用于評估各種量化算法的分類準(zhǔn)確率.為了探究同時使用DSP和LUT這2種資源完成計(jì)算帶來的收益,利用3組實(shí)驗(yàn)對比8 b的DoReFa量化方法加速器的資源消耗和性能,分別是只使用DSP、只使用LUT、聯(lián)合使用DSP和LUT完成MAC操作.對于其他低位寬的量化算法,僅使用LUT資源完成MAC操作.最后,選擇FAQ-CNN框架實(shí)現(xiàn)的3種加速器與Caffeine等量化加速器的性能進(jìn)行對比. 表3中顯示了各種量化算法加速器的資源利用率、峰值計(jì)算性能以及分類準(zhǔn)確率.位寬配置最低的BNN加速器可以實(shí)現(xiàn)3.28 TOPS的峰值計(jì)算性能,其中LUT資源使用率最高達(dá)到了66.40%,僅使用少量的DSP資源.但是,BNN量化方法會嚴(yán)重降低分類精度導(dǎo)致無法保證應(yīng)用需求.當(dāng)部署8 b的DoReFa量化算法時,可獲得1.23 TOPS的峰值計(jì)算性能,且CNN推理精度損失極小.此外,從DoReFa量化算法的3組實(shí)驗(yàn)可以看到,當(dāng)只使用DSP或者LUT的時候都不能完全發(fā)揮片上資源的計(jì)算能力.當(dāng)所有MAC操作使用DSP資源執(zhí)行時,加速器設(shè)計(jì)僅使用了39.98%的LUT資源.同樣,當(dāng)所有MAC操作使用LUT資源執(zhí)行時,加速器設(shè)計(jì)僅使用了4.52%的DSP資源.由此可見,這2種設(shè)計(jì)方式對片上邏輯資源使用都極不充分.在聯(lián)合使用DSP和LUT完成MAC操作時,LUT資源和DSP資源的使用率分別達(dá)到82.36%和99.17%,該設(shè)計(jì)能夠顯著提升計(jì)算引擎的計(jì)算能力. Table 3 Resource Consumption Utilization, Hardware Configuration and Computing Performance ofDifferent Quantization Methods Accelerator表3 不同量化方法加速器的資源消耗率、硬件配置和計(jì)算性能 卷積層輸入通道并行因子;α表示權(quán)值存儲模式(0表示LUT單緩沖,1表示LUT雙緩沖). 表4展示了采用DoReFa量化算法的FAQ-CNN與相關(guān)量化加速器的性能對比,Caffeine[13]和AccELB[27]加速器的時鐘頻率同樣為200 MHz.Caffeine[13]采用高位寬16 b的數(shù)據(jù)配置,AccELB[27]采用低位寬8 b和2 b的數(shù)據(jù)配置.在2 b數(shù)據(jù)配置下,F(xiàn)AQ-CNN和AccELB[27]相比,計(jì)算引擎完全采用LUT資源完成計(jì)算,其他模塊僅使用少量的DSP資源.在16 b數(shù)據(jù)配置下,FAQ-CNN受限于存儲資源限制實(shí)現(xiàn)和Caffeine接近的性能.在低位寬8 b數(shù)據(jù)配置下,F(xiàn)AQ-CNN充分利用DSP資源和LUT邏輯資源實(shí)現(xiàn)1 229 GOPS的計(jì)算性能,和采用16 b的Caffeine相比,峰值性能提升至3.6倍. Table 4 Computing Performance of FAQ-CNN andOther Quantization Accelerators表4 FAQ-CNN與相關(guān)量化加速器計(jì)算性能對比 由于參數(shù)的設(shè)置面向特定的CNN模型,雖然增大并行參數(shù)能夠增強(qiáng)峰值計(jì)算性能,但是并不能增強(qiáng)實(shí)時處理性能.這是因?yàn)椴捎们衅姆椒?,?dāng)通道切片因子無法整除總體通道數(shù)目時,必須向上取整計(jì)算完所有通道數(shù)據(jù),不可避免地引發(fā)大量的無效計(jì)算.本節(jié)的實(shí)驗(yàn)是根據(jù)具體的CNN模型選取通道切片因子,在保證最佳的實(shí)時處理性能時選取最小化資源消耗量,所以片上的資源仍有余量. 本節(jié)對低位寬加速器的設(shè)計(jì)資源消耗量進(jìn)行建模,并利用自動化搜索工具搜索片上資源最佳配置.采用的量化算法是在AlexNet模型上分類準(zhǔn)確率最高的INT8數(shù)據(jù)類型的DoReFa量化算法.根據(jù)搜索到的參數(shù)對FPGA進(jìn)行資源配置,實(shí)驗(yàn)結(jié)果與采用相同計(jì)算引擎的相關(guān)研究工作Caffeine進(jìn)行對比.值得注意的是,Caffeine僅實(shí)現(xiàn)了16 b的AlexNet網(wǎng)絡(luò)模型.本節(jié)利用FAQ-CNN分別實(shí)現(xiàn)16 b和8 b的AlexNet模型與Caffeine進(jìn)行細(xì)粒度性能對比.此外,將搜索算法得到的配置代入硬件設(shè)計(jì)中,分析AlexNet所有層的實(shí)時計(jì)算性能. Fig. 9 Resource configuration of convolutional layer and full connected layer圖9 卷積層和全連接層的資源配置 FAQ-CNN依據(jù)搜索工具得到的參數(shù)值對FPGA片上資源進(jìn)行配置,圖9顯示了卷積層和全連接層的資源配置.值得注意的是,卷積核較大的第1層卷積層單獨(dú)實(shí)現(xiàn).可以看到計(jì)算并行度較高的卷積層使用60%左右的LUT資源和95%的DSP資源,通信密集的全連接層僅使用了10%左右的片上資源.其中,卷積層輸出通道切片因子和輸入通道切片因子分別是128和24,模型權(quán)值使用LUT資源進(jìn)行存儲同時采用雙緩沖機(jī)制.圖10反映了AlexNet模型5層卷積層單層的實(shí)時處理性能,表5顯示了卷積層的理論峰值性能和5層卷積層的平均計(jì)算性能.其中,F(xiàn)AQ-CNN和Caffeine加速器設(shè)計(jì)的資源使用量顯示在表4中.在16 b數(shù)據(jù)下,F(xiàn)AQ-CNN受限于存儲資源限制,實(shí)現(xiàn)和Caffeine加速器相近的處理性能.在8 b數(shù)據(jù)配置下,F(xiàn)AQ-CNN得到卷積層1.23 TOPS的峰值計(jì)算性能和490GOPS的平均處理性能.與Caffeine相比,F(xiàn)AQ-CNN使用了2.3倍的DSP計(jì)算資源和1.67倍的LUT資源.值得注意的是,8 b數(shù)據(jù)的乘法和16 b數(shù)據(jù)的乘法都僅利用1個DSP完成計(jì)算.FAQ-CNN的峰值處理性能是采用16 b數(shù)據(jù)配置Caffeine加速器的3.6倍,其中DSP資源提供了2倍左右的性能增益,LUT資源提供額外的性能增益.因?yàn)榈?層的輸入通道較少,并不適合這種通道并行的設(shè)計(jì),得到的實(shí)時處理性能只有96 GOPS.除此之外,其他層的實(shí)際計(jì)算性能和峰值性能差距較小.對于卷積層,由于設(shè)計(jì)方案中采用流水線的機(jī)制,除了指令參數(shù)外,其他所有的數(shù)據(jù)都進(jìn)行雙緩存.通過這種緩存機(jī)制,在整個流水線計(jì)算過程中,計(jì)算引擎在70%的時間內(nèi)處于活躍狀態(tài).在計(jì)算方面,F(xiàn)AQ-CNN聯(lián)合使用LUT資源和DSP資源完成MAC操作的方式可以最大化片上資源帶來的計(jì)算性能,從而能夠?qū)崿F(xiàn)24×128的計(jì)算陣列.在DSP和LUT聯(lián)合使用時,有多種配置方式,即按照輸入通道進(jìn)行配置和按照輸出通道進(jìn)行配置.由于DSP能夠同時完成乘法操作和累加操作,所以在設(shè)計(jì)中采用輸出通道配置的方式會更加有效. Fig. 10 Computing performance of AlexNet convolutional layers of FAQ-CNN and Caffeine圖10 FAQ-CNN和Caffeine處理AlexNet卷積層的 計(jì)算性能 Table 5 Hardware Platform and Computing Performance of FAQ-CNN and Caffeine 在數(shù)據(jù)通信方面,對于權(quán)重?cái)?shù)據(jù)來說,通過重組織操作進(jìn)行預(yù)處理,可確保每次所需傳輸?shù)臄?shù)據(jù)在外部存儲器中是連續(xù)分布的.表6顯示了數(shù)據(jù)重組織策略對卷積層和全連接層權(quán)值通信性能的影響.由于AlexNet第3,4,5層的權(quán)值數(shù)據(jù)傳輸方式相同,僅以第3層為例進(jìn)行說明. 從表6中可以看到,重組織后的權(quán)值數(shù)據(jù)在進(jìn)行數(shù)據(jù)傳輸時,猝發(fā)傳輸長度能夠有效地提升到27 KB甚至更高,從而能夠得到數(shù)據(jù)位寬為256 b模式下的最高傳輸帶寬4.77 GBps.對于輸入特征圖,盡管未進(jìn)行重組織,但是采用的是32 b的數(shù)據(jù)位寬,依然能夠得到該傳輸模式下的最高帶寬715 MBps.表6的數(shù)據(jù)傳輸速度足夠保證計(jì)算引擎對數(shù)據(jù)的需求.此外,表7顯示了AlexNet中的3個全連接層的參數(shù)配置和相應(yīng)的處理時間.可以看到,全連接層的實(shí)時平均帶寬速度最高達(dá)到了4.54 GBps,接近硬件資源能夠提供的最大帶寬速度4.77 GBps.FAQ-CNN充分利用帶寬資源,能夠?qū)崿F(xiàn)全連接層的最低處理延遲. Table 6 Impact of Data Reorganization onCommunication Performance表6 數(shù)據(jù)重組織對通信性能的影響 Table 7 Realtime Performance of Fully Connected Layers表7 全連接層的實(shí)時處理性能 本文提出一種靈活的嵌入式FPGA加速器設(shè)計(jì)框架FAQ-CNN,從量化方法到硬件加速器設(shè)計(jì)進(jìn)行聯(lián)合優(yōu)化,支持嵌入式FPGA平臺上快速且高效地部署量化CNN模型.FAQ-CNN將量化方法分解為量化數(shù)值映射和數(shù)值運(yùn)算規(guī)則,并通過模板來統(tǒng)一描述量化方法的實(shí)現(xiàn)過程;通過分級和位寬無關(guān)2種編碼方案與并行解碼機(jī)制,來提升片上與片外存儲之間的數(shù)據(jù)交換效率;建立FPGA資源和性能的聯(lián)合優(yōu)化模型,針對帶約束條件的設(shè)計(jì)空間,采用啟發(fā)式策略進(jìn)行裁剪,并利用異構(gòu)平臺搜索最優(yōu)參數(shù),實(shí)現(xiàn)FPGA片上資源的快速配置.實(shí)驗(yàn)結(jié)果表明,F(xiàn)AQ-CNN能夠高效適配多種量化方法,并能實(shí)現(xiàn)8 b下高達(dá)1.23TOPS的優(yōu)越性能.FAQ-CNN能夠支持相關(guān)研究人員快速構(gòu)建量化CNN加速器,對深度學(xué)習(xí)及異構(gòu)計(jì)算等領(lǐng)域具有很好的指導(dǎo)意義和研究價(jià)值. 作者貢獻(xiàn)聲明:謝坤鵬提出算法思路,負(fù)責(zé)完成實(shí)驗(yàn)并撰寫論文;盧冶提出系統(tǒng)思路、實(shí)驗(yàn)方案和指導(dǎo)意見,并修改與審核論文;靳宗明協(xié)助完成部分實(shí)驗(yàn);劉義情參與論文校對和圖表修正;龔成負(fù)責(zé)調(diào)研和數(shù)據(jù)分析;陳新偉參與論文校對和實(shí)驗(yàn)數(shù)據(jù)審查;李濤提出方法的指導(dǎo)意見.3 FAQ-CNN框架實(shí)現(xiàn)
3.1 量化方法適配
3.2 片上資源模型構(gòu)建
3.3 設(shè)計(jì)空間探索
4 實(shí)驗(yàn)評估
4.1 實(shí)驗(yàn)設(shè)置
4.2 編解碼效率增益
4.3 MAC操作資源消耗
4.4 卷積層整體開銷與性能對比分析
4.5 資源配置優(yōu)化與性能對比
5 總 結(jié)