摘 要:針對卷積神經(jīng)網(wǎng)絡(luò)(CNN)模型中大量卷積操作,導(dǎo)致網(wǎng)絡(luò)規(guī)模大幅增加,從而無法部署到嵌入式硬件平臺,以及不同粒度數(shù)據(jù)與底層硬件結(jié)構(gòu)不協(xié)調(diào)導(dǎo)致計算效率低的問題,基于項目組開發(fā)的可重構(gòu)陣列處理器,面向支持多種位寬的運算單元,通過軟硬件協(xié)同和可重構(gòu)計算方法,采用KL(Kullback-Leibler)散度自定義量化閾值和隨機取整進行截斷處理的方式,尋找參數(shù)定長的最佳基點位置,設(shè)計支持多種計算粒度并行操作的指令及其卷積映射方案,并以此實現(xiàn)三種不同位寬的動態(tài)數(shù)據(jù)量化。實驗結(jié)果表明,將權(quán)值與特征圖分別量化到8 bit可以在準確率損失2%的情況下將模型壓縮為原來的50%左右;將測試圖像量化到三種位寬下進行硬件測試的加速比分別達到1.012、1.273和1.556,最高可縮短35.7%的執(zhí)行時間和降低56.2%的訪存次數(shù),同時僅帶來不足1%的相對誤差,說明該方法可以在三種量化位寬下實現(xiàn)高效率的神經(jīng)網(wǎng)絡(luò)計算,進而達到硬件加速和模型壓縮的目的。
關(guān)鍵詞:卷積神經(jīng)網(wǎng)絡(luò); 數(shù)據(jù)量化; 可重構(gòu)結(jié)構(gòu); 并行映射; 加速比
中圖分類號:TP301文獻標志碼: A文章編號:1001-3695(2024)04-017-1070-07
doi:10.19734/j.issn.1001-3695.2023.07.0378
CNN data quantization method based on reconfigurable array
Zhu Jiayang Jiang Linb, Li Yuanchengb, Song Jiac, Liu Shuaia
Abstract:Convolution operations lead to a significant increase in the network size, which makes CNN models difficult to deploy to the embedded hardware platform, and different granularity data is not coordinated with the underlying hardware structure, which leads to low computing efficiency. Based on the reconfigurable array with the computing units supporting multiple bit widths, through software hardware cooperation and reconfigurable computing methods, this paper defined the quantization threshold using KL divergence and random integer method, proposed a strategy for finding the best basis point, designed an instruction set and a parallel mapping scheme supporting multiple bit widths to realize three distinct bit widths in data quantization. The results show the quantization scheme with 8 bit weight and feature map can compress model parameter quantity to about 50% with 2% accuracy loss. The acceleration ratios of quantifying the test images to three different bit widths reach 1.012, 1.273, and 1.556, respectively, which can shorten the execution time by up to 35.7% and reduce memory access times by 56.2%, while only bringing less than 1% relative error. This indicates that this method can achieve efficient neural network computation under three quantization bit widths, thereby implementing hardware acceleration and model compression.
Key words: convolutional neural network(CNN); data quantization; reconfigurable structure; parallel mapping; acceleration ratio
0 引言
隨著卷積神經(jīng)網(wǎng)絡(luò)的快速發(fā)展,越來越多的參數(shù)消耗了大量的存儲、帶寬和計算資源。借助GPU加速的CNN應(yīng)用被廣泛地部署在服務(wù)器上,而對于嵌入式平臺,其解決方案仍然過于復(fù)雜,難以滿足現(xiàn)場應(yīng)用需求。目前已有基于ASIC(application specific integrated circuit)或可重構(gòu)平臺(如field programmable gate array,F(xiàn)PGA)的面向混合精度的CNN加速器設(shè)計,采用數(shù)據(jù)量化方法降低位寬至8 bit甚至更低的同時精度損失可以忽略不計,從而顯著提高計算效率。
文獻[1]提出一種Bit Fusion的加速深度神經(jīng)網(wǎng)絡(luò)的位級動態(tài)組合架構(gòu),以動態(tài)融合的方式匹配單個DNN(deep neural network)層的位寬。該設(shè)計能夠?qū)崿F(xiàn)位級微架構(gòu)的組合和靈 活映射,但由于基礎(chǔ)運算單元的處理位寬僅有2 bit,對于非二次冪位寬參數(shù)的處理場景會提高陣列處理器控制單元和數(shù)據(jù)通路設(shè)計的復(fù)雜度,限制其加速性能。文獻[2]設(shè)計加速深度學(xué)習(xí)應(yīng)用的可配置常系數(shù)乘法器,選擇有限的系數(shù)乘以輸入值,得到計算結(jié)果。該方法減少了資源的使用,在特定的系數(shù)下具有最優(yōu)的結(jié)構(gòu),但是只能根據(jù)預(yù)定義的系數(shù)集設(shè)計乘法電路,故通用性受到了限制。文獻[3]將網(wǎng)絡(luò)參數(shù)量化到8 bit的同時,引入了誤差敏感的學(xué)習(xí)率調(diào)節(jié)方法,并且對量化造成的精度損失問題提出了方向自適應(yīng)的梯度階段處理方法,但需要較長的搜索階段才能收斂。文獻[4]基于通用框架FILM-QNN(FPGA for intra-layer,mixed-precision quantized DNNs),提出一種層內(nèi)混合精度量化算法。該算法可以為每層的濾波器分配不同的精度,但過低比特的數(shù)據(jù)量化無法準確地捕捉到原始模型中的細微特征和模式,從而導(dǎo)致模型性能的下降。
針對上述問題,本文面向神經(jīng)網(wǎng)絡(luò)訓(xùn)練和推理過程,聚焦不同粒度CNN計算和訪存特性,采用軟硬協(xié)同的方式實現(xiàn)混合精度數(shù)據(jù)量化。首先,提出一種尋找最佳基點位置與KL散度自定義量化閾值、隨機取整截斷誤差結(jié)合的動態(tài)量化策略。其次在PC端環(huán)境下搭建CNN模型,對其進行訓(xùn)練,得到并提取較好的權(quán)值。在多種量化位寬組合方案下,統(tǒng)計其識別準確率和參數(shù)量。然后在FPGA端搭建可重構(gòu)陣列處理器硬件平臺,利用可重構(gòu)計算方法[5],實現(xiàn)在硬件平臺上通過匯編指令控制推理過程中三種不同位寬的數(shù)據(jù)量化。最后達到加速卷積運算和模型壓縮的目的。整體技術(shù)路線如圖1所示。
1 CNN卷積硬件適配性
卷積神經(jīng)網(wǎng)絡(luò)通常由卷積層、池化層和全連接層等網(wǎng)絡(luò)層組成[6],其中卷積層操作占CNN模型總操作的大部分,時空復(fù)雜度遠高于其他層,計算性能幾乎決定整個卷積神經(jīng)網(wǎng)絡(luò)的性能。以ResNet-34為例,其網(wǎng)絡(luò)結(jié)構(gòu)包含33個卷積層和1個全連接層。因此應(yīng)更加重視對卷積運算的加速。隨著模型的增大,參數(shù)量和計算量也呈指數(shù)級增長,當前大規(guī)模神經(jīng)網(wǎng)絡(luò)模型參數(shù)量普遍達到千萬級甚至上億級別[7]。表1收集了幾種模型參數(shù)量、計算量等信息。
從表1可以看到,隨著算法精度的提升,模型中的參數(shù)越來越多,計算量越來越大,相應(yīng)地對硬件實現(xiàn)的要求也會越來越高。CPU(central processing unit)平臺在并行計算方面存在缺陷,GPU平臺不適用移動設(shè)備環(huán)境,可重構(gòu)平臺在并行計算方面具有優(yōu)勢并兼具靈活性,但內(nèi)部存儲資源仍然非常有限。
表2收集了Xilinx系列的FPGA器件的資源信息,其中Artix、Kintex、Vertix依次是低中高端的FPGA產(chǎn)品,Zynq系列是嵌入式SOC產(chǎn)品??梢钥闯?,主流的FPGA通常僅有幾兆到幾十兆不等的存儲資源[8],有些甚至不能滿足一層卷積層所需存儲容量的需求,常常需要外存(如DDR)進行數(shù)據(jù)的存取,這會涉及到FPGA外接設(shè)備的調(diào)試,從而增大系統(tǒng)功耗和計算延時。
量化方法對于存儲資源的節(jié)省是顯而易見的,低位寬的定點數(shù)能減少內(nèi)存與計算資源的使用[9]。例如,將32 bit的浮點類型數(shù)據(jù)量化到16 bit后,其占用的存儲空間將由4 Byte減少至2 Byte,更進一步量化到8 bit的內(nèi)存占用空間只為原始的25%。由此可見,網(wǎng)絡(luò)的低位寬量化能顯著降低模型對存儲資源的需求,從而在有限的存儲資源上加載更多計算單元[10],提高計算的并行度。
2 量化策略研究
2.1 量化計算模型
量化計算模型采用線性模型對網(wǎng)絡(luò)中的輸入以及權(quán)值進行量化,計算過程如式(1)所示。其中:Xfloat表示真實的浮點值;Xquantized表示量化后的定點值;Xzero_point表示量化零點;Xscale表示量化尺度。
若Xquantized、Xfloat超出各自可表示的最大范圍,則需進行截斷處理。本文采用隨機取整的方法進行截斷處理,既能保證模型性能,又能使用更少的內(nèi)存空間。給定原數(shù)x和其定點表示〈I,F(xiàn)〉(前者表示數(shù)據(jù)定點后的整數(shù)位寬,后者表示小數(shù)位寬),將[x]定義為小于或等于x(=2-F)的最大整數(shù)倍,并采用如下舍入方案,如式(2)所示。其中:p表示概率;Δ表示給定的定點數(shù)格式能夠表示的最小正數(shù)。隨機舍入round(x,〈I,F(xiàn)〉)是以一定概率(與向下取整點的距離成正比)確定向上還是向下取整。這樣設(shè)計的優(yōu)勢是量化后概率分布的期望還是原來的高精度浮點數(shù)X。
2.2 參數(shù)定點化
數(shù)據(jù)類型對硬件設(shè)計的一致性和實現(xiàn)的關(guān)鍵度量指標都有直接的影響。在硬件平臺上實現(xiàn)定點運算單元比浮點運算單元效率高得多[11],因此CNN加速器大多使用定點數(shù)而不是浮點數(shù)。本節(jié)通過對卷積層的權(quán)值和特征圖參數(shù)定點動態(tài)量化,將卷積層的浮點卷積計算轉(zhuǎn)換為高效的定點卷積計算,提高運算速度。圖2是參數(shù)定點動態(tài)量化的示意圖,其計算過程可用式(3)表示。
其中:S表示符號位;B是量化的位寬長度;l是不同卷積層的量化指數(shù)位長度,即階碼;xD為動態(tài)量化后的定點數(shù)。
對于數(shù)據(jù)量化而言,關(guān)鍵在于確定量化后整型數(shù)據(jù)中的小數(shù)點位置,即基點位置階碼l。同等數(shù)據(jù)位寬下,l越大,數(shù)值范圍越小,但精度越高,否則相反。
2.2.1 權(quán)值偏置定點化
CNN模型的權(quán)值大致對稱分布在零點兩側(cè),且不同卷積層的權(quán)值具有顯著的動態(tài)范圍,若將所有層的參數(shù)量化為同一個范圍,會造成較大的精度損失。本節(jié)提出權(quán)值偏置定點策略,試圖在給定位寬的情況下找到每層中的最佳基點位置。這是硬件友好的,因為只需要額外的移位器來對齊數(shù)據(jù)。
其中:xfloat表示在CNN訓(xùn)練中某層權(quán)值參數(shù)的原始浮點值;xD表示在給定階碼l的情況下對xfloat定點后再轉(zhuǎn)換回浮點數(shù)的值。兩者差值最小的情況下得到該層的最佳基點位置。
實現(xiàn)過程如圖3所示。首先使用浮點數(shù)訓(xùn)練網(wǎng)絡(luò),收集每一層特征圖和權(quán)值參數(shù)的統(tǒng)計信息,以獲得其數(shù)值直方圖。然后將每種可能的基點位置應(yīng)用于網(wǎng)絡(luò),以獲得一個定點格式層,并在量化后測試其準確性。最后,在使用貪婪策略對所有層進行量化之后,微調(diào)基點以進一步提高精度。
2.2.2 特征圖參數(shù)定點化
數(shù)據(jù)量化在定點數(shù)與原浮點數(shù)之間建立有效的映射關(guān)系。圖4(a)中映射的邊界是原始數(shù)據(jù)的極值,實驗證明,絕對值極值量化的模型準確度大大降低[12]。本節(jié)采用KL散度自定義閾值T,并以其構(gòu)建映射關(guān)系(圖4(b))。
32-bit浮點數(shù)映射到n-bit定點數(shù)即重新編碼[13],KL量化將浮點數(shù)定點數(shù)抽象成兩個分布,并用閾值|T|來更新。散度可以衡量兩個分布的相似性,值越小分布越相似。如式(5)所示,p[x]和Q[x]是量化前后兩個隨機變量的離散概率分布,x為量化到不同位寬的參數(shù)個數(shù)。式(5)取最小值時,得到閾值T。通過式(6)可以得到每層的量化尺度fl,結(jié)合式(3)可得最佳基點位置l。
3 硬件平臺量化策略研究
3.1 量化位寬選取
考慮硬件資源消耗,本節(jié)針對卷積運算主要是乘加操作且計算流程固定的特點[14],綜合實現(xiàn)乘法器和加法器,并調(diào)整輸入端口位寬,統(tǒng)計不同位寬下乘法器和加法器消耗的LUT數(shù)量,如圖5所示。隨著數(shù)據(jù)位寬的增加,加法器與乘法器所消耗的LUT也在增加,但7 bit位寬以下,資源消耗幾乎不再改變。過低的量化位寬會引起較高的計算誤差,為達到資源與精度的平衡,結(jié)合硬件平臺特點,本文將量化位寬選定在32 bit、16 bit、8 bit三種數(shù)據(jù)寬度。
3.2 可重構(gòu)處理單元設(shè)計
3.2.1 處理器陣列總體結(jié)構(gòu)
圖6為項目組開發(fā)的基于H型傳輸網(wǎng)絡(luò)的可重構(gòu)陣列處理器。主機接口將上位機命令傳輸?shù)饺挚刂破鳎笳邔⒔邮盏男畔⒎譃閿?shù)據(jù)流和指令流,通過H樹網(wǎng)絡(luò)進行調(diào)度并合理分配到每個PE(process element)中。輸入輸出存儲器用于保存計算時的輸入數(shù)據(jù)和輸出結(jié)果。
每組4×4的PE陣列構(gòu)成一個簇,基于分布式共享存儲結(jié)構(gòu),相鄰PE之間通過鄰接互連傳遞數(shù)據(jù)[15],相鄰簇間通過路由方式傳遞數(shù)據(jù)。單個PE被設(shè)計為取指、譯碼、執(zhí)行、寫回的四級流水線結(jié)構(gòu),以及指令存儲(instruction memory,IM)、數(shù)據(jù)存儲(data memory,DM)、指令寄存(instruction register,IR)、寄存器組(RegFile)和鄰接互連控制器等。其中,指令存儲和數(shù)據(jù)存儲的深度均為512,位寬分別是30 bit和32 bit。
取指單元從IM中獲取指令并傳輸?shù)絀R,譯碼單元根據(jù)操作碼和寄存器信息判定指令類型和數(shù)據(jù)來源,并送入執(zhí)行單元。執(zhí)行單元從RegFile或DM中讀取數(shù)據(jù)后執(zhí)行算術(shù)邏輯、分支跳轉(zhuǎn)和粒度劃分等指令,計算完成后將結(jié)果送入寫回單元。寫回單元根據(jù)譯碼得到的目的寄存器地址選擇將數(shù)據(jù)送入寄存器。
該處理器通過可重構(gòu)指令集實現(xiàn)各類應(yīng)用,充分挖掘算法并行度,在可編程性和性能之間保持了平衡。軟件重構(gòu)既能滿足量化動態(tài)位寬的靈活性及速度需求,又能避免專用器件較高的硬件資源消耗,具有較高的靈活性。
3.2.2 卷積單元架構(gòu)設(shè)計
卷積運算加速的硬件設(shè)計重點考慮運算單元的并行性[16]。卷積操作數(shù)據(jù)輸入順序固定,輸出操作相同,可以考慮流水線并行方式執(zhí)行。在嵌入式設(shè)備中完全實現(xiàn)卷積核之間與不同層神經(jīng)網(wǎng)絡(luò)的并行執(zhí)行幾乎是不可能的,本節(jié)針對最常用的3×3卷積核內(nèi)的并行化完成設(shè)計,流水線運算架構(gòu)如圖7所示。W代表核內(nèi)參數(shù),I代表輸入特征圖參數(shù)。卷積核內(nèi)9個參數(shù)和9個輸入特征圖參數(shù)同時進行乘加運算,整體計算量包含9次乘法和8次加法。
3.2.3 乘法處理結(jié)構(gòu)設(shè)計
卷積可以分解為連續(xù)的乘法和加法,其中加法較為簡單,在此不進行贅述。乘法操作為定點數(shù)乘法,當乘法因子放大x倍時,結(jié)果會放大x2倍。為統(tǒng)一計算精度,需要把相乘結(jié)果縮小x倍。以16 bit乘法(MUL-16)為例,計算結(jié)構(gòu)如圖8所示,MUL-32、MUL-8也基于此設(shè)計。與一般的16 bit乘法輸出32 bit結(jié)果不同,該乘法結(jié)構(gòu)截去最高位和低15 bit,輸出16 bit結(jié)果。因為存在截位誤差,所以要對數(shù)據(jù)四舍五入。截位處理模塊Cut_Bit根據(jù)后15 bit數(shù)值進行四舍五入得到截位處理后的進位,并與乘法計算的[30 ∶ 15]位數(shù)字相加,得到乘法計算的輸出。
3.3 粒度配置指令設(shè)計
為了將不同精度的卷積算法高效地映射到可重構(gòu)陣列處理器,本節(jié)采用自頂向下的方法設(shè)計數(shù)據(jù)量化動態(tài)配置指令(表3)及其實現(xiàn)結(jié)構(gòu)(圖9、10),以硬件平臺的并行計算實現(xiàn)不同位寬的靈活配置。
動態(tài)配置指令把計算粒度劃為8 bit、16 bit和32 bit,針對不同粒度提出相應(yīng)的并行處理方法。數(shù)據(jù)組合/拆分命名為COMB/SPL,并行加法/乘法指令命名為PADD/PMUL。每種指令分為三類不同粒度的操作,其數(shù)字代表能夠并行操作的數(shù)據(jù)量。例如,COMB4指令從數(shù)據(jù)存儲器中以RS的值作為首地址依次讀取4個數(shù)據(jù),然后每個數(shù)據(jù)取低8 bit,遵循先讀取先存放的原則依次完成數(shù)據(jù)拼接。SPL4指令把1個32 bit的數(shù)據(jù)分成4個8 bit數(shù)據(jù),從目的寄存器RD的存儲地址開始寫入,每寫入一個數(shù)據(jù)地址加1。當指令中的數(shù)字改變時,意味著操作數(shù)的粒度發(fā)生了變化,即可實現(xiàn)計算粒度的動態(tài)配置。
動態(tài)配置結(jié)構(gòu)基于四級流水線(取指、譯碼、執(zhí)行、寫回)設(shè)計如圖6所示。數(shù)據(jù)組合和數(shù)據(jù)拆分互為逆過程,讀地址從數(shù)據(jù)存儲器讀出數(shù)據(jù)并賦值到信號idmu_data_rdata,使用寄存器完成輸入數(shù)據(jù)和控制信號的暫存。根據(jù)輸入的控制信號wbc_comb1/2/4、wbc_spl1/2/4分別完成COMB、SPL指令的操作。并行乘加模塊中,根據(jù)不同的計算粒度要求,在譯碼級信號opc和寫回級信號wbc的共同作用下,通過多路選擇器執(zhí)行不同位寬的并行計算。
本節(jié)基于陣列處理器實現(xiàn)三種數(shù)據(jù)位寬的靈活配置,以此來展現(xiàn)良好的可重構(gòu)性。位寬配置通過調(diào)整數(shù)據(jù)信號的位寬,提供一種靈活的方式來適應(yīng)不同的計算需求和性能要求??芍貥?gòu)性則提供了動態(tài)配置和重新配置的能力,使位寬配置成為其中一種重要的配置手段。通過位寬配置和可重構(gòu)性的結(jié)合,在不同應(yīng)用需求和算法特性的情況下,可以滿足特定的設(shè)計要求和性能目標。
3.4 可重構(gòu)平臺映射方案設(shè)計
3.4.1 數(shù)據(jù)預(yù)處理
計算模塊通過路由檢索指令接收存儲器中的輸入數(shù)據(jù),并鄰接互連握手傳遞至預(yù)處理模塊,PE01、PE02、PE20握手后開始分配數(shù)據(jù)值。預(yù)處理就是將輸入特征圖數(shù)據(jù)和權(quán)值按照前文設(shè)計的計算粒度配置指令進行分割組合,形成一個新的32 bit數(shù)據(jù),從而實現(xiàn):8 bit計算粒度支持4個數(shù)據(jù)并行計算,16 bit計算粒度支持2個數(shù)據(jù)并行計算,32 bit計算粒度完成1個數(shù)據(jù)的計算,充分發(fā)掘數(shù)據(jù)集并行度。
3.4.2 PE映射
本節(jié)選用3×3卷積核,以適應(yīng)CNN模型中的大多數(shù)層,其余尺寸卷積核可用3×3卷積核替代。同時基于卷積核內(nèi)部并行計算(圖7),給出在可重構(gòu)陣列上的映射關(guān)系,如圖11所示。
首先,將卷積操作分為三組,每組內(nèi)分為1個預(yù)處理PE和3個乘加操作(MAC)PE。其中PE01、PE02、PE20執(zhí)行數(shù)據(jù)預(yù)處理操作,剩余9個PE完成乘加操作,實現(xiàn)三個卷積操作中的1×3向量乘操作。組內(nèi)相鄰PE計算模式相同,采用鄰接互連的蛇形數(shù)據(jù)傳輸方式,所以數(shù)據(jù)傳輸延遲得到了降低,數(shù)據(jù)計算的等待時間變少;其次,組內(nèi)計算結(jié)果送入PE30、PE31、
PE33內(nèi)執(zhí)行加法操作,分組計算完成后,PE30數(shù)據(jù)傳入PE31繼續(xù)進行加法操作;最后,PE31和PE33相加,由PE32輸出計算結(jié)果。在單個簇中,使用16個PE并行完成3次卷積運算操作,PE的利用率達到最高。
4 實驗及結(jié)果分析
4.1 動態(tài)量化訓(xùn)練測試
4.1.1 實驗環(huán)境與數(shù)據(jù)集
在EMnist和Cifar-10數(shù)據(jù)集上,使用LeNet和AlexNet驗證前文的量化方法。EMnist在數(shù)據(jù)集接口上與Mnist保持一致,該數(shù)據(jù)集將大小寫字母組合在一起,有A(a)~Z(z)共26組不同的手寫字母圖片,包括120 000組訓(xùn)練圖像和20 000組測試圖像。Cifar-10數(shù)據(jù)集為3通道的彩色圖片圖像,包括50 000張訓(xùn)練圖像和10 000張測試圖像,大小為32×32,由bird、cat、deer、dog等10組不同類別圖像組成,每個類別圖片6 000張,其中1 000張圖片用于測試。
4.1.2 實驗結(jié)果與分析
將(16,8)表示為權(quán)值數(shù)據(jù)和特征圖數(shù)據(jù),分別量化為16 bit和8 bit,其余位寬情況同理。表4給出了在不同量化方案下模型訓(xùn)練后的識別準確率和參數(shù)量的變化情況,并計算得出其準確率變化和壓縮率。
由表4可知,量化前兩種網(wǎng)絡(luò)的精準度分別為97.17%和96.13%,經(jīng)過模型壓縮后網(wǎng)絡(luò)的精準度最多減少3.36%和2.04%;量化前的模型參數(shù)量分別為247.6 KB和121.9 MB,其壓縮率最大可以達到52.9%和49.7%。由此可得出結(jié)論,在損失一定的訓(xùn)練精度情況下,采用本文設(shè)計的數(shù)據(jù)量化策略在軟件測試中可以有效壓縮模型參數(shù)量。同時本文還發(fā)現(xiàn),權(quán)值的位寬變化對計算結(jié)果的影響更大。特征圖經(jīng)過多次卷積操作后,其特征表示會逐漸被壓縮和抽象,較低的位寬可能對最終的計算結(jié)果產(chǎn)生較小的影響,而權(quán)值的位寬減少會導(dǎo)致模型在學(xué)習(xí)和推理過程中失去一些細節(jié)信息,從而影響模型的性能。因此在量化位寬的選擇上,權(quán)值的位寬一般不小于特征圖位寬。
4.2 可重構(gòu)陣列推理卷積測試
為驗證本文提出的基于并行計算的數(shù)據(jù)量化方法,根據(jù)已訓(xùn)練模型提取出權(quán)值等參數(shù)值,使用卷積算法進行推理測試。首先,利用Questasim對卷積算法基于可重構(gòu)陣列處理器的并行映射方案進行仿真。然后,收集仿真數(shù)據(jù)并使用MATLAB軟件搭載分類器在EMnist數(shù)據(jù)集上進行推理實驗。最后,利用Vivado對映射后的陣列結(jié)構(gòu)進行綜合實現(xiàn)及結(jié)果評估,并基于Xilinx公司的ZYNQ-7000AP系列ZC706評估套件進行FPGA測試。
4.2.1 QuestaSim仿真
為驗證本文方法的可行性及其計算結(jié)果的準確性,本節(jié)基于QuestaSim平臺搭建可重構(gòu)陣列結(jié)構(gòu)進行驗證。將輸入特 征圖數(shù)據(jù)寫入到可重構(gòu)陣列的片外存儲器中,再將翻譯后的卷積算法二進制指令映射到當前簇的指令mif中,主處理器根據(jù)指令信息對PE進行指令下發(fā),完成任務(wù)的動態(tài)調(diào)度,仿真結(jié)果如圖12所示。
從表5可以看出,在使用計算粒度配置指令后,大部分性能指標都得到了改善。其中,訪存次數(shù)減少了1.2%、33.4%和56.2%,輸出結(jié)果的平均相對誤差增加不到1%。單點輸出和全部輸出的加速度比均為1.012、1.273和1.556,其中單點輸出表示輸出一個采樣點所需的時鐘周期,全部輸出表示完成所有采樣點輸出所需的時鐘周期,算法執(zhí)行時間分別減少了1.2%、21.4%、35.7%。
本節(jié)還基于仿真輸出的圖像數(shù)據(jù)及其保存的二進制文件進行推理測試。首先將FPGA端仿真圖像數(shù)據(jù)輸入到MATLAB環(huán)境中,確保正確讀取圖像并將其存儲在適當?shù)淖兞恐?。其次將預(yù)先訓(xùn)練好的LeNet模型加載進MATLAB,同時針對該模型各網(wǎng)絡(luò)層作出必要的裁剪,使其相當于一個分類器。最后,基于EMnist數(shù)據(jù)集完成推理實驗。部分結(jié)果如圖13所示。
本實驗結(jié)果表明,通過匯編指令來實現(xiàn)粒度配置的重構(gòu)思路可以根據(jù)需求調(diào)整位寬,以適應(yīng)不同的計算需求、資源約束和性能要求?;诹6扰渲玫目芍貥?gòu)處理單元可以提高算法的兼容性,并在一定計算誤差允許范圍內(nèi)減少算法的執(zhí)行時間,同時本文設(shè)計的三種位寬的數(shù)據(jù)量化也可以支持常見的推理應(yīng)用。
4.2.2 原型驗證與實時性分析
在Vivado 2018.3中搭建可重構(gòu)陣列處理器平臺,將算法指令寫入處理器的片外存儲器中,對整個結(jié)構(gòu)進行綜合實現(xiàn),添加固有IP核嵌入式邏輯分析儀(integrated logic analyzer,ILA)對卷積結(jié)果進行板級采樣,表6給出了原型系統(tǒng)資源使用情況??芍貥?gòu)陣列處理器配置信息的改變只會改變硬件電路的功能,不會對硬件資源消耗造成影響,所以當可重構(gòu)陣列處理器中PE的數(shù)量保持不變時,硬件資源的使用情況不隨配置信息的改變而變化。得益于可重構(gòu)陣列結(jié)構(gòu)的靈活性優(yōu)勢,8 bit/16 bit/32 bit量化位寬均占用一組4×4的PE陣列便可完成運算,當涉及到具有更高計算復(fù)雜度的算法時,可在該架構(gòu)上對PE陣列擴展。
可重構(gòu)陣列在硬件資源配置為1個簇,即16個PE時,使用的LUT資源為69 088,F(xiàn)F資源為27 385,BRAM資源為136,DSP資源為256。各種資源的占用率均在30%左右,閑置資源為擴展可重構(gòu)陣列處理器的功能和陣列數(shù)量提供了足夠的空間。
電路設(shè)計的實時性與頻率之間存在密切的關(guān)系,具有高頻率的電路系統(tǒng)可以更快地響應(yīng)輸入信號的變化。本節(jié)利用STA(靜態(tài)時序分析)方法求解系統(tǒng)最小延時,求倒得到最大時鐘頻率,結(jié)果如表7所示。
從表7可以看出,整體電路工作頻率為133.5 MHz,最小延時7.490 ns。執(zhí)行模塊承擔并行乘加等計算任務(wù),計算延時最大,頻率最低?;ミB線路延遲等因素通常會導(dǎo)致整體延時大于各模塊的延時之和,但本文設(shè)計并不如此。一方面,本文的流水線架構(gòu)可以將任務(wù)劃分為多個模塊,不同模塊在時鐘的驅(qū)動下依次執(zhí)行各自任務(wù)。每個模塊選擇最短路徑來優(yōu)化流水線各模塊互連,進而分攤?cè)蝿?wù)延遲。另一方面,在邏輯綜合過程中,開發(fā)工具會對電路進行各種優(yōu)化,如邏輯優(yōu)化、時序優(yōu)化和布局優(yōu)化等,以此改善電路的性能和資源利用率。這些優(yōu)化會減小某些模塊的延遲,使整體延遲小于各模塊延遲之和。
4.3 實驗結(jié)果對比
本文方法與國內(nèi)外基于FPGA實現(xiàn)的數(shù)據(jù)量化配置結(jié)構(gòu)對比如表8所示,表中對比了不同器件型號下硬件結(jié)構(gòu)的工作頻率、計算粒度和硬件資源消耗情況。文獻[17]充分利用FPGA的計算能力,采用收縮陣列結(jié)構(gòu)在FPGA上實現(xiàn)了CNN算法,在較高的工作頻率下實現(xiàn)8~16 bit位寬的靈活計算,但相應(yīng)的硬件資源消耗也更多。文獻[18]的設(shè)計采用1 024個并行的1 bit乘累加處理器實現(xiàn)了1~16 bit的任意粒度乘加計算,雖然該設(shè)計通過流水線策略降低了組合邏輯產(chǎn)生的延時,但因為互聯(lián)的乘累加單元過多,導(dǎo)致工作頻率只能保持在100 MHz。文獻[19]中硬件電路的工作頻率與本文設(shè)計接近,相關(guān)硬件資源的消耗也更少,但其僅針對快速傅里葉變換算法(fast Fourier transform,F(xiàn)FT)進行了計算粒度的動態(tài)配置,未考慮其他算法的計算需求,導(dǎo)致其通用性和可擴展性不足。文獻[20]提出一種可重構(gòu)的微處理單元,實現(xiàn)了在2~8 bit的并行乘法和并行加法操作。與本文相比均為可重構(gòu)結(jié)構(gòu),且可重構(gòu)微處理單元的工作頻率略高于本文設(shè)計,在硬件資源消耗上也與本文相當,但是本文設(shè)計的最大位寬為32 bit,具有比文獻[20]設(shè)計的2~8 bit粒度更高的計算精度,在需要高精度量化(如權(quán)值)場景下更具優(yōu)勢。本文方法的計算粒度的跨度更大,靈活性更高,支持可重構(gòu)計算,可以滿足在1~32 bit內(nèi)大多數(shù)算法的數(shù)據(jù)量化和近似計算,同時在硬件資源消耗方面也具有優(yōu)勢,因此能夠在可重構(gòu)硬件平臺上滿足不同算法的計算需求。
5 結(jié)束語
針對卷積神經(jīng)網(wǎng)絡(luò)中不同層計算粒度需求不同的問題,為達到模型壓縮的目的,本文研究參數(shù)定點與數(shù)據(jù)量化方法,設(shè)計支持多精度并行乘加運算的可重構(gòu)處理單元,實現(xiàn)了適應(yīng)于8 bit/16 bit/32 bit三種不同位寬的匯編指令及其計算結(jié)構(gòu),并基于可重構(gòu)陣列處理器進行算法映射。實驗結(jié)果表明:將權(quán)值和輸入特征圖數(shù)據(jù)分別量化到8 bit位寬下最高可壓縮56.3%的參數(shù)量;可重構(gòu)陣列可以在133.5 MHz的工作頻率下實現(xiàn)三種數(shù)據(jù)位寬的靈活配置,最高可達到1.5倍的加速比,并縮短了35.7%的算法執(zhí)行時間。本文方法不僅可以以較高的計算精度在硬件平臺上實現(xiàn)三種不同數(shù)據(jù)位寬的靈活計算,而且在硬件資源消耗量方面也具有優(yōu)勢。后續(xù)研究將對計算粒度動態(tài)配置的自由度和硬件結(jié)構(gòu)進行優(yōu)化,在數(shù)據(jù)位寬不變的情況下,通過將多個PE靈活地組合,實現(xiàn)更粗粒度的數(shù)據(jù)計算,進一步提高計算精度和執(zhí)行效率。
參考文獻:
[1]Sharma H, Park J, Suda N,et al.Bit Fusion: bit-level dynamically composable architecture for accelerating deep neural networks[C]//Proc of the 45th Annual International Symposium on Computer Architecture. Piscataway, NJ: IEEE Press, 2018: 764-775.
[2]Faraone J, Kumm M, Hardieck M,et al.AddNet: deep neural networks using FPGA-optimized multipliers[J].IEEE Trans on Very Large Scale Integration Systems , 2020, 28 (1): 115-128.
[3]Zhu Feng, Gong Ruihao, Yu Fengwei,et al.Towards unified int8 training for convolutional neural network[C]//Proc of IEEE/CVF Conference on Computer Vision and Pattern Recognition. Piscataway, NJ: IEEE Press, 2020: 1969-1979.
[4]Sun Mengshu, Li Zhengang, Lu A,et al.FILM-QNN: efficient FPGA acceleration of deep neural networks with intra-layer, mixed-precision quantization[C]//Proc of the 28th ACM/SIGDA International Symposium on Field-Programmable Gate Arrays. New York: ACM Press, 2022: 134-145.
[5]Lu Yanan, Liu Leibo, Zhu Jianfeng,et al.Architecture, challenges and applications of dynamic reconfigurable computing[J].Journal of Semiconductors , 2020, 41 (2): 4-13.
[6]劉運韜, 李淵, 劉遜韻. 基于可重疊混淆樹的卷積神經(jīng)網(wǎng)絡(luò)[J]. 計算機應(yīng)用研究, 2022, 39 (3): 938-942. (Liu Yuntao, Li Yuan, Liu Xunyun. CT-CNN: overlapping confusion tree based convolutio-nal neural network[J].Application Research of Computers , 2022, 39 (3): 938-942.)
[7]鞏杰, 趙爍, 何虎, 等. 基于FPGA的量化CNN加速系統(tǒng)設(shè)計[J]. 計算機工程, 2022, 48 (3): 170-174,196. (Gong Jie, Zhao Shuo, He Hu,et al.Design of quantized CNN acceleration system based on FPGA[J].Computer Engineering , 2022, 48 (3): 170-174,196.)
[8]Savio P, Scionti Vitali G,et al.Accelerating legacy applications with spatial computing devices[J].The Journal of Supercompu-ting , 2023, 79 : 7461-7483.
[9]Huang Chenglong, Liu Puguang, Fang Liang. MXQN: mixed quantization for reducing bit-width of weights and activations in deep convolutional neural networks[J].Applied Intelligence,202 51 : 4561-4574.
[10]Sousa L. Nonconventional computer arithmetic circuits, systems and applications[J].IEEE Circuits and Systems Magazine , 202 21 (1): 6-40.
[11]Przyby A. Fixed-point arithmetic unit with a scaling mechanism for FPGA-Based embedded systems[J].Electronics , 202 10 (10): 1164.
[12]Migacz S. 8-bit inference with TensorRT[EB/OL]. (2017-05-08). https://on-demand.gputechconf.com/gtc/2017/presentation/s7310-8-bit-inference-with-tensorrt.pdf.
[13]雷小康, 尹志剛, 趙瑞蓮. 基于FPGA的卷積神經(jīng)網(wǎng)絡(luò)定點加速[J]. 計算機應(yīng)用, 2020, 40 (10): 2811-2816. (Lei Xiaokang, Yin Zhigang, Zhao Ruilian, FPGA-based convolutional neural network fixed-point acceleration[J].Journal of Computer Applications , 2020, 40 (10):2811-2816.)
[14]常立博, 張盛兵. 面向混合量化CNNs的可重構(gòu)處理器設(shè)計[J]. 西北工業(yè)大學(xué)學(xué)報, 2022, 40 (2): 344-351. (Chang Libo, Zhang Shengbing. A reconfigurable processor for mix-precision CNNs on FPGA[J].Journal of Northwestern Polytechnical University , 2022, 40 (2): 344-351.)
[15]Shan Rui, Jiang Lin, Wu Haoyue,et al.Dynamical self-reconfigurable mechanism for data-driven cell array[J].Journal of Shanghai Jiao Tong University(Science),202 26 (4): 511-521.
[16]Sun Sh Jiang Hanjun, Yin Mingchao,et al.Design of efficient CNN accelerator based on Zynq platform[C]//Proc of the 15th International Conference on Computer Science and Education. Piscataway, NJ: IEEE Press, 2020: 489-493.
[17]Wei Xuechao, Yu Codyhao, Zhang Peng,et al.Automated systolic array architecture synthesis for high throughput CNN inference on FPGA[C]//Proc of the 54th ACM/EDAC/IEEE Design Automation Conference. Piscataway, NJ: IEEE Press, 2017:1-6.
[18]Maki Miyashita D, Nakata K, et al. FPGA-based CNN processor with filter-wise-optimized bit precision[C]//Proc of IEEE Asian Solid-State Circuits Conference. Piscataway, NJ: IEEE Press, 2018: 47-50.
[19]Liu Weiqiang, Liao Qicong, Qiao Fei,et al.Approximate designs for fast Fourier transform(FFT) with application to speech recognition[J].IEEE Trans on Circuits and Systems I: Regular Papers,2019,66 (12): 4727-4739.
[20]Chen Yue,Du Huimin,Chang Libo. A reconfigurable micro-processing element for mixed precision CNNs[C]//Proc of the 14th International Conference on Measuring Technology and Mechatronics Automation. Piscataway, NJ: IEEE Press, 2022: 1-5.
收稿日期:2023-07-05;修回日期:2023-08-20基金項目:科技創(chuàng)新2030-“新一代人工智能”重大項目(2022ZD0119005);國家自然科學(xué)基金重點資助項目(61834005)
作者簡介:朱家揚(1999—),男,河南開封人,碩士研究生,主要研究方向為計算機體系結(jié)構(gòu)、原型系統(tǒng)設(shè)計;蔣林(1970—),男(通信作者),陜西楊凌人,教授,博導(dǎo),博士,主要研究方向為專用集成電路設(shè)計、計算機體系結(jié)構(gòu)(jianglin@xust.edu.cn);李遠成(1981—),男,河南開封人,碩導(dǎo),博士,CCF會員,主要研究方向為計算機體系結(jié)構(gòu)、人工智能;宋佳(1999—),女,陜西咸陽人,碩士研究生,主要研究方向為神經(jīng)網(wǎng)絡(luò);劉帥(1998—),男,陜西延安人,碩士,主要研究方向為集成電路設(shè)計.