張旭欣,張 嘉,李新增,金 婕
(上海工程技術(shù)大學 電子電氣工程學院,上海201600)
深度卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)已經(jīng)成為了當前計算機視覺系統(tǒng)中最有前景的圖像分析方法之一。
近 年 來,隨 著Binary-Net、Dorefa-Net、ABC-Net 等[1-3]低精度量化神經(jīng)網(wǎng)絡(luò)的深入研究,越來越多的研究集中于在FPGA 硬件中構(gòu)建定制的加速器結(jié)構(gòu),實現(xiàn)CNN 的加速[4]。 基于FPGA 的低精度量化神經(jīng)網(wǎng)絡(luò)實現(xiàn)主要可分為兩類:流架構(gòu)[5-6]和層架構(gòu)[7-8]。 其中,由于流架構(gòu)實現(xiàn)了流水線化,每個階段都可以獨立處理輸入且可以針對CNN 逐層設(shè)計并優(yōu)化相應(yīng)層的加速運算單元, 因此擁有更高的吞吐率和更低的延遲以及內(nèi)存帶寬,但其邏輯資源等消耗也相當可觀。 因此,現(xiàn)有的基于流架構(gòu)實現(xiàn)的二值神經(jīng)網(wǎng)絡(luò)加速器研究大多是針對32×32 尺度MNIST 數(shù)據(jù)集等小尺度的圖像輸入。 而實際應(yīng)用中更多使用如448×448 尺度的YOLO、224×224 尺度的VGG 等作為骨干網(wǎng)絡(luò),一方面,大尺度輸入的網(wǎng)絡(luò)結(jié)構(gòu)參數(shù)量往往較大(以VGG 為例,其參數(shù)量大約500 MB),高端FPGA 的片上內(nèi)存容量也僅32.1 Mb 左右,這對FPGA 實現(xiàn)CNN 加速將是資源瓶頸。 即使采用低精度量化策略,F(xiàn)PGA 有限的片上內(nèi)存資源仍捉襟見肘。另一方面,雖然各層運算單元可以得到特定優(yōu)化,然而由于網(wǎng)絡(luò)拓撲結(jié)構(gòu)限制,往往各層網(wǎng)絡(luò)很難實現(xiàn)計算周期的匹配,從而造成推斷性能難以進一步提高。針對基于流架構(gòu)的二值卷積神經(jīng)網(wǎng)絡(luò)加速器設(shè)計存在的資源與性能的瓶頸,本文以224×224 尺度的VGG-11 網(wǎng)絡(luò)加速器設(shè)計為例,重點研究了大尺度的二值卷積神經(jīng)網(wǎng)絡(luò)硬件加速器設(shè)計、優(yōu)化及驗證,主要工作如下:
(1)針對大尺度流架構(gòu)的二值VGG 卷積神經(jīng)網(wǎng)絡(luò)加速器設(shè)計存在的資源與性能瓶頸,提出了網(wǎng)絡(luò)模型優(yōu)化和流水線優(yōu)化的方法。
(2)設(shè)計并優(yōu)化了224×224 尺度的基于流架構(gòu)的二值VGG 卷積神經(jīng)網(wǎng)絡(luò)加速器。實驗表明基于FPGA 平臺實現(xiàn)了81%的準確率,219.9 FPS 的識別速度,相較于同類型的加速器識別速度最高提升了33 倍。
二值卷積神經(jīng)網(wǎng)絡(luò)激活與權(quán)值均采用符號函數(shù)進行二值化,如式(1)所示:
其中w 為單精度浮點權(quán)重,wb為二值權(quán)重。 在硬件設(shè)計中若以邏輯0 表示-1,邏輯1 表示1,則有:
(1)乘法運算可簡化為Xnor 運算和PopCount 累加運算[6]。 因此,對于特征圖r 行c 列卷積核大小為(kc,kr)的卷積運算,如式(2)所示:
(2)二值卷積神經(jīng)網(wǎng)絡(luò)的批歸一化與符號激活函數(shù)運算過程如圖1 所示。
圖1 批歸一化與激活
若結(jié)合歸一化與符號激活函數(shù)即y=sign (BN(x)),可得:
其中x 為前一層卷積層輸出,μ、σ 是批量輸入的均值和方差,ε、γ、β 為參數(shù),chin表示輸入通道數(shù)。
綜上所述,二值卷積運算單元(Processing Element,PE)計算流程如下:輸入特征圖與權(quán)值經(jīng)過同或門與累加器進行卷積運算, 再經(jīng)閾值比較器實現(xiàn)批歸一化與激活函數(shù)運算,硬件結(jié)構(gòu)如圖2 所示。
卷積層包含了多通道輸入與多通道輸出。 因此,單層計算引擎通常由PE 陣列構(gòu)成,如圖3 所示,計算引擎從緩沖區(qū)讀入SIMD 通道特征圖,經(jīng)PE 陣列并行計算得到多個輸出到緩沖區(qū)。
基于數(shù)據(jù)流結(jié)構(gòu)的加速器,通過層間流控模塊,逐層將二值卷積計算引擎連接起來,整體結(jié)構(gòu)如圖4 所示,通過調(diào)節(jié)各層SIMD 與PE 參數(shù),可以實現(xiàn)性能與邏輯資源的最優(yōu)化。
圖2 二值卷積運算單元
圖3 二值卷積計算引擎
圖4 數(shù)據(jù)流架構(gòu)
針對二值卷積神經(jīng)網(wǎng)絡(luò)加速器存在的資源瓶頸以及性能瓶頸,需要從網(wǎng)絡(luò)拓撲、流水線運算周期均衡等多方面進行優(yōu)化設(shè)計:
(1)由于硬件資源限制、網(wǎng)絡(luò)結(jié)構(gòu)以及大量的網(wǎng)絡(luò)參數(shù),往往造成片上存儲資源瓶頸,因此需要首先針對網(wǎng)絡(luò)結(jié)構(gòu)進行優(yōu)化。
(2)由于不同網(wǎng)絡(luò)層運算量各不相同,運算所需周期也不同,因此需要針對流水線進行逐層的運算優(yōu)化,平衡每層的運算周期。
原始VGG-11 的網(wǎng)絡(luò)拓撲中的首個全連接Fc1 層參數(shù)量顯著高于其余各層,約占網(wǎng)絡(luò)整體參數(shù)量79%。由于其參數(shù)量過大,既造成了片上內(nèi)存資源瓶頸又導(dǎo)致計算量過大,與其余各層計算周期嚴重不均衡,使流水線阻塞造成性能瓶頸。針對上述問題,對VGG-11 網(wǎng)絡(luò)結(jié)構(gòu)的瓶頸層進行優(yōu)化:
(1)對原始浮點卷積VGG-11 進行二值化,以有效降低內(nèi)存占用以及邏輯資源數(shù)量。
(2)在卷積層與Fc1 層之間添加全局最大池化層,將卷積層輸出特征圖從7×7 池化到1×1。
優(yōu)化后的二值VGG-11 網(wǎng)絡(luò)拓撲如表1 所示,添加全局最大池化層(Global Max Pool)后,F(xiàn)c1 層參數(shù)量降低了約49 倍,同時由于對網(wǎng)絡(luò)進行了二值化,整體網(wǎng)絡(luò)參數(shù)所占內(nèi)存空間從511.3 MB 降低到3.66 MB,因而有效地從網(wǎng)絡(luò)結(jié)構(gòu)層面降低了內(nèi)存資源瓶頸。
表1 二值VGG-11 網(wǎng)絡(luò)拓撲
基于數(shù)據(jù)流架構(gòu)示意圖如圖5 所示,Initiation Interval為兩個任務(wù)間的時間間隔,Latency 為整體任務(wù)完成的延遲。 由于采用數(shù)據(jù)流架構(gòu),網(wǎng)絡(luò)加速器的吞吐率可以采用Fclk/IImax來進行估算。 計算延遲最慢的網(wǎng)絡(luò)層會導(dǎo)致任務(wù)間的時間間隔最大為IImax,從而決定了網(wǎng)絡(luò)的吞吐率。
圖5 流水線時序圖
根據(jù)上述分析可知,消耗時鐘周期數(shù)最多的計算引擎會成為整體性能的瓶頸,從而會造成其他層資源的浪費和性能的下降。因此,針對流水線優(yōu)化,需要針對不同的計算引擎之間進行整體的計算周期均衡,盡可能地保證各層的計算周期相近。
為了有效提高加速器的性能與資源利用率,本文設(shè)計了不同的PE 陣列參數(shù)配置,以驗證不同的PE 和SIMD 配置對分類效率的影響,表2 中給出的計算陣列結(jié) 構(gòu) 參 數(shù),A 是 最 低 速 的 配 置,B、C、D、E 依 次 增 加 了PE 以及SIMD,E 是根據(jù)調(diào)整得到的最好的結(jié)果。
表2 PE 陣列配置
如表3 所示,根據(jù)表2 中SIMD 及PE 參數(shù)所對應(yīng)的各網(wǎng)絡(luò)層計算周期,通過盡可能將各網(wǎng)絡(luò)層運算周期均衡調(diào)整,從而可以在相應(yīng)的資源占用率下實現(xiàn)最大化加速器推斷速率。
表3 運算周期
在Ubuntu16.04 操作系統(tǒng)下,基于Pytorch 深度學習框架訓(xùn)練二值VGG-11 卷積神經(jīng)網(wǎng)絡(luò),實驗基于CIFAR-10數(shù)據(jù)集驗證,將數(shù)據(jù)集圖像尺寸放大到224×224 作為網(wǎng)絡(luò)輸入,數(shù)據(jù)訓(xùn)練利用NVIDIA Quadro P2000 GPU 實現(xiàn)加速。 基于流架構(gòu)二值VGG-11 加速器硬件系統(tǒng)開發(fā)基于ZCU102 開發(fā)板,最終硬件系統(tǒng)實現(xiàn)了81%的識別率,推斷速率、資源占用率等如表4 所示,最高實現(xiàn)了219.9 FPS。
表4 資源利用率對比
通過實驗對比可得出如下結(jié)論:
(1)逐漸增加PE 或SIMD 的數(shù)量能提高深度神經(jīng)網(wǎng)絡(luò)加速器的推斷速率,但會占用更多邏輯資源,反之也可以通過降低推斷速率來換取邏輯資源占用面積的縮減。
(2)比較方案E 和方案D,除Conv1 卷積層外,其余各層均提高了SIMD 和PE 數(shù)量以及縮減了計算周期,然而對比實現(xiàn)結(jié)果,可以發(fā)現(xiàn)邏輯資源占用率有了大幅增長,而推斷速度卻并沒有得到大幅提升。 這驗證了針對于流水線結(jié)構(gòu)的深度卷積神經(jīng)網(wǎng)絡(luò)加速器來說,計算周期延遲最大的計算引擎對網(wǎng)絡(luò)整體性能有較大的影響,在設(shè)計中對各層運算單元計算周期進行均衡尤為重要。
(3)對比FPGA 片上資源LUT、FF 以及BRAM 等資源,片上內(nèi)存數(shù)量是限制進一步提高神經(jīng)網(wǎng)絡(luò)層數(shù)以及提高推斷速度的資源瓶頸。
與國內(nèi)外相關(guān)基于FPGA 的VGG 網(wǎng)絡(luò)加速器實現(xiàn)進行比較,如表5 所示。通過優(yōu)化設(shè)計,實現(xiàn)了相較于其他VGG 加速器最高33 倍推斷加速,相比基于層架構(gòu)的同類型二值VGG 網(wǎng)絡(luò)加速器[8]提高了7 倍。
表5 基于FPGA 的VGG 加速器對比
本文通過從網(wǎng)絡(luò)結(jié)構(gòu)、流水線均衡等多方面優(yōu)化設(shè)計,實現(xiàn)了輸入尺度更大的二值VGG-11 卷積神經(jīng)網(wǎng)絡(luò)加速器,并驗證了優(yōu)化方法的有效性,為更大尺度、更深層次的卷積神經(jīng)網(wǎng)絡(luò)加速器提供了設(shè)計優(yōu)化思路。