999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

SAF-CNN:面向嵌入式FPGA 的卷積神經網絡稀疏化加速框架

2023-05-22 11:59:36謝坤鵬儀德智劉義情赫鑫宇冶1
計算機研究與發展 2023年5期
關鍵詞:模型

謝坤鵬 儀德智 劉義情 劉 航 赫鑫宇 龔 成 盧 冶1,,5

1(南開大學計算機學院 天津 300350)

2(南開大學網絡空間安全學院 天津 300350)

3(南開大學軟件學院 天津 300350)

4(天津市網絡與數據安全技術重點實驗室(南開大學)天津 300350)

5(處理器芯片全國重點實驗室(中國科學院計算技術研究所)北京 100190)

隨著邊緣智能的發展,將深度神經網絡部署在邊緣低功耗設備來解決實際問題的需求愈加迫切[1].卷積神經網絡(convolutional neural network,CNN)是典型的深度神經網絡,在目標檢測、圖像分類和語義分析等領域廣泛應用[2-4].然而,由于CNN 模型計算量龐大通常在GB 數量級[5],而且CNN 中主要計算類型與計算量集中在卷積操作[6],其大量的乘累加計算與龐大的模型參數量對資源受限的邊緣智能設備的模型部署帶來了嚴峻挑戰.

現場可編程門陣列(field programmable gate array,FPGA)憑借其靈活的設計模式和高效能優勢,成為邊緣智能領域部署深度學習各類模型及應用的理想平臺[7-9].然而,各類FPGA 平臺資源十分有限.因此,以往FPGA 加速器設計時,針對深度神經網絡模型計算量及參數量龐大的問題,主要通過2 類方法來解決[10]:一類是通過神經網絡壓縮(如模型量化和模型剪枝),來減少模型的參數并降低計算復雜度[11-14];另一類是通過改進卷積的計算方式,獲得輕量級的神經網絡模型來降低計算量[15].此外,在部署模型到硬件加速平臺時,期望借助主流的神經網絡推理框架如TensorFlow[16],PyTorch[17]等,以便縮短研發周期、實現快速部署[18].但是,傳統的深度神經網絡加速器設計及框架優化方法在面對資源受限的FPGA 平臺時,以CNN 為例往往存在3 個挑戰:

1)神經網絡模型所包含的算子操作類別愈發多樣,FPGA 平臺需要為多種算子進行獨立的硬件設計,資源消耗代價高昂.例如,MobileNet[19]采用深度可分離卷積來代替傳統卷積操作以降低參數數量和計算復雜度.深度可分離卷積可分為2 種不同的計算方式,即逐通道卷積和逐點卷積[19].逐通道卷積在計算輸出特征圖時只關聯單一通道的輸入特征圖,而逐點卷積關聯所有的輸入特征圖到每個輸出特征圖中.傳統的FPGA 加速器針對這2 種不同的卷積操作分別設計不同的IP 核進行計算加速[20-21].然而,作為邊緣設備的嵌入式FPGA 資源往往受限,無法支撐分別為逐通道卷積和逐點卷積進行單獨的硬件設計.

2)傳統的CNN 加速器設計方案對FPGA 帶寬資源利用不充分、數據交換通信代價高,尤其針對低位寬數據缺乏良好的處理機制.以往的研究工作通常采用切片方法將無法部署于FPGA 的大塊數據的計算分解為多個小塊數據的計算,并通過優化數據交換機制來減少片上存儲與片外存儲之間的通信代價[18,22],以便將模型部署于嵌入式FPGA.這些方法中,經過量化操作后其推理任務所使用的數據通常是低位寬的定點數.然而,在片上與片外數據交換過程中,由于缺少對低位寬數據的有效組織,導致帶寬資源利用不充分、并行讀寫效率低,從而成為制約高效計算的瓶頸.此外,直接封裝多個低位寬數據為單個高位寬數據會降低FPGA 端并行解碼的執行效率.盡管采用獨立分布的硬件資源可以滿足并行解碼的需求,但會造成碎片化的數據存儲方式[23-24],導致需要大量片上存儲資源才能滿足并行解碼需求,資源代價高昂.

3)邊緣智能設備種類繁多且資源受限,嵌入式設備的資源相比于云中心設備是極端匱乏的,而傳統的深度學習推理框架往往針對的是GPU 等資源豐富的目標推理平臺[16],難以對邊緣智能設備提供支持.由于目標設備與推理框架的特性不一致,導致模型部署時經常出現數據格式不匹配、算子描述不一致、計算流程定義各異等諸多無法規避的技術問題,從而嚴重降低邊緣智能設備的推理性能.盡管推理框架如TensorFlow Lite,Paddle Lite[25]也可支持模型部署到嵌入式平臺,但這些端側框架在部署模型到FPGA 平臺時,其經過量化壓縮后的神經網絡模型的量化算子和非量化算子之間的數據類型描述存在差異,無法調度量化算子到FPGA 上進行加速,進而造成模型計算中存留大量碎片化的計算圖[24].這些大量的計算圖將會導致CPU 與FPGA 這2 種執行環境頻繁切換,而每次執行環境的切換都將引入數據的拷貝和預處理操作,從而降低整體的模型推理性能.

為解決這3 個挑戰,提出一種面向嵌入式FPGA的卷積神經網絡稀疏化加速框架(sparse acceleration framework of convolutional neural network,SAF-CNN),并將SAF-CNN 的FPGA 加速器設計和部署方法與推理框架優化方法實現為組件,在開源深度學習框架Paddle Lite 中進行集成與優化,實現了CNN 的快速部 署.驗證了SAF-CNN 在Intel CycloneV 和Xilinx ZU3EG 這2 種資源受限的FPGA 平臺上的推理性能.實驗結果表明,SAF-CNN 在2 種平臺分別最大可實現76.3GOPS 和474.3GOPS 的計算性能.與多核CPU相比,針對目標檢測模型推理,SAF-CNN 在這2 種平臺可提升推理速度最高達3.5 倍與2.2 倍.其中,SAFCNN 在ZU3EG 平臺上可獲得26.5 fps 的優越性能.

本文的主要貢獻包括3 個方面:

1)設計一種面向嵌入式FPGA 的模型細粒度結構化塊劃分剪枝算法.根據各時鐘周期所需計算的權重元素,將權重矩陣劃分為不同的塊矩陣.在塊矩陣內進行輸入通道維度上的結構化剪枝以獲得稀疏的且規則的權重,從而實現時鐘周期粒度上的負載均衡,避免計算流水線執行被阻塞.

2)提出一種兼容深度可分離卷積的輸入通道維度動態拓展及運行時調度策略.根據硬件資源可支持的計算陣列處理單元數量,動態調整逐通道卷積權重的輸入通道數量,并在運行時調度逐通道卷積與逐點卷積到相同的計算、存儲和數據傳輸模塊,從而實現高效的資源復用.

3)提出一種針對量化CNN 模型的硬件算子類型感知的計算圖重構方法.在量化模型的計算圖中,依據硬件平臺的算子庫快速搜索數據類型存在差異的量化算子.通過引入量化節點,增加硬件子圖中的算子數量,進而減少CPU 與FPGA 執行環境的切換次數,降低不同平臺數據拷貝和轉換的代價.

1 相關工作

面向嵌入式FPGA 的稀疏化CNN 加速框架研究主要涉及CNN 模型壓縮、CNN 加速器設計,以及推理框架聯合優化3 個方面,其中模型壓縮方法主要聚焦于CNN 模型量化與CNN 模型剪枝.

在CNN 模型量化算法方面,其方法可分為低比特量化[11]、線性量化[26]以及非線性量化[27]三類.低比特量化是通過極低的比特位數的量化來提高計算效率,模型權重通常只有1 個或2 個比特位,如二值化神經網絡BNN[11]和三值化神經網絡TWN[12].盡管二值化和三值化的神經網絡可以實現更高的計算效率,但其精度下降嚴重,難以實際應用.多比特的線性量化和非線性量化2 類方法已經被成功用于各類神經網絡模型和推理框架[14].線性量化首先尋找縮放因子,并將其數據縮放到目標范圍,然后采用舍入操作實現閾值化處理.與線性量化相比,非線性量化方法更適合處理神經網絡中符合鐘形分布和長尾數據分布的權值與激活值.對于SAF-CNN,本文權衡模型精度與方法通用性,采用線性方法實現模型量化.

在CNN 模型剪枝方面,通過裁剪CNN 中冗余的參數,可有效減少CNN 的存儲參數并降低計算規模[28].剪枝方法可分為非結構化剪枝和結構化剪枝[29].非結構化剪枝將CNN 中每個獨立的連接看作為可被裁剪的對象,能夠實現理想的剪枝率.但是,其不規則的稀疏性難以適配通用硬件體系結構,通常需要進行硬件定制化設計[30].例如,Song 等人[31]設計了基于高帶寬存儲器的稀疏矩陣向量乘的專用加速器,實現了以內存為中心的處理引擎,可支持稀疏的矩陣向量乘,但其嚴重依賴高帶寬大容量的片上存儲器,難以應用到邊緣計算平臺.結構化剪枝則按照不同的粒度,將CNN 權值劃分為大小不同的結構進行相應裁剪,可在通用硬件體系結構下實現加速,但是剪枝率往往偏低[32].通道剪枝[33]和卷積核剪枝[29]是2 類常用的結構化剪枝方法.通道剪枝直接剪去輸出通道的所有卷積核,生成的稀疏化模型可直接部署于現有神經網絡加速器而無需修改硬件.卷積核剪枝方法則是剪去固定輸入通道的卷積核,其剪枝粒度相比通道剪枝的方法較細.然而,通道剪枝和卷積核剪枝直接修改了模型的結構,其剪枝粒度仍舊難以實現較高的模型稀疏率.細粒度剪枝通過構建專用的剪枝算法實現較高的稀疏率,以此可達到比肩非結構剪枝的效果[34].基于硬件感知的細粒度剪枝方法,例如塊內剪枝[35],既可以緩解硬件效率低的問題,也可以提升模型的稀疏率.對于SAF-CNN,本文權衡模型精度與硬件設計及其執行效率后,設計結構化的細粒度剪枝方法,獲得稀疏化的CNN 模型.

在嵌入式FPGA 加速器設計方面,由于CNN 卷積層的乘累加計算占據了模型中90%左右的計算量[6],因此基于FPGA 的CNN 加速器研究往往從計算和通信2 方面對計算密集的卷積層進行優化[18].Wei等人[22]提出脈動陣列的架構實現卷積層計算,能夠拓展到大規模計算平臺加速卷積計算,大幅度降低推理延遲.Zhang 等人[36]采用多種嵌套循環優化策略加速卷積層處理,如循環流水線、循環展開和循環平鋪.盧冶等人[37]從數據訪問獨立性的角度提出通道并行計算的方案,引入循環切割因子并在通道維度展開循環,利用數據流優化和緩存優化技術加速CNN 的卷積計算.Lu 等人[38]利用Winograd 算法降低卷積層計算復雜度,提高卷積層的處理速度.然而,文獻[36-38]所述工作中的普通卷積計算加速器主要集中在輸入輸出通道維度來并行加速,對于深度可分離卷積的逐通道卷積不能進行計算,導致普通卷積加速器難以適用于深度可分離卷積.對于設計支持深度可分離卷積的加速器,Wu 等人[39]和Ding等人[21]相繼提出逐通道卷積和逐點卷積的融合機制,實現跨層的融合優化,減少中間數據的通信帶寬需求,提升深度可分離卷積的處理性能.然而,這類融合機制的本質仍基于2 個獨立IP 核,而且對模型的結構具有嚴格的約束,只適用于具有1×1 卷積核的逐點卷積.Zhang 等人[40]在處理深度可分離卷積時,對逐通道卷積和逐點卷積也采用2 個IP 核輪流工作.這些工作都未針對逐通道卷積和逐點卷積設計可復用的計算引擎,導致較高的硬件資源代價.Yan 等人[41]針對深度可分離卷積提出可配置加法樹的方案,實現了逐通道卷積和逐點卷積共享計算引擎,但因缺少共享數據傳輸模塊,導致資源消耗偏高.對于加速器通信優化,ShiDianNao[42]將所有的模型參數存儲于片上SRAM 中,消除對DRAM 的訪問,但該設計需要較高存儲資源,并不適用于大規模的CNN 模型.FitNN[43]提出了一種跨層數據流策略來減少特征圖的片外數據傳輸,基于資源受限的邊緣設備實現低推理延遲,然而該策略只支持特定的模型結構,即只由逐通道卷積層、逐點卷積層和池化層共同構成的模型.此外,Cong 等人[6]分析了如何利用高位寬模式傳輸數據,將多個32b 的字打包為512b 的字,實現單周期傳輸多數據,最大化利用帶寬資源.但是,該方法沒有考慮片上存儲資源的分配方式,導致并行編碼和解碼消耗大量存儲資源.因此,本文在設計SAFCNN 時,采用資源復用方法,映射逐通道卷積與逐點卷積到可復用的硬件資源,然后設計通道維度上的并行編解碼方法實現單周期傳輸多數據,在有限硬件資源上實現計算與數據傳輸效率最優.

在深度學習推理框架設計方面,通常會將神經網絡的計算流程以計算圖的方式呈現[44],在實際應用中計算圖被定義為有向圖,其中節點代表相應的計算操作,邊代表數據的流入與流出.深度學習框架中的計算圖主要分為靜態計算圖和動態計算圖[16].在模型開發時采用動態圖編程以獲得更好的編程體驗、更易用的接口、更友好的調試交互機制[17].在模型訓練或者推理部署時,通過添加裝飾器將動態圖代碼轉寫為靜態圖代碼,并在底層自動使用靜態圖執行器運行,獲得更好的模型運行性能[25].主流深度學習訓練框架PyTorch[17]采用動態計算圖,TensorFlow[16]采用靜態計算圖,而PaddlePaddle[25]等新興框架則采用動靜融合的方案.此外,推理框架的優化方法主要聚焦于:算子融合、內存優化、子圖檢測和生成、硬件平臺相關優化、冗余算子刪除、精度轉換等.對于FPGA 加速器與深度學習框架集成實現聯合優化方面,Li 等人[45]集成卷積計算的前向傳播算子和反向傳播算子到TensorFlow 的算子庫中,加速CNN 模型的訓練和推理.FADES[46]提出一種針對TensorFlow Lite 的稀疏矩陣和密集矩陣的硬件處理架構,支持CPU 和FPGA 異構加速器,并能從結構化剪枝中獲益,進一步提升計算性能.Zhang 等人[18]提出Caffeine,通過集成卷積計算和全連接計算的算子到Caffe 框架的算子庫中,來加速CNN 模型的推理.然而,FADES和Caffeine 并未涉及計算圖的優化,在推理過程中需進行數據轉換,執行環境的頻繁切換造成額外的時間代價.TVM[44]和Paddle Lite 的推理后端支持多種定制硬件平臺,如NPU,ARM,x86,MLU 等神經網絡加速器,但是缺少對嵌入式FPGA 的平臺的支持.因此,本文在設計SAF-CNN 時也充分探索基于計算圖的優化方法,既要發揮加速器計算性能高的優勢,又要充分利用深度學習框架的可拓展性和通用性.

2 SAF-CNN 稀疏加速器設計

本節首先介紹SAF-CNN 稀疏化加速器的總體架構,然后著重就數據流設計、稀疏化計算引擎、數據存儲與傳輸、算子資源復用4 個方面,展開加速器設計思路和優化方法的具體論述,并闡明SAF-CNN稀疏加速器的優勢.

2.1 SAF-CNN 稀疏加速器架構

本文SAF-CNN 所設計的FPGA 架構如圖1 所示,包含數據引擎、片上緩存單元、指令單元、計算引擎及調度模塊5 個重要組成部分.

1)數據引擎.負責在片上存儲和片外存儲之間進行數據傳輸.FPGA 加速器在運行過程中讀取片外存儲器中的輸入特征圖和模型權重參數,以及寫出輸出特征圖,都需通過該模塊進行數據傳輸.此外,SAF-CNN 采用高位寬的數據傳輸模式,單個周期傳輸多個字節,借此充分利用帶寬資源.

2)片上緩存單元.片上存儲器負責緩存輸入特征圖、模型權重參數以及輸出特征圖的數據,為計算單元提供并行訪問的高帶寬支撐.SAF-CNN 采用了雙緩沖的存儲結構來實現計算與數據傳輸并行執行.

3)指令單元.在SAF-CNN 框架中,卷積層的配置被轉化為固定格式的指令.FPGA 加速器啟動時,通過指令單元獲取卷積層的具體配置參數,并對硬件資源進行配置.在加速器運行過程中,其他模塊的執行都依賴指令的具體配置.

4)計算引擎.對于從片上存儲器讀取的輸入特征圖和稀疏化模型權重參數,SAF-CNN 的計算引擎通過乘法器和加法器來執行卷積操作,是卷積(conv)模塊的核心.此外,本文在SAF-CNN 中設計了稀疏化的卷積計算模塊,以此利用權重稀疏性來加速卷積層處理.

5)調度模塊.對于深度可分離卷積的逐通道卷積和逐點卷積,SAF-CNN 設計了可復用的計算引擎和數據傳輸模塊,調度模塊根據具體計算類型來決定數據傳輸模塊所要讀寫的數據地址,以及計算模塊的執行流程.

2.2 SAF-CNN 數據流設計

Fig.1 Overall architecture of FPGA sparse accelerator圖 1 FPGA 稀疏化加速器整體架構

由于片上資源受限,SAF-CNN 采用數據分塊策略來完成卷積層的計算.SAF-CNN 的卷積計算數據流處理包含了3 個模塊,分別為加載(load)、卷積(conv)和存儲(store).在卷積操作完整的計算流程中,3 個模塊對應的子任務不斷迭代執行.例如,在每次迭代中,可先累加輸入特征圖與卷積核的卷積結果,得到輸出特征圖.具體來講,首先load 模塊加載必要的輸入特征圖數據和權重數據到片上存儲器中.然后,conv 模塊采用流水并行的稀疏化計算引擎對片上存儲器中的數據執行卷積計算.最后,在完成輸出特征圖的計算后,store 模塊寫回輸出特征圖到片外大容量存儲器中,而后進入到下一個輸出特征圖分塊的計算過程.

數據流的相關處理如圖2 所示,其中oc,oh,ow分別表示輸出特征圖的通道數、行數和列數,ic表示輸入特征圖的通道數,kernel表示卷積核的大小.受片上資源約束,SAF-CNN 每次迭代只計算tn個通道、tr行和所有列的輸出數據.考慮到不同卷積層具有各自不同的行數和列數,SAF-CNN 分配固定大小的片上緩存,tr則根據列的大小進行相應變化,以此保證所有的列可被完整計算.通過這種設計,輸入特征圖和輸出特征圖的數據傳輸方能利用FPGA 的猝發式[14]機制,從而充分利用帶寬資源.

Fig.2 Computing dataflow of convolution圖 2 卷積計算數據流

在conv 模塊執行卷積計算時,計算引擎沿著輸入通道和輸出通道2 個維度同時并行.輸入通道并行因子和輸出通道并行因子分別是tn和tm.計算引擎使用tm個累加樹,通過共享tn個輸入數據來計算得出tm個輸出數據.每個累加樹包含了tn個乘法單元和tn-1 個加法單元,負責計算1 個輸出元素.通過并行tm個累加樹,計算引擎可同時計算并得出tm個輸出元素.此外,由于SAF-CNN 計算引擎采用深度流水線來提升吞吐率,每個周期都能計算出tm個輸出元素.通過設計并行和流水的硬件架構,SAF-CNN 中的conv 模塊可以最大化資源利用率,并提升輸入特征圖分塊的吞吐率.

為減少conv 模塊的數據準備等待時間,SAFCNN 將數據傳輸與計算進行并行,通過預先準備數據,從而掩蓋數據傳輸的時間代價.對輸入特征圖、權重和輸出特征圖,SAF-CNN 采用雙緩沖存儲結構來實現一邊傳輸數據一邊為conv 模塊提供數據.

2.3 稀疏化計算引擎

本節將詳述SAF-CNN 稀疏化計算引擎設計中剪枝方法如何擇取、剪枝規則如何設定、剪枝后的數據如何保存,以及剪枝后如何進行計算.

1)對于剪枝方法的擇取,考慮到conv 模塊中的計算引擎負責執行矩陣向量乘操作,共使用tm×tn個乘法器.具體來講,如圖2 所示,對于一個權重張量W(tm行、tn列)和一個輸入向量I(長度為tn),通過計算可得長度為tm的輸出向量.通過剪去張量W中冗余的權重參數,可以有效地降低乘法器的使用數量.考慮到流水線過程中計算引擎的硬件資源不斷被重復使用,非結構化的稀疏方式會造成不規則的存儲訪問和不均衡的計算負載,導致流水線被阻塞,而結構化的稀疏方式可避免此現象.因此,SAF-CNN稀疏化加速器采用結構化剪枝來保證每次參與計算的權重矩陣具有相同的稀疏率.

2)對于剪枝規則的設定,考慮到張量W的大小是oc×ic,conv 模塊的計算引擎每次計算的塊大小是tm×tn,因此構建基于塊的剪枝方法,可以保證每次計算的塊具有相同的稀疏度.SAF-CNN 的卷積層權重在輸入通道維度所進行的塊內結構化剪枝方法的具體細節如圖3 所示.其中,每行元素的個數是ic,可劃分為ic/tn個塊,每個塊包含tn個元素.在每一塊內,可設置固定的稀疏率,絕對值更小的元素則被置0.此外,所有的行采用相同的稀疏率.針對塊內的每一行,tn個權重元素和tn個輸入數據乘累加得到輸出數據.剪掉tn個權重數據中絕對值更小的項等價于舍棄tn個累加項中更小的項,這種方式可以有效地裁剪掉對輸出數據影響更小的權重.

Fig.3 Block-based structured pruning method along input channel圖 3 輸入通道塊內結構化剪枝方法

3)對于剪枝后的模型數據存儲,為避免0 元素參與計算,SAF-CNN 對權重進行壓縮處理,直接舍去0元素,例如圖3 中的block0 可以壓縮為4 行1 列的矩陣.同時,SAF-CNN 采用列索引方式保存非零元素的位置信息.與CSR/COO[47]等稀疏化數據存儲方式不同,塊內結構化剪枝方法只需要保留列維度的位置信息.考慮到量化后的權重數據為低位寬的定點數,索引數據使用的位寬定義為「lb(tn).因此,權重的非零元素和對應的索引數據可以拼接在一起.由于推理過程中,權重數據是固定不變的,因此壓縮和拼接均在離線條件下完成.

4)對于剪枝后的模型如何計算,SAF-CNN 為充分利用權重矩陣的稀疏性,構建了稀疏化的計算引擎,負責稀疏化的矩陣向量乘操作.稀疏化計算引擎的具體內容如圖1 所示,包含2 個模塊,采樣模塊和乘累加模塊.首先,片上的權重數據分離出非零權重矩陣和索引矩陣.然后,索引矩陣和輸入向量進入到采樣模塊,數據多路選擇器根據索引矩陣從輸入向量中挑選指定的數據得到輸入矩陣,該矩陣每一行的元素是輸入向量的子集.接下來,具有相同元素個數的非零權重矩陣和采樣模塊生成的輸入矩陣進行相乘,得到中間矩陣.最后,累加中間矩陣的每一行,即可得到目標輸出向量.由此,SAF-CNN 計算引擎設計充分利用了權重矩陣每一行具有相同的稀疏度的特點,即包含相同個數的非零元素,并使用相同個數的乘法器和累加器進行計算.由于塊內結構化的剪枝方法可使不同的分塊具有相同的稀疏規則,因此,稀疏化計算引擎能夠高效地處理所有分塊,并且對不同分塊具有相同的處理時間,可保證卷積計算流水線不會阻塞,即SAF-CNN 所設計的稀疏化計算引擎中的乘法器和累加器都將處于忙碌狀態,FPGA 計算資源被高效利用.

2.4 數據存儲與傳輸

數據存儲方式是影響加速器性能的重要因素之一[14].針對片上存儲,SAF-CNN 稀疏化加速器為避免硬件資源訪問端口數目限制而導致的數據訪問沖突,設計了滿足單周期多數據并行訪問需求的存儲方案.對于片外存儲,SAF-CNN 利用數據重組織機制保證數據分布的連續性,來提升數據通信效率.

對于片上存儲,將輸入特征圖、權重和輸出特征圖數據分布在不同的存儲塊(bank)上,可符合計算引擎并行的數據訪問要求.每個bank 具有1 個數據讀寫端口,每個周期內可以執行1 個數據的讀寫操作.計算引擎采用流水并行的硬件架構,每個時鐘周期讀取tn個輸入數據和tm×tn個權重數據,寫入tm個輸出數據.此外,每個時鐘周期讀寫的數據位于不同的通道.SAF-CNN 加速器設計利用高層次綜合HLS工具提供的pragma 優化指令,針對輸入特征圖、權重和輸出特征圖數據,在通道維度上進行分割,使不同的通道數據可被存儲在不同的bank 上,從而滿足數據并行訪問需求.

對于片外存儲,由于數據流的分塊方式,加速器對多維張量的數據訪問具有局部性[14],導致load 模塊和store 模塊每次所訪問的數據在片外存儲器上是碎片化分布的.訪問碎片化的數據將嚴重降低數據傳輸性能.為了最大化提升數據傳輸性能,SAF-CNN利用重組織操作將片外存儲中的碎片化數據進行整理,從而形成連續的數據分布.輸入特征圖張量各個維度的大小是(ic,ih,iw),ic,ih,iw分別是輸入通道、輸入行和輸入列的大小.經過重組織后的輸入特征圖分布為(「ic/tn,ih,iw,tn).模塊load 每次加載的數據大小是tr×iw×tn,這些數據在片外存儲器上是連續分布的.此外,輸出特征圖采用相同的重組織方式.未經處理的權重分布為(oc,ic,k×k).其中,k表示卷積核的大小,則經過重排后的權值分布為(tb,k×k,tm,tn),進一步將稀疏化的權重從tn壓縮為dn,得到(tb,k×k,tm,dn).其中,tb是指權重拷貝的次數,tb=「oc/tm×「ic/tn,每次拷貝的塊大小則為k×k×tm×dn.為了降低數據重組帶來的額外代價,SAF-CNN 對權重進行離線壓縮和重組,如算法1 所示.

算法1.卷積層權重數據壓縮重組算法.

算法1 中,行⑧⑨用來計算目標掩碼數據在原始掩碼矩陣的索引,并賦值給mask,行⑩利用mask從原始權重張量中選擇數據weight,行??將weight和mask拼接到一起并放置在目標權重張量中.此外,加速器將輸出數據寫回片外存儲器時,直接對輸出數據進行重組織.在執行接下來的卷積層時,輸入特征圖已經被處理,不需要額外的重組織過程.通過這種設計,SAF-CNN 只需要對CNN 模型的第1 層和最后1 層卷積層的數據進行重組織,有效地降低數據重組引入的時間代價.

片外存儲器的數據經過重組以后,每次傳輸輸入特征圖數據、權重數據和輸出特征數據都將符合連續分布.由此,可采用猝發式傳輸方法高效地傳輸這些數據.為了進一步利用帶寬資源,本文采用高位寬的傳輸模式,在單個周期內傳輸多個低位寬的數據.通過使用128b 的傳輸位寬,單個周期可以傳輸16 個8b 的數據.經過重組織后,高位寬傳輸的批量數據處于不同的通道.在片上存儲器中,不同通道的數據位于不同的bank.因此,單個周期讀取的多個數據可以并行地寫到多個bank,或者從多個bank 讀數據寫回到片外存儲器中.通過結合重組織方法和高位寬數據傳輸模式,SAF-CNN 可以充分利用硬件平臺提供的帶寬資源.

2.5 資源復用設計

SAF-CNN 針對特殊卷積操作如深度可分離卷積進行了資源復用設計.深度可分離卷積是一類特殊的卷積運算,其有逐通道卷積和逐點卷積2 種卷積方式.逐通道卷積在計算輸出特征圖時,只計算單一通道的輸入特征圖;而逐點卷積則計算所有通道的輸入特征圖并累加到輸出特征圖中.其中,逐點卷積使用的卷積核大小是1×1.考慮到加速器的可拓展性,SAF-CNN 采用通用卷積的配置模式,并靈活支持卷積核尺寸.為節省資源,SAF-CNN 通過資源復用設計,將逐通道卷積和逐點卷積調度到同一數據傳輸模塊和同一計算引擎,2 種卷積計算的主要區別在于是否沿著輸入通道進行累加,其計算方式取決于調度策略.

在SAF-CNN 中,conv 模塊的核心即計算引擎,它采用累加樹規則對tn或者被壓縮后的dn個(如2.4 節所述)輸入通道的乘積進行累加.然而,逐通道卷積并未在輸入通道累加,而是通過計算單一通道的輸入特征圖得到輸出特征圖.因此,SAF-CNN 為了將逐通道卷積映射到計算引擎上,采用了填充策略對逐通道卷積的權重進行預處理,如圖4 所示.其中,在未采用剪枝策略時,tm個輸出通道的權重拓展為tm×tn個通道,這種填充策略要求tm=tn.在填充后,輸出通道和輸入通道序號相同的卷積核包含有效數據,其他通道卷積核為0 元素.如圖4(a)所示,原始的逐通道卷積第i個輸出通道的數據,需要被放置在第i個輸入通道上,以此保證計算引擎在累加tn個輸入通道的數據時,能夠正確計算出逐通道卷積的輸出特征圖.采用剪枝策略后,權重被分為2 個部分,即非零權重和索引信息.SAF-CNN 利用索引信息將逐通道卷積的計算映射到稀疏化的計算引擎,如圖4(b)所示.其中,tm個輸出通道的權重拓展為tm×dn個通道,逐通道卷積的第i個輸出通道數據可被放置在第1 個輸入通道,其他輸入通道的數據置0.同樣,第i個輸出通道的索引矩陣只在第1 個輸入通道上包含有效數據,具體的數據被設置為i.這種填充方式可以保證稀疏化的計算引擎既可以執行稀疏的逐點卷積也可以執行逐通道卷積.此外,針對經過剪枝后的SAF-CNN 稀疏加速器的逐通道卷積權重填充策略,其tm和dn可以靈活取值便于計算引擎的設計.

Fig.4 Weight expanding strategy of depth-wise convolution圖 4 逐通道卷積權重填充策略

除了共享復用計算引擎外,逐通道卷積和逐點卷積還可共享復用數據傳輸模塊.在每次分塊計算過程中,逐通道卷積和逐點卷積需要傳輸的數據塊具有相同的大小和不同的地址偏置.因此,對于2 種不同類型的卷積計算,通過調度策略可以映射到相同的數據傳輸模塊和計算模塊,達到復用效果.調度策略的編程實現示例如圖5 所示.對于逐通道卷積,load,conv,store 這3 個模塊輪流執行.如2.4 節所述,由于片上存儲采用雙緩沖的存儲結構,因此可對3 個模塊進行流水線執行.對于逐點卷積,需要遍歷其輸入通道,并將結果累加到輸出特征圖.因此,load 模塊和conv 模塊所形成的計算流水線需多次執行.當輸入通道計算完畢,store 模塊負責寫回輸出特征圖.

Fig.5 Scheduling strategy of convolution layer圖 5 卷積層調度策略

3 SAF-CNN 推理框架實現

為便于快速部署各類CNN 模型到嵌入式FPGA平臺,本文設計實現了SAF-CNN 推理框架.本節將論述SAF-CNN 推理框架的具體設計及優化方法,重點聚焦于框架推理流程、算子融合方法、模型重構及硬件子圖融合方法.SAF-CNN 通過把加速器的設計思想與推理框架結合并進行聯合優化,彌合了互相割裂的稀疏化加速器與推理框架,從而支持快速部署各類CNN 模型.

3.1 SAF-CNN 框架推理流程

如圖6 所示,利用SAF-CNN 推理框架來部署稀疏化CNN 模型到嵌入式FPGA 的主要環節有3 個方面:

1)首先利用訓練框架(實驗中基于PaddlePaddle)訓練得到精度理想的目標模型.其次,通過訓練框架所集成的QAT[25]等量化方法對模型權重和激活值進行量化,并嵌入2.3 節所設計的結構化剪枝方法到訓練框架中進行模型剪枝,SAF-CNN 通過掩碼方法[28]將冗余的權重參數過濾.然后,通過模型計算圖重構的方法來分析模型的計算圖結構,依據目標硬件平臺的算子庫搜索數據類型不匹配的量化算子如卷積計算、全連接計算等,在該量化算子之前插入符合硬件數據類型的量化節點,并微調CNN 模型保證精度.

2)利用訓練框架導出靜態圖模型后,針對其計算圖進行優化,主要包含算子融合、量化節點卸載到FPGA、生成硬件計算子圖、模型權重預處理.其中,算子融合優化主要針對Conv 層、ReLU 層和BN 層進行融合,并重新計算權重參數、偏置和量化參數.量化節點卸載到FPGA 可與卷積計算融合.在計算圖中,目標硬件支持的具有數據依賴關系的算子所構成的集合稱作子圖[25],將子圖中計算節點的參數配置轉化為硬件支持的參數配置.借此,目標硬件可一次執行多個計算任務,減少執行環境的切換次數.此外,訓練框架導出的模型參數類型通常是浮點數,利用量化參數和剪枝所采用的掩碼方法可對模型參數進行量化和剪枝預處理操作.

Fig.6 Integrating sparse accelerator and deep learning framework圖 6 集成稀疏化加速器和深度學習框架

3)針對CPU-FPGA 異構架構,SAF-CNN 采用混合調度策略進行推理,由逐通道卷積和逐點卷積算子構成的子圖,通過硬件運行時接口SDK 被調度到加速器平臺執行,其他輕量級計算任務保留在CPU端執行.SDK 對CNN 模型的第1 層的輸入特征圖和最后1 層的輸出特征圖進行數據重組織,硬件子圖遍歷,并啟動FPGA 進行計算.

3.2 算子融合

算子融合是計算圖優化的常用方法[44],通過將多個算子融合為單個算子,可避免中間數據的存儲和傳輸帶來的時間消耗,從而降低推理延遲.卷積層、批歸一化(batch normalization,BN)層和激活層是CNN 模型中普遍使用的算子,且這些層的計算可被融合為1 層計算.在引入量化操作后,卷積層和BN層的權重參數與量化參數可以進行融合.經過算子融合后,在第i個輸出通道的輸出特征圖計算定義為

其中output是量化后的輸入特征圖與權重進行卷積計算所得到的定點數張量,經過輸入縮放因子is和權重縮放因子ws的縮放操作后,累加偏置參數bias得到正確的浮點數輸出特征圖output′.此外,BN 層的縮放參數已被融合到ws,偏置參數已被融合到bias.經過激活層后可得到目標輸出特征圖.

在計算圖中,如果當前算子的后繼算子仍為量化算子,那么當前算子的輸出特征圖經過量化后成為后繼算子的輸入特征圖.為了提升硬件執行的效率,SAF-CNN 加速器在寫回輸出特征圖時,預先進行量化操作處理,供后繼算子直接計算.在量化輸出特征圖時,使用下一層的is作為當前層輸出縮放因子,這里以os表示,故SAF-CNN 的具體量化處理為

其中output′是量化后的輸出特征圖,函數clip和round分別代表截斷和取整操作.考慮到os可以與is,ws,bias進行預先處理.因此,結合式(1)(2)可以得到

其中ws′ 和bias′分別 由ws和bias經過預處理得到.加速器將量化后的output′′ 寫回到片外存儲器中,供后繼節點使用.通過這種方式,片上存儲器和片外存儲器之間傳輸的數據都是量化后的低位寬定點數據,可有效地降低帶寬需求.

3.3 模型計算圖重構

經過算子融合后,目標加速器的片上存儲和片外存儲之間傳輸的數據都是低位寬定點數據,只要符合輸入輸出數據類型的卷積算子都能夠被調度到硬件FPGA 平臺進行執行,并且連續的卷積算子可以構成子圖,交由硬件SDK 進行執行.然而,由于數據類型的不匹配,CNN 模型的計算圖中普遍存在量化后的卷積算子無法調度到FPGA 平臺進行加速的情況,主要原因是量化的卷積算子的后繼節點是無法進行量化的算子,例如slice 算子、transpose 算子等.針對這種情況,SAF-CNN 對模型計算圖進行重構,在量化算子后加入量化節點和數據類型轉換算子,來輔助完成量化算子調度到FPGA 平臺進行加速.以下分為2 種情形來說明.

Fig.7 Model reconstruction mechanism of inserting quantization node圖 7 插入量化節點的模型重構機制

1)單路徑情形.CNN 模型計算圖中存在的單路徑情形如圖7(a)所示,量化算子q1的輸入數據類型是量化后的定點數,后繼算子是非量化算子.因此,q1的輸出數據類型是浮點數類型,與加速器所期望的定點數輸出數據類型是不匹配的.在這種情形中,q1算子不能被調度到FPGA 加速器平臺執行.通過插入qnew量化節點,可對q1算子的輸出特征圖進行量化,并傳遞量化參數到q1算子.由此,可實現q1算子的輸入數據類型與輸出數據類型皆符合硬件加速器的設計要求.需要指出的是,qnew節點并不引入額外的計算量,其實現時已被融合到加速器設計中.此外,利用數據類型轉換算子可將低位寬的定點數據恢復為浮點數類型,供后繼的非量化算子使用.

2)多路徑情形.CNN 模型中存在的多路徑情形如圖7(b)所示,q1算子具有多個后繼算子,同時包含量化算子q2,q3和非量化算子nq.與單路徑情形相同,nq后繼算子要求q1節點的輸出特征圖是浮點數類型,導致q1算子無法調度到硬件FPGA 上執行.此時,CNN 模型的計算圖被分割為多個計算子圖,CPU 和FPGA 執行環境的切換將增大推理的延遲.通過插入量化節點可以統一數據類型,并將多個計算子圖合并為更大規模的計算子圖,從而使FPGA 平臺執行更多的算子,進而減少執行環境的切換次數.

3.4 硬件子圖融合

本文將硬件子圖定義為具有相同數據依賴的硬件算子集合,即在CNN 計算圖優化過程中,多個具備數據依賴關系的算子可被封裝成為1 個子圖,該子圖可作為這些算子的集合直接交由硬件FPGA 執行.硬件子圖在CNN 計算圖的優化過程中產生,并在推理過程中執行.因此,各個算子的執行順序以及硬件需要的配置參數應在子圖產生過程中確定,從而避免在運行時引入額外的處理時間.針對CNN 模型的計算圖,本文采用深度優先搜索方式確定算子的執行順序.考慮到CNN 模型拓撲結構的多樣性,硬件子圖可能具有多個輸入和多個輸出.由于輸入數據來自于硬件子圖的外部節點,輸出數據供外部節點使用,因此在硬件子圖的輸入節點前面或輸出節點后面插入數據重組織節點,該節點對外部存儲器中的數據進行重組.

如圖6 所示,硬件SDK 采用指令形式首先對加速器平臺進行配置,然后啟動加速器.該指令包含卷積層的參數配置,如輸入特征圖的通道數、行數和列數以及卷積操作的配置參數.此外,為了減少硬件資源占用,其他相關參數可預先進行配置,如分塊的個數、行數等.針對輸入特征圖、權重和輸出特征圖的數據,采用基地址加偏置的尋址方式進行訪問,該偏置參數也被預置在指令中.

4 實驗評估

本節通過實驗評估SAF-CNN 稀疏化加速器的設計,并將SAF-CNN 推理框架實現方法作為組件嵌入到深度學習推理框架Paddle Lite2.11,驗證SAFCNN 加速器與框架聯合優化的優勢.評估實驗數據集分別采用ImageNet[48]和VOC2012 數據集[49],并部署典型CNN 模型VGG16[2],ResNet18[50],MobileNetV1[19]到資源極端受限的邊緣嵌入式設備CycloneV 和ZU3EG 開發板,探究SAF-CNN 帶來的性能收益.

4.1 實驗設置

1)硬件配置.實驗采用Xilinx ZU3EG SoC FPGA開發板和Intel CycloneV FPGA 開發板作為硬件加速器驗證平臺,如圖8 所示,FPGA 的運行頻率分別設定為333 MHz 和150 MHz.此外,配備工作站運行Vitis 軟件與Quartus 軟件,搭載Intel Xeon Silver 4210 CPU@ 2.20 GHz 和64GB DDR4內存.配備1塊GeForce RTX2080Ti GPU顯卡,用于模型訓練.

Fig.8 Hardware accelerator verification platform圖 8 硬件加速器驗證平臺

2)軟件配置.對于Xilinx FPGA 平臺,實驗采用集成開發環境Vitis2021.1 進行FPGA 加速器設計.通過編程語言C++設計各模塊,并利用Vitis HLS 工具來進行高層次綜合.對于Intel FPGA 平臺,實驗采用集成開發環境Quartus17.1 進行FPGA 加速器設計.通過編程語言C++設計各模塊,并利用Quartus HLS 工具來進行高層次綜合;此外,為進一步驗證SAFCNN 的性能,實驗也采用寄存器傳輸級(registertransfer level,RTL)語言Verilog-2001,在Intel FPGA 平臺上實現并部署.

3)評估指標.面向嵌入式FPGA 的CNN 稀疏化加速框架SAF-CNN 的實驗評估選取4 個定量指標來測量數據并分析性能收益.

①CNN 模型各層處理時延.該指標能夠反映出加速器針對不同配置的卷積層所能實現的計算性能,并對比稀疏CNN 加速器和普通CNN 加速器的處理時延,反映出SAF-CNN 所設計的結構化剪枝方法帶來的性能增益.

②模型精度.為驗證SAF-CNN 稀疏化剪枝算法對模型精度的影響,實驗以VGG16,ResNet18,Mobile-NetV1 和目標檢測模型SSD_MobileNetV1 為例,探究不同的稀疏率條件下模型精度的變化.

③模型端到端推理時延.為驗證SAF-CNN 稀疏化加速器與推理框架實現的聯合優化方法,實驗以包含深度可分離卷積的SSD_MobileNetV1 模型為例,以此驗證SAF-CNN 加速框架的推理性能.

④模型計算圖重構性能增益.為驗證SAF-CNN對重構前模型和重構后模型的推理性能影響,實驗對比2 個模型在相同平臺的推理延遲,并細粒度分析推理框架與加速器各個模塊的執行時間,呈現SAF-CNN 模型計算圖重構的優勢.

4.2 稀疏化卷積處理性能評估

本節對SAF-CNN 稀疏化剪枝算法的有效性進行評估,利用結構化剪枝算法在2 類不同平臺上構建稀疏化加速器,并與非剪枝算法的普通加速器及其他加速器方案進行性能對比.稀疏化加速器SAFCNN_Sparse 設置75%的剪枝率,計算引擎分別采用64,128,256 個乘累加(MAC)單元進行驗證.輸入通道并行因子和輸出通道并行因子配置如表1 所示.其中,輸出通道并行因子和輸入通道并行因子采用的2 種配置分別是16 和32,經過剪枝后輸入通道并行因子被壓縮為4 和8.所對比的非剪枝算法的普通稠密加速器SAF-CNN_Dense 方案則采用64 個MAC 單元,輸入和輸出通道并行因子皆配置為8.此外,SAFCNN 只對逐點卷積進行結構化剪枝,逐通道卷積并沒有引入稀疏性.因為逐通道卷積的輸入通道個數為1,不需要在輸入通道維度進行剪枝.

Table 1 Accelerator MACs Unit Configuration表 1 加速器乘累加單元配置

SAF-CNN 在ImageNet 數據集上進行了圖像分類實 驗,VGG16,ResNet18,MobileNetV1 這3 個模型 在ZU3EG 平臺上的分層處理時延如圖9 所示.其中,MobileNetV1 的第2~14 層是深度可分離卷積層,每個深度可分離卷積層包含1 個逐通道卷積和1 個逐點卷積.VGG16 模型卷積層的通道數和特征圖的尺寸大于ResNet18 和MobileNetV1 模型,因此,VGG16 模型各層消耗的時間高于ResNet18 和MobileNetV1 模型.圖9 中,與非剪枝算法的普通稠密加速器相比,稀疏加速器的處理速度更快.具體來講,在VGG16和ResNet18 模型中,64 個MACs 的稀疏化加速器與稠密加速器相比,可分別獲得2.91 倍和2.86 倍的計算性能提升,十分接近理論上的3 倍性能提升.實際性能提升與理論性能提升的差距在于,加速器對卷積層的處理時延不僅包含計算時間而且包含數據拷貝時間,其中,稀疏化加速器中輸入特征圖和輸出特征圖的數據拷貝時間和稠密加速器相同.盡管SAFCNN 稀疏化加速器設計了計算與數據傳輸流水處理的方案,但是在流水線第1 個分塊和最后1 個分塊的處理過程中,加速器仍然有額外的數據傳輸時間.因此,稀疏化加速器的計算性能相比理論性能略有下降.在MobileNetV1 中,計算引擎針對逐通道卷積的處理包含對填充數據的額外處理,因此其計算性能略低于VGG16 和ResNet18.因為逐通道卷積并沒有引入稀疏性,稀疏化加速器對逐通道卷積的計算性能和稠密加速器相同.因此,稀疏化加速器和稠密加速器相比有2.1 倍的加速比.此外,采用128 個MACs和256 個MACs 可進一步提升稀疏化加速器的性能.與采用64 個MACs 的稀疏化加速器相比,128 個MACs 和256 個MACs 的加速器分別能夠達到1 倍和2.86 倍的性能提升,且分別實現254.9 GOPS 和494.3 GOPS 的計算性能.在CycloneV 平臺上,基于HLS 和RTL 所實現的加速器皆采用64 個MACs 進行乘累加操作,VGG16,ResNet18,MobileNetV1 這3個稀疏化模型的分層處理時延如圖10 所示.與HLS加速器相比,RTL 加速器設計通過更細粒度的控制,能夠實現較低的處理延遲,計算性能提升近1 倍.由各個模型的計算性能可知,稀疏化加速器能夠高效處理普通卷積和深度可分離卷積.

Fig.9 Layer-wise latency of VGG16,ResNet18 and MobileNetV1 on ZU3EG圖 9 ZU3EG 平臺上VGG16,ResNet18,MobileNetV1 的各層延遲

Fig.10 Layer-wise latency of VGG16,ResNet18 and MobileNetV1 on CycloneV圖 10 CycloneV 平臺上VGG16,ResNet18,MobileNetV1 的各層延遲

SAF-CNN 稀疏化加速器與其他同是基于Xilinx的加速器的資源與性能對比如表2 所示,基于CycloneV的SAF-CNN 加速器資源與性能如表3 所示.其中,對比對象主要使用具有較大規模計算資源的Xilinx FPGA 平臺進行驗證,從而取得相對較高的計算性能.SAF-CNN 的加速器平臺雖受限于資源條件,但仍能在CycloneV 平臺分別取得41.8 GOPS 和76.3 GOPS的計算性能,在ZU3EG 平臺分別取得128 GOPS,254.9 GOPS,494.3 GOPS 的計算性能.通過對比每千個LUT 的計算效率、單個DSP 的計算效率及加速器功耗來評估加速器的計算效率,如圖11 所示.其中,ZU3EG_64 表示使用64 個MACs,以此類推.如圖11(a)所示,和其他加速器相比,SAF-CNN 功耗代價更低,CycloneV 僅消耗5 W,ZU3EG 消耗7.5 W 左右.此外,在ZU3EG 平臺上SAF-CNN 采用3 種不同的MACs資源配置進行驗證.針對LUT 效率,SAF-CNN 分別實現5.87 GOPS/kLUT,8.82 GOPS/kLUT,10.82 GOPS/kLUT 的計算性能.針對DSP 效率,SAF-CNN 分別實現0.99 GOPS/DSP,1.27 GOPS/DSP,1.5 GOPS/DSP 的計算性能,遠高于其他加速器.SAF-CNN 基于CycloneV平臺的加速器采用的是28 nm 的工藝,卻仍能運行在150 MHz 的時鐘頻率.在基于HLS 的加速器設計上實現1.63 GOPS/kLUT 和0.62 GOPS/DSP 的計算性能,明顯高于資源豐富的Suda 加速器[51]和Li 加速器[53].SAF-CNN 在基于CycloneV 的RTL 加速器設計上實現了高達3.48 GOPS/kLUT 和1.19 GOPS/DSP 的計算性能.和HLS 加速器相比,RTL 加速器進行更細粒度的任務調度,通過數據加載模塊和計算模塊并行執行來充分隱藏數據傳輸代價,從而實現更高的計算性能.

Table 2 Computing Performance and Resource Utilization Comparison of ZU3EG Accelerators and Other Accelerators表 2 ZU3EG 加速器與其他加速器計算性能與資源占用對比

Table 3 Resource Utilization and Computing Performance of SAF-CNN Accelerator on CycloneV表 3 SAF-CNN 加速器在CycloneV 上的資源占用與計算性能

Fig.11 Power and computing efficiency comparison of accelerators圖 11 加速器功耗和計算效率對比

4.3 模型精度評估

本節探究結構化剪枝方法對模型精度的影響.在結構化剪枝算法中,SAF-CNN 采用2 階段的剪枝方法進行剪枝:第1 階段進行非結構化剪枝以引入稀疏性;第2 階段使用結構化剪枝.同樣,輸入通道并行因子tn和輸出通道并行因子tm都配置為16.此外,VGG16 和ResNet18 模型的稀疏率從10%增加到80%.SSD_MobileNetV1 模型的稀疏率從10%增加到75%.考慮到參數的冗余性,MobileNetV1 骨干網絡的逐點卷積和SSD 頭部網絡的普通卷積層都進行剪枝操作,逐通道卷積不進行剪枝操作.實驗中加速器所設置的可處理輸入通道個數為16,在稀疏率為75%的情況下,經過SAF-CNN 稀疏剪枝方法得到的輸入通道個數減少到4.當塊內輸入通道大于4,則需裁剪為4;對于塊內輸入通道數等于或者小于4 的輸入特征圖,可無需裁減而直接輸入到加速器進行計算.由于3 個模型處理的RGB 圖像數據的輸入通道個數為3,此時可將該圖像數據直接輸入到SAF-CNN 加速器直接計算,而無需對模型的第1 層進行稀疏剪枝,進而不會對第1 個卷積層引入稀疏性,由此保證模型精度,因為模型第1 層的精度往往會直接影響整個模型推理精度.

在量化模型的基礎上,不同稀疏率下的模型準確率損失如圖12 所示.在Cifar100 數據集上,VGG16模型的推理準確率是71.86%,ResNet18 模型的推理準確率是76.45%.從圖12 可知,在VGG16 模型上采用80%的稀疏率時,第2 階段剪枝算法可實現0.08%的準確率提升.當采用小于80%的稀疏率時,ResNet18模型的推理準確率損失小于1%,實現了理想的剪枝結果.為驗證剪枝方法在大規模數據集上的有效性,實驗驗證ResNet18 模型在ImageNet 數據集的剪枝效果,如圖12(c)所示,其中ResNet18 模型在ImageNet數據集的推理準確率是70.59%.當稀疏率小于60%時,剪枝算法會帶來準確率提升,當稀疏率設定為80%時,剪枝算法僅導致0.83%的準確率損失.SSD_Mobile-NetV1 模型在VOC2012 數據集上的推理平均準確率mAP為73.8%,經過QAT 8b 量化算法處理后,mAP為72.59%.其中,當采用50%的稀疏率時,模型的mAP損失小于1%,表明結構化算法的有效性.當設定為75%的稀疏率時,SAF-CNN 結構化剪枝算法引入了3.59%的mAP損失.針對該損失,SSD_MobileNetV1模型采用深度可分離卷積降低模型冗余度,可通過知識蒸餾技術更好地恢復精度.

Fig.12 Accuracy loss of CNN models with different sparsity ratios圖 12 不同稀疏率下CNN 模型的精度損失

4.4 模型端到端推理性能評估

本節實驗通過部署SSD_MobileNetV1 模型并評測其推理時延,來揭示SAF-CNN 加速器與框架實現聯合優化所帶來的性能增益.實驗采用8b 的量化方法以及75%的稀疏率,并在Intel FPGA 和Xilinx FPGA 這2 種平臺分別部署了SAF-CNN 稀疏化加速框架.此外,將SAF-CNN 與針對深度可分離卷積定制的DPU 加速器[20]進行對比.

SAF-CNN 加速器和DPU 加速器的運行頻率,以及硬件資源使用量如表3 和表4 所示.當聯合深度學習框架時,SAF-CNN 在ZU3EG 平臺上實現數據重組功能,會導致資源使用量略有提升.CycloneV 運行時鐘頻率為150 MHz,DPU 和ZU3EG 則基于16 nm 工藝,可運行在更高的時鐘頻率.和DPU 相比,SAFCNN 加速器可使用更少的硬件資源,尤其是乘法器DSP,這主要得益于SAF-CNN 設計了結構化剪枝算法.表5 展示了各個平臺上的SSD_MobileNetV1 加速器推理性能對比,CPU0 和CPU1 分別是采用ARMV7架構的2 核處理器和ARMV8 架構的4 核處理器.在加速器與框架結合的方案中,所有的卷積層都調度到FPGA 執行,其他算子仍然在CPU 上執行.在CycloneV 平臺上采用HLS 設計時,SAF-CNN 稀疏化異構加速器和CPU 相比能夠獲得1.4 倍的性能提升,采用RTL 實現的加速器則能夠獲得3.5 倍的性能提升.在ZU3EG 平臺上采用HLS 的SAF-CNN 異構加速器,使用64 MACs,128 MACs,256 MACs 分別能夠獲得1.8 倍、2.1 倍和2.2 倍的性能提升.DPU 憑借自身高運行頻率和豐富的資源量分別達到了31 fps 和124.3 fps 的推理性能.其中DPU_L 不僅對深度可分離卷積算子實現加速,而且包含了SSD_MobileNetV1中其他大量的輕量級算子,從而達到了124.3 fps 的推理性能.但為了公平對比,本文比較了單位DSP 上的SAF-CNN 和DPU 的處理性能.SAF-CNN 在CycloneV平臺上,采用RTL 實現0.156 fps/DSP 的計算性能,在ZU3EG 平臺上采用64 個MACs 能夠實現0.147 fps/DSP的計算性能,高于DPU_S 的0.146 fps/DSP 的計算性能.說明SAF-CNN 的設計能夠在單位硬件資源上實現較高的計算能力,該方法如應用在資源豐富的FPGA 平臺將獲得更高性能.

Table 4 Hardware Configuration Comparison of Accelerators表 4 加速器硬件配置對比

Table 5 Inference Performance Comparison of SSD_MobileNetV1表 5 SSD_MobileNetV1 推理性能對比

4.5 模型計算圖重構性能增益

本節對SAF-CNN 中模型計算圖重構的有效性進行評估,在ZU3EG 平臺分別使用64 個MACS、128 個MACs 和256 個MACs 設計加速器,并對SSD_MobileNetV1 模型重構前和重構后的推理性能進行對比.在SSD_MobileNetV1 中,需要進行模型重構的計算圖結構主要分布在MobileNetV1 骨干網絡和SSD 頭部網絡的連接部分.

經過實測,SAF-CNN 所實現的SSD_MobileNetV1模型,其推理時延的各部分組成與占比數據如表6所示.其中ZU3EG_64 表示使用64 個MACs,以此類推.表6 中FPGA 硬件子圖運行時間包含了調度到FPGA 平臺上的所有卷積層的運行時間,框架處理時延包含輕量級的算子執行時間和未被調度到FPGA的數據類型不匹配的卷積運行時間.模型計算圖重構前,部分數據類型不匹配的卷積算子被調度到CPU 執行,導致所有的卷積層被分成6 個子圖.此外,CPU 端執行18 個卷積層,導致框架處理時延顯著提升.當經過模型計算圖重構后,所有的卷積層都是互連的并且都可被調度到FPGA 進行加速,因此只有1個子圖.由于子圖數目的減少,數據重排的次數也會降低,促使數據重排的時延由5 ms 左右降低到3 ms左右.卷積層都被調度到FPGA 平臺進行加速,使得FPGA 的運行時間分別從27.1 ms 增加到32.1 ms、從17.1 ms 增加到22 ms 和從15.1 ms 增 加20 ms.CPU 端只負責執行輕量級的算子,從而使框架處理時延分別由78.9 ms 降低為14.4 ms、81 ms 降低為14.5 ms和79.5 ms 降低為14.7 ms,充分發揮加速器的計算優勢.當增加MAC 乘累加單元數量時,SSD_MobileNetV1的推理總時延從49.6 ms 降低到37.8 ms,實現了更高的推理速度.然而,以下3 方面制約了SAF-CNN 在該平臺進一步提升性能:1)該平臺資源有限,相比于DPU_L,只能在有限條件下增加計算引擎的并行能力和片上緩存;2)通過增加輸入通道并行因子和輸出通道并行因子來增加MAC 使用個數,會增加逐通道卷積的無效計算量,從而導致深度可分離卷積的計算性能沒有明顯提升;3)SSD_MobileNetV1 模型中包含的其他算子被調度到CPU 上進行執行,該部分算子執行過程約占用14.5 ms,使得整個模型的推理性能受到限制.即使在資源和CPU 性能受限的條件下,SAF-CNN 經過模型計算圖重構優化后,推理總時延分別是49.6 ms,39.6 ms 和37.8 ms,仍能實現重構 前的2.24 倍、2.6 倍 和2.63 倍.由此證 明,SAFCNN 的模型計算圖重構方法可以有效提升SAFCNN 加速器與框架結合的推理性能.

Table 6 Inference Latency Components of SSD_MobileNetV1表 6 SSD_MobileNetV1 推理延遲組成

5 總結

本文提出了一種面向嵌入式FPGA 的稀疏化神經網絡加速框架SAF-CNN,分別從加速器設計與推理框架實現方面進行設計與聯合優化.通過設計稀疏化架構、塊內稀疏剪枝方法、資源復用機制、數據流設計、數據存儲通信等技術實現了SAF-CNN 稀疏化加速器.然后,SAF-CNN 通過設計CNN 量化模型計算圖重構等方法,對推理框架與模型目標加速器進行聯合優化,從而實現快速部署CNN 模型到資源受限的嵌入式FPGA 平臺.實驗結果表明,即使在資源受限的低端FPGA 平臺上,如CycloneV 和ZU3EG,SAF-CNN 仍可實現高達76.3 GOPS 和494.3 GOPS 的計算性能.在目標檢測模型推理中,SAF-CNN 加速器與多核CPU 相比可達到3.5 倍和2.2 倍的推理速度提升,實現26.5 fps 的優越性能,且與同類方案相比,SAF-CNN 的DSP 效率具有明顯優勢.

作者貢獻聲明:謝坤鵬提出算法實現思路,完成實驗并撰寫論文;儀德智負責實驗數據整理和分析;劉義情參與協助完成部分實驗;劉航調研方案和數據分析;赫鑫宇負責論文校對和圖表修正;龔成參與論文校對和實驗數據審查;盧冶提出算法思路、實驗方案,修改與審核全文.

猜你喜歡
模型
一半模型
一種去中心化的域名服務本地化模型
適用于BDS-3 PPP的隨機模型
提煉模型 突破難點
函數模型及應用
p150Glued在帕金森病模型中的表達及分布
函數模型及應用
重要模型『一線三等角』
重尾非線性自回歸模型自加權M-估計的漸近分布
3D打印中的模型分割與打包
主站蜘蛛池模板: 国产专区综合另类日韩一区| 亚洲视频在线青青| 久久午夜夜伦鲁鲁片无码免费| 国产免费怡红院视频| 亚洲综合经典在线一区二区| 国产青青草视频| 国产精品无码AV中文| 国产主播福利在线观看| 71pao成人国产永久免费视频| 国产精品区网红主播在线观看| 手机在线免费毛片| 久久这里只有精品66| 欧美va亚洲va香蕉在线| 99精品视频播放| 鲁鲁鲁爽爽爽在线视频观看| 午夜视频在线观看区二区| 国产黄网站在线观看| 国产综合另类小说色区色噜噜| 91网红精品在线观看| 亚洲国产清纯| 三上悠亚一区二区| 国产一区亚洲一区| 国内精自线i品一区202| 国产精品无码作爱| 四虎国产精品永久一区| 国产成人精品男人的天堂| 91国内视频在线观看| 这里只有精品在线播放| 草逼视频国产| 亚洲中文字幕日产无码2021| 在线免费亚洲无码视频| 国产成人精品综合| 人妻中文字幕无码久久一区| 五月天在线网站| 日韩AV无码免费一二三区| 国产噜噜在线视频观看| 亚洲日韩高清在线亚洲专区| 91九色最新地址| 女人av社区男人的天堂| 成人永久免费A∨一级在线播放| 色欲色欲久久综合网| 欧美中文字幕一区| 亚洲日韩久久综合中文字幕| 91无码人妻精品一区二区蜜桃| 中文字幕乱码二三区免费| 国产美女自慰在线观看| 免费激情网站| 日本一区二区三区精品视频| 亚洲日韩欧美在线观看| 中文字幕亚洲乱码熟女1区2区| 亚洲—日韩aV在线| 中文字幕欧美日韩| 国产va欧美va在线观看| 久久久久国产一级毛片高清板| 在线免费a视频| 天天摸天天操免费播放小视频| 91黄色在线观看| 亚洲欧美极品| h视频在线播放| 国产午夜无码片在线观看网站 | 久久国产精品娇妻素人| 香蕉精品在线| 四虎永久免费在线| 国产成人综合久久精品尤物| 在线播放国产一区| 中文国产成人精品久久一| 国产成人综合久久精品下载| 欧美激情伊人| 亚洲中文无码h在线观看| 亚洲综合精品第一页| 亚洲视频免费在线| av天堂最新版在线| 天天综合天天综合| 欧美三级视频在线播放| 国产男女XX00免费观看| www亚洲精品| 国产剧情国内精品原创| 久久夜色撩人精品国产| 伊人91在线| 人人爱天天做夜夜爽| m男亚洲一区中文字幕| 午夜人性色福利无码视频在线观看|