張志超 王 劍 章隆兵 肖俊華
(*計算機體系結構國家重點實驗室(中國科學院計算技術研究所) 北京100190)
(**中國科學院計算技術研究所 北京100190)
(***中國科學院大學 北京100049)
(****中國電子科技集團公司第十五研究所 北京100083)
基于深度學習的卷積神經網(wǎng)絡技術廣泛應用于圖像處理任務中,在大規(guī)模標注的ImageNet 數(shù)據(jù)集上提出的AlexNet[1]、VGG16[2]、ResNet[3]等大規(guī)模深度模型,展現(xiàn)了較高的識別準確率。然而,在少樣本學習應用中,尤其是對新的未知類別分類任務中,需要新的學習模式和方法,包括Matching Nets[4]、Meta Nets[5]、MAML[6]、Prototypical Nets[7]、Relation Net[8]等少樣本學習方法,通過構建多批次的不同類別任務對模型進行訓練,引入支持集作為先驗知識,用以處理未知類別任務的分類,關系網(wǎng)絡[8](Relation Net)相對于其他模型[4-7],在Ominiglot[9]數(shù)據(jù)集和miniImageNet[4]數(shù)據(jù)集上取得了較高的識別準確率。
關系網(wǎng)絡采用淺層卷積塊的設計方式構建了特征提取模塊和關系計算模塊,通常的推理計算方式采用中央處理器(central processing unit,CPU)或者圖形處理器(graphics processing unit,GPU)進行處理[8],使用CPU 處理速度較慢,使用GPU 處理能效不高。關系網(wǎng)絡以及少樣本學習技術[4-8]受限于少量樣本在大模型網(wǎng)絡的過擬合問題,通常采用淺層卷積塊的方式構建特征提取模塊和關系計算模塊,計算復雜度和模型參數(shù)存儲量相對較少,適合基于現(xiàn)場可編程門陣列(field programmable gate array,FPGA)處理的加速方式。
FPGA 由于其協(xié)助通用服務器進行高性能計算在亞馬遜云計算數(shù)據(jù)中心[10]以及百度云計算數(shù)據(jù)中心[11]已經大規(guī)模部署,展現(xiàn)了高效能可重構計算的應用潛力。現(xiàn)有的基于FPGA 的加速處理卷積神經網(wǎng)絡技術大多采用參數(shù)量化[12-15]等方式實現(xiàn)卷積神經網(wǎng)絡計算加速,量化模型加速的方式通常對深度卷積大模型進行訓練微調,而且會降低模型的精度,在淺層網(wǎng)絡的量化加速問題上目前也缺少相關研究?;贔PGA 的浮點模型加速[16-23]采用循環(huán)優(yōu)化、專用計算單元設計等方法,在一些卷積網(wǎng)絡加速上取得了較好的計算效能。
針對關系網(wǎng)絡推理計算的高效能處理需求,在不降低關系網(wǎng)絡推理計算準確率的要求下,采用軟硬件協(xié)同加速的方式解決處理效能問題。對于關系網(wǎng)絡FPGA 片上計算單元設計采用高級綜合(highlevel synthesis,HLS)循環(huán)優(yōu)化、異構多核的方式在提升處理能效的同時提升處理吞吐量。
本文的主要貢獻如下。
(1)提出了一種軟硬件協(xié)同加速關系網(wǎng)絡推理計算的方法,能夠保持關系網(wǎng)絡在實際應用中推理精度的同時,相對于GPU 平臺處理達到較高的處理速度與處理效能。
(2)提出一種基于HLS 高級綜合的方式優(yōu)化卷積神經網(wǎng)絡的卷積、池化以及全連接計算,通過設置不同的循環(huán)展開粒度,提升計算模塊的并行度。
(3)提出了一種基于多核互聯(lián)的加速器設計方法,避免由于單層卷積核過大造成的FPGA 大規(guī)模資源綜合的時序收斂問題,從多核的角度提升了加速器的計算吞吐量。
典型的關系網(wǎng)絡推理輸入為支持集、測試圖片,輸出為關系分數(shù),由多個支持集的關系分數(shù)最終選出測試圖片的類別,同一張測試圖片在不同的支持集相關的關系計算下會輸出不同的結果。根據(jù)支持集的類別數(shù)(C-Way)、每類支持集的數(shù)量(K-Shot),可以構成不同的C-Way K-Shot 推理任務。關系網(wǎng)絡推理計算包括兩個模塊的卷積計算部分,分別是特征提取模塊和關系計算模塊,主要由卷積計算、最大池化計算以及全連接計算組成。特征提取模塊用于支持集和測試圖片的特征提取,對于C-Way KShot 模式的支持集特征提取,K為1 時,輸出為單張圖片的卷積輸出特征圖;K大于1 時,則是多張圖片的卷積輸出特征對應元素累加值。經過特征提取模塊提取了支持集特征和測試圖片特征后,測試圖片特征與支持集特征拼接起來構成輸入特征圖送入關系計算模塊,分別計算特征的相似度為輸出值,對于C-Way 的特征值,選取分數(shù)最大的作為該測試圖片的類別輸出。具體的關系網(wǎng)絡推理計算流程如圖1所示。
圖1 關系網(wǎng)絡推理計算流程
關系網(wǎng)絡的推理計算中存在測試圖片與多批次支持集之間的關系計算需求,關系分數(shù)的準確率以及置信度依賴于支持集數(shù)量的大小。多批次的支持集關系計算引入了非常大的計算、存儲開銷,基于通用的CPU、GPU 處理的關系網(wǎng)絡推理計算速度慢、能耗較高,需要設計一個高效能的推理計算加速器來提升關系網(wǎng)絡推理計算的效能。
針對關系網(wǎng)絡推理計算速度慢、能耗高的問題,本文采用軟硬件協(xié)同加速計算的方式提升處理速度與處理效能。通過CPU 或者GPU 提取可復用的支持集特征供推理計算使用,降低計算開銷;采用HLS循環(huán)優(yōu)化設計的特征提取模塊以及關系計算模塊,提升關系網(wǎng)絡推理計算的速度與效能;采用異構多核的設計方式綜合利用多核的處理能力進一步提升關系網(wǎng)絡推理計算速度。
基于關系網(wǎng)絡的C-Way K-Shot 分類推理任務采用X86/GPU 平臺與FPGA 平臺協(xié)同計算的方式進行加速計算。X86/GPU 平臺用于支持集的特征提取,FPGA 平臺用于測試圖片的特征提取以及支持集特征下的關系計算。具體的基于軟硬件協(xié)同加速處理的關系網(wǎng)絡計算流程如圖2 所示。
圖2 基于軟硬件協(xié)同加速處理的關系網(wǎng)絡計算流程
通常一個關系網(wǎng)絡針對一個任務數(shù)據(jù)集訓練后,可以用于圖像分類,甚至對未學習類別的圖像分類。圖像分類的關鍵是依賴于支持集的特征作為關系計算的判據(jù)輸入,不同的支持集會對測試圖片的分類結果造成影響,越多的支持集越有助于待測圖片的分類準確率提升。
支持集一般是由專家標注的標準數(shù)據(jù)集,其分類標簽是固定的,支持集特征可以利用X86 或者GPU 平臺提前計算出,支持集特征構成支持集特征池,便于后續(xù)計算使用,同時節(jié)省計算時間與能耗。對于不同的C-Way K-Shot 任務,可以構建不同的KShot 特征池,在Omniglot 數(shù)據(jù)集下K為1、5 和20,在miniImageNet 數(shù)據(jù)集下,K為1 和5。
FPGA 計算流程采用離線支持集特征直接緩存到動態(tài)隨機存取存儲器(dynamic random access memory,DRAM)的方式節(jié)約支持集特征的計算時間與能耗,在片上配置特征提取模塊和關系計算模塊,根據(jù)計算速度的要求和片上資源的約束,構建不同大小的計算模塊,多個計算模塊配置成異構多核的方式協(xié)同加速,進一步提升推理計算能力。
關系網(wǎng)絡采用多個卷積塊、最大池化層以及全連接層構成特征提取模塊和關系計算模塊。本部分采用基于HLS 的優(yōu)化手段對卷積、池化、全連接的計算循環(huán)進行展開優(yōu)化,增加計算模塊的并行處理能力,從而提升計算模塊的吞吐量。對于特征提取模塊和關系計算模塊的多層計算采用數(shù)據(jù)流的優(yōu)化方式構成一個計算單元,簡化計算模塊的核外調度處理,使得輸入為圖像或者特征圖,輸出為特征圖或者關系計算分數(shù)。以下闡述卷積、池化以及全連接層的關鍵設計部分。
(1)卷積乘累加計算
卷積乘累加計算完成輸入特征圖與權重數(shù)據(jù)的卷積乘累加計算。卷積乘累加模塊的計算輸入為輸入特征圖,維度為IH × IW × IC,其中IH為輸入特征圖高度,IW為輸入特征圖寬度,IC為輸入特征圖通道數(shù);以及權重數(shù)據(jù),維度為OC × K2× IC,其中OC為輸出特征圖通道數(shù),K為卷積核大小。輸出為輸出特征圖,維度為OH × OW × OC,其中OH為輸出特征圖高度,OW為輸出特征圖寬度,OC為輸出特征圖通道數(shù)。
卷積乘累加計算模塊包含多個處理單元(process element,PE),每個神經元內部按照單指令多數(shù)據(jù)(single instruction multiple data,SIMD)進行并行計算設計。輸入特征圖調度為P × S寬度的數(shù)據(jù),其中P為PE 的個數(shù)、S為SIMD 的個數(shù)。每個PE 計算的輸出為一個神經元的計算輸出,PE 內部采取S個計算單元并行計算進一步提升并行數(shù),S個相關的數(shù)據(jù)完成神經元內部的乘累加計算。卷積的權重調度為P × S寬度的數(shù)據(jù),對應相應的特征圖輸入維度。具體的卷積乘累加計算如算法1 所示,具有5 重循環(huán),其中針對P和S并行展開兩重循環(huán),對應的并行數(shù)為P × S,每個卷積層可以根據(jù)計算量的大小以及前后層的計算輸入輸出速度進行單獨的PE 和SIMD 配置,在提升處理速度的同時盡可能節(jié)約片上資源數(shù)量。
(2) 全連接乘累加計算
全連接乘累加計算完成輸入特征圖以及權重數(shù)據(jù)的全連接計算,輸出為輸出特征圖。全連接計算模塊的輸入特征圖、輸出特征圖跟卷積計算模塊保持一致,均為H ×W ×C的數(shù)據(jù)維度,其中H為特征圖的高度、W為特征圖的寬度、C為特征圖的通道數(shù)。全連接計算可以抽象為K=1 的卷積計算,具體的全連接乘累加計算算法如算法2 所示,包含3重循環(huán)。該算法對PE 循環(huán)和SIMD 循環(huán)進行展開,設計為包含P × S并行度處理模塊,每個PE 計算一個全連接神經元的輸出,神經元內部具有S個乘累加單元并行計算。每個全連接層實例可以根據(jù)前后層的輸入輸出速度進行特定的PE、SIMD 數(shù)量配置,在滿足處理的同時,節(jié)約片上資源消耗量。
(3)最大池化計算
最大池化計算完成輸入特征圖的池化計算功能,輸入輸出特征圖與卷積層、全連接層保持一致,偏于多層網(wǎng)絡組合為數(shù)據(jù)流調度的計算單元。最大池化計算算法如算法3 所示,包含6 重循環(huán),只對最內層循環(huán)展開,展開數(shù)為P,即并行度為P,每個池化層根據(jù)計算需要單獨配置。其中Pool_Size為池化大小,max 為選取最大值。輸入特征圖In 的數(shù)據(jù)經過輸入調度滿足偽代碼6 重循環(huán)的計算要求。
關系網(wǎng)絡的構建由基本的卷積塊組成,卷積塊由3 ×3 的卷積、BatchNorm 和Relu 計算模塊組成,卷積塊的輸出為64 個神經元。特征提取模塊由4個卷積塊和2 個最大池化計算組成,關系計算由2個卷積塊、2 個最大池化計算以及2 個全連接計算組成。全連接1 的維度為H×8,全連接2 的維度為8 ×1,最終輸出為關系分數(shù)。具體的關系網(wǎng)絡結構如圖3 所示。對于Omniglot 和miniImageNet 2 個不同大小的數(shù)據(jù)集,其輸入圖片維度分別為28 ×28 ×1 和84 ×84 ×3,全連接中的H分別為64 和576。由于2 個數(shù)據(jù)集輸入大小以及內部配置的差異,導致具體的各個模塊計算量也不同,因此針對Omniglot 數(shù)據(jù)集和miniImageNet 數(shù)據(jù)集分別設計不同的加速器進行推理加速。
圖3 關系網(wǎng)絡結構
Omniglot 28 片上多核設計如圖4 所示,包含控制接口、AXI(advanced extensible interface) 互聯(lián)、DRAM 以及計算模塊。計算模塊包括特征提取模塊以及4 個關系計算模塊??刂平涌谕瓿芍鳈C的控制指令傳輸、數(shù)據(jù)傳輸功能,對具體的關系計算和特征提取模塊進行控制。多個計算模塊共享使用一個DRAM 的4 GB 內存空間,多個計算模塊可以同時并行運行,利用多核能力提供更高的運算吞吐量。
圖4 Omniglot 28 片上多核互聯(lián)設計
Omniglot 28 加速器配置如表1 所示,為了描述簡便,將特征提取模塊和關系計算模塊的P、S配置放在一個表格進行描述。特征提取模塊包括cnv1至cnv4 部分,關系計算模塊包括cnv5 至fc2 部分。通過設置P和S的大小可以控制每個模塊的并行粒度,進而控制其吞吐量,但是受限于浮點數(shù)據(jù)的32 位寬度和P、S帶來的大線寬、大規(guī)模計算矩陣導致其在Vivado 綜合時序難以收斂,故采用多核的方式進一步利用資源提升吞吐量。Omniglot 28加速器的特征提取模塊設計速度為2198.39 fps,關系計算模塊設計速度為7430.56 fps,相關吞吐量數(shù)據(jù)是在214 MHz 主頻下估算得到。
表1 Omniglot 28 加速器配置
miniImageNet 84 片上多核互聯(lián)設計如圖5 所示,包含控制接口、AXI 互聯(lián)、DRAM 以及計算模塊。計算模塊包括1 個特征提取模塊和2 個關系計算模塊。
圖5 miniImageNet 84 片上多核互聯(lián)設計
miniImageNet 84 加速器配置如表2 所示,為了描述簡便,將特征提取模塊和關系計算模塊的P、S配置放在一個表格進行描述。特征提取模塊包括cnv1 至cnv4 部分,關系計算模塊包括cnv5 至fc2 部分。通過設置P和S的大小可以控制每個模塊的并行粒度,進而控制其吞吐量。miniImageNet 84 加速器的特征提取模塊設計速度為221.02 fps,關系計算模塊設計速度為642.78 fps,相關吞吐量數(shù)據(jù)是在214 MHz 主頻下估算得到。
表2 miniImageNet 84 加速器配置
關系網(wǎng)絡加速器的PE、SIMD 配置后,可以進入HLS 進行仿真分析,從而獲得每個模塊的具體資源占用情況。實驗所用HLS 為Vivado_HLS 2019.1版本,通過C 語言綜合獲得具體的加速器資源使用數(shù)據(jù)。使用的FPGA 開發(fā)板卡為VCU 1525 開發(fā)板,板載芯片為VU9P。
(1)基于HLS 的Omniglot 28 關系網(wǎng)絡推理設計分析
通過HLS 對Omniglot 28 加速器進行分析,特征提取模塊資源占用如表3 所示,其中BRAM 為塊隨機存儲器,DSP 為數(shù)字信號處理器,FF 為觸發(fā)器,LUT 為查找表,URAM 為超級隨機存儲器。由表3可知,片上資源占用各部分不超過10%,超級邏輯區(qū)(super logic region,SLR)資源占用各部分不超過31%,其中使用最多的資源為數(shù)字信號處理(digital signal processing,DSP)資源,由于使用的是浮點乘累加設計的加速器,DSP 資源使用相對多些。關系計算模塊資源占用如表4 所示。由表4 可知,片上資源占比不超過7%,SLR 資源占比不超過22%。數(shù)據(jù)表明,設計的Omniglot 28 加速器資源占用量較少,能夠順利地被Vivado 工具綜合實現(xiàn)為FPGA 比特流。
表3 Omniglot 28 特征提取模塊資源占用表
表4 Omniglot 28 關系計算模塊資源占用表
(2)基于HLS 的miniImageNet 84 關系網(wǎng)絡推理設計分析
通過HLS 對miniImageNet 84 加速器進行分析,特征提取模塊資源占用如表5 所示。由表5 可知,片上資源占用各部分不超過10%,SLR 資源占用各部分不超過32%。關系計算模塊資源占用如表6所示,片上資源占比不超過8%,SLR 資源占比不超過24%。數(shù)據(jù)表明,設計的miniImageNet 84 加速器資源占用量較少,能夠順利地被Vivado 工具綜合實現(xiàn)為FPGA 比特流。
表5 miniImageNet 84 特征提取模塊資源占用表
表6 miniImageNet 84 關系計算模塊資源占用表
實驗使用的Vivado 工具為2019.1 版本,對加速器的綜合實現(xiàn)后獲得資源占用及功耗數(shù)據(jù)。
(1)基于Vivado 綜合的Omniglot 28 加速器資源占用與功耗分析
基于Vivado 的Omniglot 28 加速器資源占用如表7 所示,其中,LUTRAM 為基于查找表的隨機存儲器,IO 為輸入輸出,GT 為千兆位收發(fā)器,BUFG 為一般時鐘緩存,MMCM 為混合模式時鐘管理器,PLL為鎖相環(huán)。由表7 可知,各部分資源占用約40%以下,能夠在VU9P 芯片上綜合加速器處理邏輯。具體的Omniglot 28 加速器功耗信息如表8 所示,片上功耗為15.867 W。
表7 基于Vivado 的Omniglot 28 加速器資源占用表
表8 基于Vivado 的Omniglot 28 加速器功耗分析
(2)基于Vivado 綜合的miniImageNet 84 加速器資源占用與功耗分析
基于Vivado 的miniImageNet 84 加速器資源占用如表9 所示,其中各部分資源占用約30%以下,能夠在VU9P 芯片上綜合加速器處理邏輯。具體的miniImageNet 84 加速器功耗信息如表10 所示,片上功耗為15.359W。
表9 基于Vivado 的miniImageNet 84 加速器資源占用表
表10 基于Vivado 的miniImageNet 84 加速器功耗分析
本文將關系網(wǎng)絡推理加速器的性能與之前的FPGA 加速浮點卷積神經網(wǎng)絡相關工作對比,具體結果如表11 所示。其中,文獻[18,20]的工作采用了基于硬核浮點DSP 的Intel Arria 10 器件,吞吐量較高。除了采用浮點硬核加速的相關工作,本文提出算法的運算吞吐量達到了最高值,分別為Omniglot 28 加速器為147.79 GFlops,miniImageNet 84 加速器為99.89 GFlops;運算效能也達到了最高值,分別為9.31 和8.08 GFlops/W。實驗結果表明,本文提出的基于HLS 循環(huán)展開優(yōu)化的方法取得了較高的加速計算效能。
表11 FPGA 浮點加速卷積網(wǎng)絡相關工作對比
在GPU 平臺上對關系網(wǎng)絡推理進行了性能測試,實驗硬件配置為E5-2650-v4 CPU 以及Nvidia Titan Xp GPU,軟件配置為Ubuntu14.04,Cuda 版本為9.0.176,Python 版本為2.7,Pytorch 版本為0.3?;贕PU 平臺和FPGA 平臺對關系網(wǎng)絡的推理效能進行對比分析,測試數(shù)據(jù)集包括Omniglot 數(shù)據(jù)集和miniImageNet 數(shù)據(jù)集,分別對相應的加速器進行吞吐測試。原始的關系網(wǎng)絡測試代碼用的是多批處理進行測試,批次大小為2500,每批次包含多個測試圖片,用以復用支持集特征減少計算時間,具體的多批次對比測試結果如圖6 所示。在Omniglot 數(shù)據(jù)集上實現(xiàn)了5-Way K-Shot 任務2198 fps 的吞吐量,20-Way K-Shot 任務1473 fps 的吞吐量,K為1 和5。在miniImageNet 數(shù)據(jù)集上實現(xiàn)了5-Way K-Shot 任務220 fps的吞吐量,其中K為1 和5。數(shù)據(jù)表明,多批次的吞吐量測試,FPGA 平臺優(yōu)于GPU 平臺。
圖6 多批次測試結果對比
考慮推理任務一般為小批次測試,本文進行了單批次吞吐量實驗,具體結果如圖7 所示。在Omniglot 數(shù)據(jù)集上實現(xiàn)了5-Way 1-Shot 任務1779 fps的吞吐量,5-Way 5-Shot 任務2101 fps 的吞吐量,20-Way 1-Shot 任務2075 fps 的吞吐量,20-Way 5-Shot任務1482 fps 的吞吐量,K為1 和5。在miniImageNet 數(shù)據(jù)集上實現(xiàn)了5-Way K-Shot 任務220 fps的吞吐量,其中K為1 和5。單批次的實驗GPU 和FPGA 吞吐量性能都略有下降,較小的批次數(shù)據(jù)導致處理器的流水線調度的開銷占比偏大,導致了處理效率的低下,但是FPGA 針對流處理進行了優(yōu)化,其單批次吞吐量性能優(yōu)于GPU 的單批次性能。
圖7 單批次測試結果對比
根據(jù)實驗數(shù)據(jù),本文對關系網(wǎng)絡實現(xiàn)的兩個加速器Omniglot 28 和miniImageNet 84 與GPU 平臺進行了功耗以及加速比分析,具體結果如表12 所示。GPU 平臺功耗較高,約為150 W,FPGA 平臺的Omniglot 28 加速器功耗為15.867 W,多批次加速比為GPU 的1.4~5.24 倍,單批次加速比為GPU 的2.5~17.2 倍;FPGA 平臺的miniImageNet 84 加速器功耗為12.359 W,多批次加速比為GPU 的1.5~2.0倍,單批次加速比為GPU 的3.1~3.4 倍。結果表明,相對GPU 平臺的關系網(wǎng)絡推理過程,FPGA 加速器達到了低功耗高能效的預期效果,對于小批量的數(shù)據(jù)集FPGA 加速器比GPU 加速器更有性能功耗優(yōu)勢。
本文提出的基于軟硬件協(xié)同加速的關系網(wǎng)絡推理優(yōu)化方法,充分利用了關系網(wǎng)絡淺層卷積設計模式帶來的計算與存儲優(yōu)勢,通過對卷積計算的HLS循環(huán)優(yōu)化、異構多核協(xié)同處理以及GPU 預處理支持集特征等方法,降低了軟硬件協(xié)同開發(fā)的耦合度,達到了高效能的關系網(wǎng)絡推理計算的目的,同時保持了原有模型的準確率。隨著深度學習技術的發(fā)展,越來越需要揭開深度學習的黑盒面紗,提升模型的可解釋性,降低應用的難度,在少樣本學習、元學習以及可解釋性學習等方面開展更深入的研究。在研究高精度、少樣本適用、可解釋的識別算法的同時,體系結構研究者可以跟進研究相關算法的計算效能問題,進一步針對新的少樣本學習、元學習等技術展開相關的效能計算研究。