魏 正 張興軍 卓志敏 紀澤宇 李泳昊
1(西安交通大學計算機科學與技術學院 西安 710049)
2(北京電子工程總體研究所 北京 100854)
Fig. 1 Top-1 accuracy results of various CNNs on ImageNet圖1 CNN模型在ImageNet上的Top-1準確率
卷積神經(jīng)網(wǎng)絡(convolutional neural network, CNN)在圖像分類、語音識別和自然語言處理等領域取得廣泛應用[1-3].但是,如圖1所示,模型準確度的提升是以設計更深、更復雜的模型為代價,這導致了更大的模型文件和更高的計算復雜度[4].在使用基于馮·諾依曼架構的通用處理器進行訓練和推理時,“內(nèi)存墻”問題(memory wall)限制了CPU和片外存儲之間的數(shù)據(jù)傳輸,成為性能瓶頸.此外,文獻[5]的研究表明CPU和片外存儲進行一次數(shù)據(jù)傳輸?shù)哪芎谋冗M行一次32 b浮點數(shù)加法運算高約2個數(shù)量級,大量的數(shù)據(jù)傳輸將產(chǎn)生巨大的能耗,這在邊緣計算和物聯(lián)網(wǎng)等資源受限的應用場景下是不可行的,因此,需要新的體系結構來緩解“內(nèi)存墻”問題.
內(nèi)存計算(processing in memory, PIM)通過將計算單元和存儲單元緊密結合,從而緩解了“內(nèi)存墻”的問題[6].基于憶阻器的交叉陣列(memristor-based crossbar),由于具有高密度、低功耗等優(yōu)勢,被廣泛應用于加速矩陣-向量乘運算(matrix-vector multiplication, MVM).近期,專注于硬件設計的工程師提出了許多基于非易失性阻變存儲(resistive RAM, ReRAM)的硬件加速器設計[7-9].但是,由于數(shù)模(digital-to-analog converter, DAC)和模數(shù)(analog-to-digital converter, ADC)轉換器件的分辨率(resolution)、ReRAM cell的精度和ReRAM交叉陣列的尺寸有限,基于ReRAM的加速器無法直接高效地進行32 b浮點數(shù)運算[10].因此,需要使用低精度數(shù)值(low-precision data).
模型量化通過降低數(shù)據(jù)位寬,從而減少計算存儲開銷,這對基于ReRAM的硬件加速器非常友好[10].ISAAC[7]和PipeLayer[9]都使用16 b的權值和激勵,Prime[8]使用8 b權值和6 b激勵.但是,這些專注于硬件設計的工作都為權值和激勵分配統(tǒng)一的量化位寬,這種粗粒度的模型級量化忽略了神經(jīng)網(wǎng)絡不同層的結構和冗余,無法有效達到模型精度和硬件開銷的最佳性能折中.因此,需要更細粒度的量化策略,例如逐層量化(layer-wise quanti-zation).逐層量化的問題使其量化策略空間巨大.假設一個模型有L層(L指卷積層和全連接層的總和),每層的權值和激勵可采用M種量化位寬的選擇,那么其量化策略的搜索空間為O(M2L).當M和L很大時,在如此大的量化策略空間上手工為每層搜索量化位寬非常耗時.近期研究提出使用自動機器學習(automated machine learning, AutoML)來自動選擇量化位寬.文獻[11-13]使用基于深度確定性策略梯度(deep deterministic policy gradient, DDPG)[14]的強化學習算法來進行自動量化.但是這些研究存在3個問題:
1) 量化動作本質上是離散數(shù)值,而DDPG算法適用于連續(xù)動作,因此基于DDPG的方法[11-13]需要動作空間轉換步驟;
2) 在文獻[11]中,通過手工遞減位寬來滿足資源約束條件,而不是通過學習獲得,并且其搜索時間漫長;
3) 大部分基于強化學習的自動量化是基于FPGA[11-12]和傳統(tǒng)馮·諾依曼架構的通用處理器的[15],缺少結合自動量化算法的ReRAM加速器軟硬件設計說明.
此外,由于沒有成熟的ReRAM加速器芯片,目前主要基于模擬器來評估ReRAM加速器的性能.文獻[16-17]提供詳細的電路級(circuit-level)仿真,可用于仿真ReRAM加速器的面積、時延和功耗.文獻[18]提出一個快速評估ReRAM硬件性能的行為級(behavior-level)模擬器,支持混合精度計算,但不支持自動選擇量化位寬.
基于上述分析,本文工作的主要貢獻有4個方面:
1) 提出基于近端策略優(yōu)化(proximal policy optimization, PPO)[19]的自動量化算法,使用離散動作空間,避免動作空間轉換步驟;
2) 設計新的包含ReRAM加速器硬件開銷和模型精度的獎勵函數(shù),使PPO Agent通過學習來自動搜索同時滿足資源約束和精度需求的量化策略,不需要手工遞減量化位寬步驟;
3) 在遵循ReRAM加速器設計原則的前提下,結合自動量化算法,分析支持混合精度計算的ReRAM加速器的軟硬件設計改動;
4) 實驗表明:與粗粒度的量化方法相比,提出的方法可以減少20%~30%的硬件開銷,而不引起模型準確度的過多損失.與其他自動量化相比,提出的方法自動搜索滿足資源約束條件的量化策略,避免手工遞減步驟,搜索時間快,并且在相同的資源約束條件下可以進一步減少約4.2%的硬件開銷.
為了不產(chǎn)生歧義,首先統(tǒng)一CNN和神經(jīng)網(wǎng)絡(neural network, NN)的術語:
1) CNN卷積核(filter or kernel)的權值(weight)對應于NN中的突觸(synapse);
2) CNN中輸入/輸出特征圖(ifmap/ofmap)的激勵(activation)對應于NN中的輸入/輸出神經(jīng)元(input/output neuron).
CNN推理階段涉及卷積、池化、非線性激活(sigmoid or ReLU)和歸一化等運算.推理階段的計算負載(workload)主要集中在卷積層和全連接層.式(1)給出了卷積的計算公式,表1列出了相應的參數(shù)說明:
Table 1 Parameters of A CONV/FC Layer表1 CONV/FC層參數(shù)說明
值得注意的是:
(1)
全連接層可以看成是當式(1)中參數(shù)Hin=Kheight,Win=Kwidth,U=1時的卷積層.因此,下面主要分析卷積計算的特點.結合圖2繪制的卷積運算的示意圖和式(1)分析可得,卷積層計算表現(xiàn)出2個特征:
1) 不連續(xù)的內(nèi)存訪問.這是由于卷積核在輸入特征圖上滑動時,滑窗(sliding window)內(nèi)的數(shù)據(jù)是輸入特征圖的多行數(shù)據(jù).因此,不論數(shù)據(jù)是按行存儲還是按列存儲,在不進行數(shù)據(jù)布局優(yōu)化的條件下,滑窗內(nèi)的數(shù)據(jù)內(nèi)存訪問都是不連續(xù)的.
2) 數(shù)據(jù)復用性.卷積運算中的數(shù)據(jù)復用主要分為權值復用(weight reuse)和輸入復用(input reuse).權值復用表現(xiàn)為同一個卷積核的權重被多次用于輸入特征圖的不同區(qū)域.輸入復用表現(xiàn)為輸入特征圖的同一個區(qū)域的激勵被多次用于不同的卷積核.
Fig. 2 Convolutions in CNNs圖2 CNN中的卷積運算
直接使用for循環(huán)實現(xiàn)的卷積計算會引起非常高的緩存缺失,從而導致運算速度非常慢.因此,通常將卷積計算轉化為矩陣-矩陣乘(matrix-matrix multiplication)或矩陣-向量乘(matrix-vector mul-tiplication, MVM).現(xiàn)有的深度學習框架(如Tensor-flow和Pytorch)底層都是通過調用通用矩陣乘庫(general matrix multiply, GEMM)來實現(xiàn)高效卷積計算.此外,為減少不連續(xù)的內(nèi)存訪問并提高數(shù)據(jù)復用,在調用之前GEMM前,需要對數(shù)據(jù)進行轉換和重排,最常見的轉換方法是如圖3所示的im2col,這是一種用空間換時間的優(yōu)化策略.
除了在算法層面上優(yōu)化卷積運算,實現(xiàn)高效矩陣-向量乘也成為硬件加速器設計的關鍵.TPU[20]作為工業(yè)界最成功的專用硬件加速器,采用65 536個8 b乘法器和加法器,組成脈動陣列(systolic array)架構的矩陣乘法單元,每秒峰值速度為92TFLOPS.TPU在進行計算時,首先將權值參數(shù)從內(nèi)存加載到乘法器和加法器陣列中.然后,從內(nèi)存加載輸入數(shù)據(jù),每次執(zhí)行乘加運算時,都會將結果傳遞給后面的乘法器,同時進行求和.與傳統(tǒng)的基于CMOS實現(xiàn)的加速器相比[21-23],基于ReRAM的硬件加速器的本質是在模擬域實現(xiàn)矩陣-向量乘運算,因此具有速度快、功耗低等優(yōu)勢.下面介紹基于ReRAM的硬件加速器的基本原理.
Fig. 3 The data rearrange of im2col圖3 im2col的數(shù)據(jù)重排原理圖
基于ReRAM的硬件加速器通常采用分層結構(hierarchical architecture)[7-9].如圖4所示,加速器由多個Tile和I/O組成,I/O用于從片外存儲加載數(shù)據(jù),并通過基于片上通信網(wǎng)絡(network on chip, NoC)進行Tile間的數(shù)據(jù)交換.數(shù)據(jù)的編排和通信由控制器(controller)負責.Tile由緩沖(buffer)、移位-加法器(shift & adder)、用于計算非線性操作的特殊功能單元(special function unit, SFU)和多個PE(processing engine)組成.PE由輸入/輸出寄存器、移位-加法器、模數(shù)轉換器(ADC)和多個ReRAM交叉陣列(ReRAM crossbar array, XB)組成.在推理階段,輸入數(shù)據(jù)通過DAC轉換為模擬域的電壓信號,便可通過基爾霍夫定律(Kirchoff’s law),在一個讀操作的延遲內(nèi)完成一次矩陣-向量乘法計算,之后通過ADC將模擬電流信號轉為數(shù)字信號.和推理相比,神經(jīng)網(wǎng)絡的訓練涉及誤差和梯度的計算與更新,需要設計額外的外部電路和ReRAM交叉陣列,這使得ReRAM硬件加速器的電路級設計更加復雜.此外,訓練階段頻繁地更新操作造成大量的寫操作,這給ReRAM的寫耐久性帶來巨大挑戰(zhàn)[24-26].目前,大部分研究使用基于ReRAM的加速器來加速神經(jīng)網(wǎng)絡的推理.ISAAC[7]結合新的數(shù)據(jù)編碼,提出了支持原位乘加操作的基礎單元(in-situ multiply accumulate, IMA),并使用基于ReRAM的塊內(nèi)流水線(intra-tile pipeline)設計加速推理.Prime[8]分別設計用于計算(FF subarray)、存儲(mem subarray)和緩存(buffer subarray)的3個陣列,避免使用eDRAM緩存和輸入輸出寄存器.和Prime、ISAAC不同,PipeLayer[9]通過合理的數(shù)據(jù)復用、層內(nèi)并行(intra-layer parallelism)和層間流水線(inter-layer pipeline)來提高吞吐量.但是,這些硬件設計都使用較高的數(shù)據(jù)精度,并且為所有層指定統(tǒng)一的量化位寬,忽略了神經(jīng)網(wǎng)絡不同層的冗余.
Fig. 4 The hierarchical architecture of ReRAM-based accelerator圖4 基于ReRAM加速器的分層體系結構
為了快速評估ReRAM加速器的性能,研究人員提出了許多模擬器.文獻[16-17]使用C++實現(xiàn)ReRAM加速器的電路級(circuit-level)仿真軟件,可用于仿真ReRAM加速器設計的面積、時延和功耗,但不支持混合精度計算.文獻[18]使用Python實現(xiàn)一個快速評估ReRAM硬件性能的行為級(behavior-level)模擬器,支持混合精度計算,可用于芯片早期設計階段的快速仿真,但不支持自動選擇量化位寬.
專注于ReRAM加速器設計的硬件工程師通常使用模型級量化.文獻[16-17]都采用W2A8的量化策略,即將所有卷積層和全連接層的權值量化為2 b整型,激勵量化為8 b整型.但是,這會導致模型準確度下降.手工為每一層確定量化位寬非常耗時.最近,專注于算法研究的工程師提出使用自動機器學習來自動選擇量化位寬.文獻[11]針對FPGA平臺,提出了基于DDPG算法的硬件感知自動量化技術;文獻[12]在文獻[11]的基礎上,也針對FPGA提出基于DDPG的卷積核級別(kernel-wise)的自動量化;文獻[13]也在文獻[11]的基礎上,提出使用基于DDPG 2階段強化學習,分別用于提高精度和ReRAM的存儲利用率;文獻[15]針對通用處理器CPU,使用強化學習來進行自動量化.由于DDPG適用于連續(xù)動作空間,而量化位寬本質上是離散數(shù)值.因此,文獻[11-13]都需要動作空間轉換步驟,這一轉化步驟可以通過使用適用于離散動作空間的算法來避免;此外,文獻[11]中的資源受限約束是通過手工遞減量化位寬實現(xiàn)的,而不是自動學習的,這可以通過設計新的包含模型精度和硬件開銷的獎勵函數(shù)來實現(xiàn).文獻[27]使用基于神經(jīng)架構搜索(neural architecture search, NAS)的方法,同時調整神經(jīng)網(wǎng)絡結構和量化策略來優(yōu)化ReRAM加速器性能.本文不調整神經(jīng)網(wǎng)絡結構,主要探索量化策略對ReRAM加速器硬件開銷的影響.
本文使用基于PPO Agent的actor-critic模型來進行自動量化.下面詳細說明狀態(tài)空間、動作空間、獎勵函數(shù)、量化方法和Agent的相關實現(xiàn)細節(jié).
Table 2 Embeddings of the State Space表2 狀態(tài)空間中的元素
3) 獎勵函數(shù)(reward function).本文的獎勵函數(shù):
(2)
4) 量化方法.訓練好的神經(jīng)網(wǎng)絡權值數(shù)據(jù)類型是32 b浮點數(shù).由于ReRAM cell精度和ReRAM交叉陣列(ReRAM crossbar array, XB)尺寸有限,需要更多的ReRAM cell來表示更高位寬的數(shù)據(jù).假設ReRAM設備的精度為1 b/cell,一個x位的整形數(shù)據(jù)將占用x個cells.本文將浮點數(shù)量轉換為x位有符號整數(shù)(signed integer):
(3)
其中,wq表示量化后的權值,Δ表示量化步長,函數(shù)clip用來將權值w截斷到[-c,c]的范圍內(nèi),round表示向下取整.由于激勵是非負的,在對激勵進行量化時,函數(shù)clip會將激勵截斷到[0,c].參數(shù)c的值在訓練過程中更新:
(4)
其中,DKL表示量化前的w和量化后wq的分布的KL散度,其值越小表示w和wq的分布越接近.
5) Agent.傳統(tǒng)的基于策略梯度的方法很難確定步長(或學習率),若步長太小,學習很慢;若步長太大,容易學到不好的策略,模型很難收斂.為了解決這個問題,PPO算法在TRPO[28]的基礎上,將約束作為目標函數(shù)的正則化項,并通過新舊策略的比值來衡量新舊策略間的差異,限制新策略的更新幅度.
本文使用帶有截斷目標函數(shù)的PPO算法(PPO-Clip)來最大化期望獎勵.其中actor和critic網(wǎng)絡的前2層結構一樣,都包含2個隱含層,每層包含256個神經(jīng)元.由于actor網(wǎng)絡用來產(chǎn)生動作,因此,actor網(wǎng)絡的最后一層的神經(jīng)元個數(shù)為8-2+1=7,輸出表示[2,8]上的概率分布;critic網(wǎng)絡的最后一層的神經(jīng)元個數(shù)為1,輸出狀態(tài)價值.在每個時間步,Agent為神經(jīng)網(wǎng)絡的特定層選擇量化動作.一個回合(episode)指Agent遍歷完所有層,由于神經(jīng)網(wǎng)絡的層數(shù)有限,因此回合長度是有限的.在探索過程中,使用ADAM[29]優(yōu)化器,其中β1=0.9,β2=0.999;actor和critic網(wǎng)絡學習率分別設為3×10-4和10-3.通過最小化目標函數(shù)來更新actor網(wǎng)絡的參數(shù)θ:
(5)
(6)
自動量化后的模型的每一層的數(shù)據(jù)精度不一致,這就需要ReRAM加速器支持混合精度計算(mixed-precision computing).文獻[30]設計了一個支持混合精度計算的ReRAM加速器設計,但是不支持自動量化.本節(jié)遵循文獻[17]給出的ReRAM加速器設計指導,結合文獻[18,30-31],介紹支持混合精度計算的ReRAM加速器軟硬件設計改動.
權值存儲和矩陣分割.當使用ReRAM交叉陣列存儲權值時,需要解決2個問題:1)當權值的位寬高于ReRAM cell能表示的范圍時,如何表示高比特權值;2)當權值矩陣超過ReRAM陣列大小時,如何存儲整個權值矩陣.
對于權值存儲,文獻[31]指出1 b ReRAM設備更加穩(wěn)定和可靠,其設備級和電路級的非理想特性對準確度的影響不大.因此,本文使用1 b ReRAM.此外,由于ReRAM設備的電導是正數(shù),無法直接表征負權值,本文使用1組ReRAM交叉陣列來分別存儲正負權值.由于量化后的權值的位寬被限制在[2,8],為支持最大8 b權值的存儲,需要8組ReRAM交叉陣列.
對于矩陣分割,當權值矩陣大于ReRAM交叉陣列的尺寸時,需要按照ReRAM交叉陣列的尺寸分割權值矩陣,每個ReRAM交叉陣列存儲一部分權值.在這種情況下,需要融合各ReRAM交叉陣列的中間計算結果來獲得該層最終的輸出.給出存儲整個神經(jīng)網(wǎng)絡所需要的ReRAM交叉陣列數(shù):
(7)
數(shù)據(jù)轉換模塊分析值和激勵的位寬會影響數(shù)據(jù)轉換模塊的開銷.量化后的激勵需要通過DACs轉換為輸入電壓,然后進行模擬域的MVM運算.假設DAC的分辨率為ResDAC,輸入數(shù)據(jù)轉化的總邏輯時鐘數(shù):
(8)
Qout=ResDAC+lb(SizeXB)+1,
(9)
理想情況下,ADC的分辨率ResADC應該等于Qout才能保證將模擬電流精確轉換為數(shù)字信號.假設ResDAC=1 b,ReRAM交叉陣列的尺寸通常為{128,256,512},那么理想的ResADC應該為{9 b,10 b,11 b}.但是,高分辨率DAC/ADC的功耗很大,這會弱化ReRAM加速器的低功耗優(yōu)勢.因此,不宜選擇較高分辨率的ADC,但是,ResADC和Qout間的差將引起硬件一級的量化誤差.文獻[16,30]表明ADC的分辨率大于等于6 b時,由ADC引起的精度損失可以忽略,因此,后續(xù)實驗中默認使用1 b DAC和8 b ADC,忽略ADC引起的硬件一級的量化誤差.同時為方便和其他ReRAM加速器公平比較,使用128×128的陣列.
其他組件.除了MVM操作外,ReRAM加速器還要支持ReLU和最大池化(max pooling)運算.采用類似文獻[30-31]的方法,使用look-up-table(LUT)來實現(xiàn)ReLU,使用寄存器保存序列中的最大值來實現(xiàn)最大池化.此外,為支持混合精度計算,控制器需要有寄存器來存儲量化位寬.
基于3.1節(jié)分析,本文提出如圖5所示的軟件框架,其工作流程為:①用戶(算法工程師或硬件設計工程師)給出模型精度和硬件約束要求;②使用基于PPO Agent的actor-critic模型來進行逐層自動量化,如圖5中第l層的權值和激勵分別量化為6 b和4 b(簡寫為W6A4);③待整個模型的量化策略確定后,對模型進行逐層量化;④通過分析每一層的結構信息和量化位寬,將權值矩陣分割,并進行數(shù)據(jù)映射;⑤通過模擬器評估ReRAM加速器的硬件開銷,更新狀態(tài)和獎勵函數(shù);⑥搜索結束,返回最優(yōu)策略;否則重復步②~⑤.
根據(jù)分析,本文基于OpenAI開源的強化學習框架Spinning Up[32]實現(xiàn)支持自動量化的前端訓練框架.為了與前段訓練框架對接,本文在文獻[18]的基礎上,使用Python實現(xiàn)一個用于評估ReRAM加速器硬件開銷的行為級模擬器.本文目前實現(xiàn)的ReRAM模擬器僅用于評估推理階段的硬件開銷,所使用的時延、能耗和功率模型與文獻[18]類似.文獻[11]使用查表的方式獲取FPGA的硬件開銷,而本文的框架中需要調用模擬器來評估ReRAM加速器硬件開銷,因此,調用模擬器的次數(shù)將影響搜索時間(將在4.2.2節(jié)分析).
Fig. 5 The software framework of automated quantization圖5 自動量化軟件框架
實驗的測試環(huán)境.本文使用的服務器配置信息為英特爾Xeon Silver 4110 CPU@2.10 GHz,內(nèi)存為32 GB,GPU為NVIDIA Tesla P100,操作系統(tǒng)為Ubuntu18.04.實驗用的軟件為pytorch-1.6-gpu和基于文獻[18]實現(xiàn)的ReRAM模擬器.
表3列出了實驗所用的數(shù)據(jù)集、神經(jīng)網(wǎng)絡模型.本文選擇使用LeNet-5和VGG-13這2個不同規(guī)模的模型,分別在MNIST和CIFAR-10數(shù)據(jù)集上實驗.由于標準的VGG模型是針對ImageNet數(shù)據(jù)集設計的,因此,本文修改VGG模型以適用于CIFAR-10數(shù)據(jù)集.LeNet-5模型結構和文獻[33]保持一致.表4列出了模擬器的配置信息,該配置是由3.1節(jié)分析得來的.本文使用NVSim[34]來評估ReRAM陣列的硬件開銷,ADCs/DACs和減法器的開銷直接從文獻[7,35]獲取,數(shù)字化電路和緩沖設計使用和文獻[18]一樣的評估方法.通過對所有組件的開銷求和獲得ReRAM加速器的硬件開銷.
Table 3 The Configuration of the Neural Network表3 神經(jīng)網(wǎng)絡配置
Table 4 The Default Configuration of the ReRAM Simulator表4 ReRAM模擬器默認配置
本文的對比實驗主要包含2個方面:
1) 自動量化算法對比.由于基于NAS的方法改變神經(jīng)網(wǎng)絡結構,因此,為了公平比較,本文關注基于強化學習的自動量化算法.采用和文獻[11]類似的設置,即神經(jīng)網(wǎng)絡的第1層和最后1層固定量化為8 b.對比文獻[36]提出的模型級量化和文獻[11]提出的自動量化在不同資源約束下的模型精度和硬件開銷.此外,針對文獻[11]對比搜索時間.
2) ReRAM硬件加速器對比.選擇使用16 b數(shù)據(jù)精度的ISAAC[7]和PipeLayer[9],以及文獻[31]提出的支持混合精度計算的加速器作為基線,對比功率效率(power efficiency).需要指出的是,本文的重點并不是要設計全新的ReRAM加速器,與使用相對較高數(shù)據(jù)精度的ISAAC和PipeLayer相比,本文強調使用自動量化來減少ReRAM硬件開銷.
4.2.1 整體性能
為了證明所提方法的有效性,表5給出了在不同資源約束th下,所提出的方法與模型級量化[36]和基于DDPG的自動量化方法[11]的整體性能對比.從表5中可以看出,與文獻[36]相比,所提出的自動量化方法可以減少20%~30%的硬件開銷.在相同的資源約束th下,所提出的方法的模型精度與文獻[11]方法的相差不大,但是硬件開銷cost小于文獻[11]方法的.對于LeNet-5模型,所提出的方法主要減少LeNet-5模型在ReRAM加速器上的能耗和功率,但造成1%~3%的精度損失.對于VGG-13模型,所提出的方法可以有效減少VGG-13模型在ReRAM
Table 5 Overall Performance for Different NN Models Under Different Resource Constraints
加速器上的硬件開銷,且模型精度損失小于1%.與文獻[11]方法相比,在相同的資源約束th下,所提出的方法比文獻[11]方法可以多減少0.5%~4.21%的硬件開銷.
圖6顯示了不同資源約束下的VGG-13模型精度在600個回合內(nèi)的變化曲線,從圖6中可以看出:1)當th=0.7和th=0.8時,模型精度在300個回合后收斂;但是當th=0.6時,模型精度很難收斂,這是因為在資源約束相對嚴格時,PPO Agent很難學到同時滿足精度要求和資源約束的策略.2)th=0.8時的模型精度整體上高于th=0.7和th=0.6時的模型精度,這是因為在資源約束相對寬松的條件,所設計的獎勵函數(shù)鼓勵PPO Agent提高量化位寬來提升模型精度.
圖7顯示了當th=0.6,只考慮能耗(β=1,α=γ=0)時,VGG-13模型精度在600個回合內(nèi)的變化曲線.從圖7中可以看出,PPO Agent可以搜索到最優(yōu)量化策略,并且模型精度收斂速度快(與圖6中的虛線對比),這說明當硬件開銷cost涵蓋多個指標時(α,β,γ),優(yōu)化變得更加困難.
Fig. 7 Variation of Top -1 accuracy when th=0.6,α=γ=0,β=1圖7 當th=0.6, α=γ=0, β=1時Top -1準確率的變化
4.2.2 自動量化算法對比
由于文獻[12-13]都是在文獻[11]的基礎上進行的改進,因此本節(jié)主要和文獻[11]進行對比.為了簡化說明,本節(jié)以VGG-13模型在CIFAR-10數(shù)據(jù)集上的測試作為示例,從學習過程、量化策略和搜索時間3個方面進行對比.
1) 學習過程對比.圖8顯示了資源約束th=0.7時,不同自動量化算法的模型精度和硬件資源開銷在300個回合內(nèi)的的變化曲線.從圖8中可以看出,2種方法都能搜索到滿足資源約束的量化策略,并保持模型精度.但是,圖8(a)顯示了本文方法在前200個回合搜到量化策略導致精度和硬件開銷波動較大,探索能力更強,這是因為基于PPO Agent的動作是基于最近的隨機策略采樣獲得的,而文獻[11]是通過增加噪聲來增強DDPG的探索;圖8(b)清晰地顯示了本文方法在200個回合后,可以學習到滿足資源約束的量化策略,這得益于所設計的獎勵函數(shù),而文獻[11]的獎勵函數(shù)只與模型精度有關,需要手工遞減量化位寬來滿足資源約束.
2) 量化策略逐層對比.圖9顯示不同自動量化方法所搜索到的最優(yōu)量化策略.從圖9中可以看出,2種方法搜到的最優(yōu)量化策略的不同主要表現(xiàn)在權值的量化位寬上.文獻[11]為每一層的權值選擇較高的量化位寬(大部分為6 b),每一層的權值量化位寬平均為6.38 b;而本文方法為每一層的權值選擇的量化位寬的范圍更大(4~7 b),每一層的權值量化位寬平均為6 b,低于文獻[11],因此當th=0.7時,本文方法的硬件開銷(68.52%)比文獻[11]方法的(68.67%)少.
Fig. 10 Layer-wise analysis of hardware cost of different methods圖10 不同方法的硬件開銷的逐層分析
圖10顯示了圖9中的量化策略對應的歸一化的時延(latency)、功率(power)和能耗(energy),其值越小越好.從圖10(a)中可以看出,激勵的量化位寬越高,時延越大.這與式(8)描述的一致.從圖10(b)中可以看出,權值的量化位寬越高,功率越大.從圖10(c)中可以看出,除了第2個卷積層(CONV2)和第7個卷積層(CONV7)外,本文方法比文獻[11]方法能降低更多的能耗.
3) 搜索時間對比.表6顯示不同自動量化方法的搜索時間對比.從表6中可以看出,本文所提出方法的搜索時間比文獻[11]方法的少很多,這是由于本文方法在每個回合只調用一次模擬器來評估硬件開銷,而文獻[11]方法每遞減一次量化位寬就需要調用一次模擬器來評估硬件開銷.此外,文獻[11]方法中的獎勵函數(shù)鼓勵Agent提高量化位寬,以此提高模型精度,但是這容易打破資源約束條件,導致需要更多的手工遞減步驟.
Table 6 Comparison of Search Time表6 搜索時間對比
圖11展示了在300回合內(nèi),文獻[11]方法在進行手工遞減步驟前后的硬件開銷的對比,其中有131個回合的量化策略超出了硬件約束th=0.8,需要進行手工遞減位寬.表7給出了第43回合的手工遞減步驟前后的量化策略,結合圖11和表7可看出,經(jīng)過7次遞減后,硬件開銷cost由90.88%減到79.17%,單在這一回合文獻[11]方法比本文方法就需要多調用7次模擬器.當th更小時,這種情況更加嚴重.
Fig. 11 Comparison of hardware cost before and after manual decrement step in ref [11]圖11 文獻[11]方法手工遞減步驟前后硬件開銷對比
Table 7 Comparison of Quantization Policy Before and After Manual Decrement Step in Epoch 43
4.2.3 和其他ReRAM加速器對比
表8對比了不同ReRAM加速器的功率效率.本文所提方法的功率效率為454.8GOPS/(s×W),低于ISAAC的627.5GOPS/(s×W),但高于PipeLayer的142.9GOPS/(s×W).文獻[31]提出支持混合精度計算的ReRAM加速器設計,并使用貪婪策略選擇量化位寬.和文獻[31]相比,本文提出的自動量化算法將ReRAM加速器的功率效率提升了近1.50倍.
Table 8 Comparison of Different ReRAM Accelerator Designs on Power Efficiency
本文提出基于PPO的ReRAM神經(jīng)網(wǎng)絡加速器自動量化.使用PPO Agent來進行自動量化,通過設計新的獎勵函數(shù),實現(xiàn)了模型精度和硬件開銷的最佳性能折中,并結合所提出的自動量化算法,給出ReRAM加速器的軟硬件設計改動.實驗結果表明:與模型級量化[36]相比,本文提出的方法可以減少20%~30%的硬件開銷.與文獻[11]相比,本文提出的方法通過學習來自動搜索滿足資源約束條件的量化策略,避免手工遞減步驟,并且搜索時間快.與文獻[31]相比,本文提出的方法將ReRAM加速器的功率效率提升了近1.50倍.這為量化算法和ReRAM加速器的協(xié)同設計提供了借鑒.
作者貢獻聲明:魏正提出研究思路,負責算法與實驗設計,并撰寫論文;張興軍負責技術方案設計與最終版本的修訂;卓志敏負責行政和材料支持;紀澤宇負責方案討論與論文校對;李泳昊負責分析數(shù)據(jù)與輔助實驗.