劉 鶴 季 宇 韓建輝 張悠慧 鄭緯民
1(清華大學計算機科學與技術系 北京 100084)2(清華大學微電子學研究所 北京 100084)
長短期記憶(long short-term memory, LSTM)神經(jīng)網(wǎng)絡擅長處理和預測時間序列中間隔和延遲很長的事件,因此多用于語音識別、機器翻譯、控制機器人、合成音樂等領域.LSTM的推斷計算大概占用了谷歌數(shù)據(jù)中心的30%的工作負載[1].然而,LSTM網(wǎng)絡在傳統(tǒng)的神經(jīng)網(wǎng)絡加速器上的計算效率卻很低.舉例來說,對于TPU[1]而言,相較于卷積神經(jīng)網(wǎng)絡(convolutional neural network, CNN)的86 Topss的速度,LSTM神經(jīng)網(wǎng)絡的速度只能達到2.8Topss.其主要原因在于LSTM的訪存更為密集,因此其計算性能受到內(nèi)存帶寬的嚴格限制.對于GPU[2]和FPGA[3-4]等加速器件,也有類似的結(jié)論.
為了解決內(nèi)存瓶頸對計算性能的影響,用ReRAM器件可作為神經(jīng)網(wǎng)絡加速器件的計算核心.非易失性阻變存儲器(resistive random-access memory, ReRAM)是新一代的存儲器件,其阻值可動態(tài)設置.利用此器件的物理特性,可以將ReRAM制作成交叉開關陣列(Crossbar)進行神經(jīng)網(wǎng)絡所需的矩陣向量乘法計算.其計算原理是基爾霍夫定律,計算速度快、功耗低,并且避免了一般神經(jīng)網(wǎng)絡加速器計算期間的權重數(shù)據(jù)移動,很大程度上削弱了內(nèi)存帶寬對計算效率的限制.
由于ReRAM Crossbar本身是模擬電路,相對于一般的數(shù)字電路設計有更多的約束條件,為此本文提出了定制化的訓練算法,使得LSTM網(wǎng)絡在訓練時就充分考慮了相應的硬件約束,能夠更好地反映推斷計算的真實運行環(huán)境.同時本文還完成了一個針對ReRAM器件的System-C模擬器,采用行為級電路模擬技術避免了現(xiàn)有的基于SPICE的ReRAM電路仿真的復雜計算,可以大幅度提高模擬運行速度.相對于SPICE仿真,該模擬器引入的誤差不超過2.68%[注]與真實芯片的電路設計作對比得出該結(jié)論.;且核心計算部分實現(xiàn)了GPU加速,大幅提高了模擬速度,為探索設計空間提供了便利.
ReRAM是新一代非易失性存儲器件,其具有非易失性、高密度、低功耗、存算合一、易于3D堆疊等特點.在神經(jīng)網(wǎng)絡計算中可以利用其阻值可調(diào)的特點作為突觸器件,并利用其存算合一的優(yōu)點以Crossbar形式完成高速向量矩陣乘運算.
具體的計算方式為: ReRAM是一種多級(multi-level)內(nèi)存設備,理論上可以將ReRAM的電導值設為其取值范圍中的任意值.我們可以將ReRAM在Crossbar交叉點的阻值設置為神經(jīng)網(wǎng)絡權重矩陣的對應值,這樣就可以用一個ReRAM Crossbar來表示一個神經(jīng)網(wǎng)絡的權重矩陣,并且根據(jù)其物理特性就地(in-situ)完成矩陣向量乘操作.對于理想的Crossbar器件,將輸入電壓Vi加到每一行字線(word-line),電壓與每一交叉點的電導值Gij相乘,根據(jù)基爾霍夫定律I=GV,每一列的輸出電流I可累加得到.該計算過程能達到很高的并行度和速度,過程如圖1所示:
Fig. 1 ReRAM Crossbar圖1 ReRAM 交叉開關陣列
但實際上基于ReRAM Crossbar的計算并不像上文提到的理想情況那樣,主要包含2種非理想因素,分別是設備Variation和周期Variation.設備Variation主要反映在多個ReRAM單元之間的參數(shù)變動,即當我們設置多個ReRAM單元的電導值至某一個給定值時,其實際設置的結(jié)果值并不準確地等于預期值,而是服從預期值附近的一個數(shù)值分布.周期級的Variation則表示單個ReRAM單元的不同次操作之間的電導值并不完全一致.
具體地,在設置ReRAM電導值的過程中,一個單元的電導值的變化受極性、磁性和輸入電壓等的影響.同時一些非理想情況,如電導值突變和波動會在反復循環(huán)設置電導的過程中出現(xiàn),因此需要寫驗證電路來驗證所設置的電導值是否符合要求.通常的設置過程如下:將電壓脈沖加到ReRAM單元上來增大(或減小)單元的電導值,直到該電導值大于(或小于)期望的電導值.如果實際電導值與期望的電導值相差過大,則需要進行相反的操作來減小(或增大)電導值.同時由于器件不完美特性和設置過程開銷(用于驗證電路的參考電壓數(shù)量有限),實際可用的電導取值通常是離散值.這是當前很多基于ReRAM進行神經(jīng)網(wǎng)絡計算加速的研究工作使用離散電導值的一個原因.另一個原因在于,使用離散的權重值有利于提升神經(jīng)網(wǎng)絡的抗噪能力.
由于整個加速芯片系統(tǒng)的主要部分仍是數(shù)字電路,因此數(shù)模轉(zhuǎn)換(模數(shù)轉(zhuǎn)換),即DACADC,是很大的硬件開銷.在配置DACADC的時候,需要綜合考慮神經(jīng)網(wǎng)絡的準確率和硬件開銷的均衡.
數(shù)模轉(zhuǎn)換器(digital analog converter, DAC)的作用是將Crossbar每一行的數(shù)字輸入向量轉(zhuǎn)換成模擬信號.其重要參數(shù)是轉(zhuǎn)換分辨率d,即每次可轉(zhuǎn)換的信號位數(shù).在電路模塊中,DAC要占用不小的硬件面積,因此很多設計(如ISAAC[5]等)將S-bit寬度的數(shù)字輸入信號先轉(zhuǎn)換成一系列低精度的數(shù)字信號(通常精度是寬度為1,即d=1),再經(jīng)過DAC;這也意味著Crossbar要進行(Sd)次的順序操作,這是一種用時間換空間的優(yōu)化策略.DAC的個數(shù)設為2r×C.
模數(shù)轉(zhuǎn)換器(analog digital converter, ADC)的作用是將Crossbar的每一列電流輸出轉(zhuǎn)換成數(shù)字信號,其傳感分辨率為a.為了減小硬件開銷,通常使用時分復用的方式,即每個Crossbar列的輸出依次進入到ADC中,ADC將其逐個轉(zhuǎn)換成輸出信號.每個Crossbar的ADC的數(shù)量是A.
LSTM[6]網(wǎng)絡是一種帶門結(jié)構的循環(huán)神經(jīng)網(wǎng)絡(recurrent neural network, RNN),適合于處理和預測時間序列中間隔和延遲較長的重要事件.
LSTM網(wǎng)絡引入了判斷舊有信息是否有用的單元(cell).Cell的構成如圖2所示:
Fig. 2 LSTM Cell[7]圖2 LSTM計算單元[7]
遺忘門(forget gate)控制當前輸入xt對來自之前Cell狀態(tài)刪除信息的影響程度:
ft=σ(Wfor·xt+Rfor·ht-1+bfor).
(1)
輸入門(input gate)控制當前輸入xt對當前Cell狀態(tài)中新信息的增量的影響程度:
it=σ(Win·xt+Rin·ht-1+bin).
(2)
輸出門(output gate)控制當前輸入xt對當前網(wǎng)絡輸出的直接影響:
ot=σ(Wout·xt+Rout·ht-1+bout).
(3)
候選階段門(candidate stage gate)代表當前輸入xt所創(chuàng)建的新的信息:
(4)
當前細胞狀態(tài)(current cell state)是需要被遺忘和需要被吸收的內(nèi)容的組合,其計算模式?表示逐點乘:
(5)
網(wǎng)絡輸出(network output)是輸入xt與當前細胞狀態(tài)的組合,其計算模式為逐點乘:
ht=ot?tanh(Ct).
(6)
在訓練層面,文獻[8]提出了一種通過補償設備變動的方式來增強魯棒性的訓練方案.文獻[9]使用二值網(wǎng)絡訓練來降低ReRAM表示能力的需求.在基于ReRAM的神經(jīng)網(wǎng)絡加速器設計方面也有一些相關工作.ISAAC[5]是一個使用Crossbar的CNN加速器,提出了流水線化的微體系結(jié)構和新的數(shù)據(jù)編碼技術.PipeLayer[10]是一個面向CNN的基于ReRAM的內(nèi)存計算(processing in memory, PIM)加速器,可以支持訓練和推斷計算.
在模擬器層面,尚未有研究提出一個開放的模擬框架.NVSim[11]對器件面積、時序、動態(tài)能量等非易失性存儲技術進行建模,但不是針對神經(jīng)網(wǎng)絡加速計算.PIMSim[12]是一個內(nèi)存計算的模擬器,用于傳統(tǒng)的內(nèi)存技術而不支持內(nèi)存和計算的本地化.NeuroSim[13]是一個面向神經(jīng)網(wǎng)絡的基于非易失性存儲陣列結(jié)構的集成模擬框架,但是其目標用戶是希望利用自身的模擬突觸設備快速評估系統(tǒng)級性能的設備工程師.該模擬架構結(jié)構簡單(僅支持針對MNIST手寫體識別數(shù)據(jù)集的2層MLP)并且缺乏相應的訓練和映射軟件.MNSIM[14]是一個針對基于ReRAM的神經(jīng)形態(tài)系統(tǒng)的仿真平臺,包括一個層次化的神經(jīng)形態(tài)計算加速器結(jié)構和可以靈活定制的接口,以及一個行為級的計算準確度模型.但是MNSIM只實現(xiàn)了仿真功能而不支持實際神經(jīng)網(wǎng)絡應用的評估.因此,本文是第1個開源的針對LSTM的基于ReRAM的神經(jīng)網(wǎng)絡加速的訓練和仿真平臺.
神經(jīng)網(wǎng)絡權重量化(quantization)是神經(jīng)網(wǎng)絡的常用壓縮算法.一般認為,神經(jīng)網(wǎng)絡參數(shù)過多、計算過于密集,因此需要通過壓縮算法以降低神經(jīng)網(wǎng)絡的有效權重數(shù)量,這樣既可以減少參數(shù),又能簡化計算;同時也能夠降低數(shù)值表示精度,即用低精度計算來代替高精度浮點數(shù)計算,達到降低開銷的目的.本文采用神經(jīng)網(wǎng)絡權重量化的出發(fā)點,主要是從ReRAM器件特性的角度來考慮.
正如1.1節(jié)介紹的,ReRAM器件的優(yōu)勢在于速度快、功耗低、并行性非常好,但是由于當前工藝不夠成熟以及器件本身的不完美特性,其數(shù)值表示精度低(每個單元所能表示的權重的離散值范圍與個數(shù)都有限)且受器件噪聲的影響較大,因此需要在訓練階段對神經(jīng)網(wǎng)絡權重進行量化,使得神經(jīng)網(wǎng)絡能夠符合實際器件的約束.其主要思想是將原有的權重進行放縮至器件精度范圍如28,然后四舍五入為整數(shù),并用該整數(shù)來表示權重值.
在層間數(shù)據(jù)的傳輸時,數(shù)據(jù)的精度也常常受到硬件開銷的限制.若該層間傳輸?shù)木认拗茷镾-bit,權重精度為b-bit,輸入的行數(shù)有2c行,則在Crossbar中計算時,其結(jié)果數(shù)據(jù)的數(shù)值范圍為2S×2b×2c=2S+b+c,即輸出的結(jié)果精度為(S+b+c)-bit,該結(jié)果需要被截取到層間數(shù)據(jù)傳輸?shù)南拗芐-bit.截取策略一般有2種,最直接的方法是對輸出結(jié)果等比例放縮到S-bit.這種方法的弊端是,當結(jié)果分布不均勻的時候會有較大的精度損失.另一種策略是截取結(jié)果中連續(xù)的S-bit作為最終結(jié)果,截取的起始位置則由數(shù)據(jù)分布來確定.
在訓練階段還需要考慮ReRAM加速器所需的DAC和ADC以及移位相加(shift-add)對神經(jīng)網(wǎng)絡的影響.因此在訓練的每次矩陣向量乘計算之前,需要將原有的輸入值按位進行拆分,即將原有的1個8-bit輸入向量拆分為8個1-bit輸入向量,并將其合并成新的輸入矩陣(訓練階段以此來加速訓練過程),以此操作模擬DAC的轉(zhuǎn)換過程.
在訓練階段的矩陣向量乘計算之后,首先需要統(tǒng)計該層所有輸出結(jié)果的最大值,并根據(jù)此最大值確定ADC的參考電流(該參考電流值也將用于模擬器的ADC模塊).在確定了該層ADC的參考電流之后,再將輸出結(jié)果按照DAC的順序,每8個行向量移位相加成1個行向量(即將擴展了8倍大小的輸出矩陣還原成DAC拆分之前的同一層輸出大小).
ReRAM器件的噪聲是指每個單元的噪聲,其大小與單元的電導值(即神經(jīng)網(wǎng)絡權重)有關.每個單元的實際電導值為均值為單元目標電導值的正態(tài)分布,則每個單元的噪音為均值為0、標準差受電導值影響的正態(tài)分布:Gnoise=N(0,δ2).本文采用的ReRAM器件標準差δ符合(由實際測量值擬合得出[15]):
δ=-0.000 603 4x2+0.061 84x+0.724 0,
(7)
其中,x是ReRAM單元的電導值.在Crossbar計算的過程中,由于每次讀取權重都會有偏差(ReRAM特性),因此在以上正態(tài)分布的約束下,每次計算都需要重新生成Gnoise值,并將其加在ReRAM單元的原有電導值上,作為新的讀出值.
在神經(jīng)網(wǎng)絡訓練時,為了快速收斂,首先按照經(jīng)典神經(jīng)網(wǎng)絡訓練方法進行訓練,得到高精度模型,在此基礎上,使用本文提出的定制化的訓練算法,訓練得到符合ReRAM約束的神經(jīng)網(wǎng)絡模型.綜合上文提到的ReRAM特性,本文提出的神經(jīng)網(wǎng)絡訓練算法如下:
1) 前向過程(forward pass)
步驟1. 神經(jīng)網(wǎng)絡權重8-bit量化.針對各神經(jīng)網(wǎng)絡層,分別選取各層的最大值max(W);保存現(xiàn)有權重為Wold;計算Wnew:
Wnew=round(Woldmax(W)×
(27-1))(27-1)×max(W).
(8)
步驟3. DAC轉(zhuǎn)換.將步驟2中獲得的inputnew進行按位拆分,生成新的1-bit向量.工作流程如圖3所示.
Fig. 3 DAC Workflow圖3 DAC工作流程圖
步驟4. 計算并添加噪音.首先生成標準正態(tài)分布噪音normal,進一步根據(jù)式(7)得到標準差為δ的Vnoise;將Vnoise加到現(xiàn)有Wnew上,得到帶噪音的權重值Wnoise.將DAC生成的1-bit向量與Wnoise相乘,得到輸出output.
步驟5. ADC與shift-add.首先確定各層參考電壓AD_V,其值為每層output的最大值,即AD_V=max(output) .將每個output值轉(zhuǎn)換成8-bit向量:outputt=round(outputAD_V×(27-1)).按照DAC拆分的順序,每8個outputti進行移位相加:為最終輸出結(jié)果向量.
2) 反向過程(backward pass)
步驟1. 將現(xiàn)有網(wǎng)絡權重值Wnoise恢復為Wold.
步驟2. 使用反向傳播算法(backpropagation)更新權重值.
以上為本文提出的針對ReRAM特性的神經(jīng)網(wǎng)絡訓練算法.利用此算法可以訓練得到符合ReRAM約束的神經(jīng)網(wǎng)絡模型.
模擬器的主要計算模塊為LSTM模塊和Linear模塊,分別負責LSTM網(wǎng)絡和全連接網(wǎng)絡的計算.除了計算模塊,還有數(shù)據(jù)輸入和輸出模塊,以及相應的數(shù)據(jù)緩沖區(qū)模塊(LSTM模塊的緩沖區(qū)與全連接模塊的緩沖區(qū)結(jié)構相似,僅有規(guī)模參數(shù)不同,因此視為同類模塊).如圖4所示,Linear模塊中包括DAC、若干ReRAM計算陣列、ADC和shift-add以及激活函數(shù),其輸出值將發(fā)送給下一層數(shù)據(jù)緩沖區(qū)(或者作為模擬器的輸出結(jié)果).LSTM模塊的特殊性在于,其激活函數(shù)為非線性函數(shù)Sigmoid和tanh(而非Linear和CNN中常用的ReLU),并且需要引入新的控制和計算功能——向量拼接和逐點乘.
Fig. 4 Overall architecture圖4 整體架構
1) DAC模塊
DAC模塊的主要作用是將輸入數(shù)據(jù)(8-bit)逐位轉(zhuǎn)換成1-bit數(shù)據(jù),即將一個8-bit向量轉(zhuǎn)換成8個1-bit向量,依次輸送給Crossbar模塊進行計算.如圖4所示,對于4個8-bit(層間IO限制)輸入數(shù)據(jù),對其bit位進行拆分,每個8-bit輸入數(shù)據(jù)按照從高位到低位拆分成8個1-bit數(shù)據(jù);再按照高低位次序,分8次輸入到ReRAM Crossbar中進行計算,因此Crossbar中的計算需要8個時間步完成.
2) Crossbar模塊
如圖1所示,將一列輸入電壓與ReRAM單元的電導值(權重值)相乘加得到輸出電流.在此過程中,同時需考慮2.4節(jié)提到的ReRAM單元的噪音,即對每一個ReRAM單元,其計算電流值為Iij=Vi×(Gij+noiseij).Crossbar中的權重值經(jīng)預先訓練和轉(zhuǎn)換得到,在模擬器運行啟動時讀入.Crossbar模塊的大小預先設置為1 152×128,其參數(shù)也是可調(diào)的.
3) ADC與shift-add模塊
4) LSTM模塊
在LSTM模塊中,集成了從上層獲取數(shù)據(jù)、DAC轉(zhuǎn)換、Crossbar的計算、ADC轉(zhuǎn)換這4部分.除此之外,由于LSTM網(wǎng)絡計算的特殊性,還需要引入逐點乘操作和非線性(激活)函數(shù).另外還需要在模擬器中開辟專門的存儲空間來存放本模塊循環(huán)輸入給下一個時間步的結(jié)果Ct.
經(jīng)過激活函數(shù)的計算后得出的結(jié)果ht作為下一時刻本層的輸入,Ct作為當前細胞狀態(tài)值用于計算下一時刻的細胞狀態(tài),因此需要在本層中存入相應的數(shù)據(jù)緩沖區(qū),待下一時刻本層計算Ct+1時使用.
Fig. 5 Computation Mode in LSTM module圖5 LSTM模塊的計算模式
模擬器的主要計算部分為矩陣向量乘,同時還要在每次進行Crossbar計算時生成滿足高斯分布的噪音(需要生成隨機數(shù)),所以使用CPU進行計算時其時間開銷很大.而GPU作為SIMD硬件,其計算并行性很高,適合做矩陣相乘的操作,目前也多用于神經(jīng)網(wǎng)絡計算,具有良好的加速效果.因此我們考慮使用GPU來加速模擬器,即將Crossbar的主要計算部分由GPU來完成,包括ReRAM單元噪音的生成.在GPU計算時,通過編寫cuda代碼,調(diào)用用于生成隨機數(shù)的curand庫生成符合條件的高斯分布噪聲,并將其加到對應的ReRAM單元的電導值上.加速算法的步驟如下:
步驟1. 初始化權重W.將所有層Crossbar的權重加載到GPU內(nèi)存中,并根據(jù)權重值計算該層權重對應的噪音標準差δ.
步驟2. 在System-C模擬器中,將每層輸入拼接成1個大輸入向量input,將input發(fā)送給GPU.
步驟3. 調(diào)用curand庫,生成標準差為δ的噪音Vnoise,并將該Vnoise與W相加,得到Wnoise.GPU調(diào)用cublas庫進行input和Wnoise的矩陣乘計算,得到輸出向量output.
步驟4. 將輸出向量output進行轉(zhuǎn)置(GPU中顯存的存儲方式為列優(yōu)先,而CPU內(nèi)存中的存儲方式為行有限).將結(jié)果拷貝回CPU內(nèi)存.
在具體實現(xiàn)上,使用CMake進行編譯,其中System-C相關代碼需要調(diào)用System-C 2.3.2庫,而Crossbar計算部分則單獨拆分出來,使用NVCC進行編譯.在程序鏈接時,將2部分代碼生成一個可執(zhí)行文件.
本項目所用的GPU為NVIDIA Tesla P100,其顯存大小為12 GB.加速效果如表1所示:
Table 1 GPU Acceleration Result表1 使用GPU計算的加速效果
由表1所示,“數(shù)據(jù)規(guī)格”為所設置的Crossbar大小,其中第1維表示Crossbar個數(shù),后兩維表示單個Crossbar的長和寬.在表1中,第1,2行分別列出了中等矩陣規(guī)模(1 024×1 024)和較大矩陣規(guī)模(3 000×3 000)的加速數(shù)據(jù).由于當前ReRAM工藝所限,其Crossbar陣列規(guī)模亦有限,因此在最后一行給出了Crossbar尺寸為1 152×128的計算加速數(shù)據(jù).表1中的第2列和第3列首先使用無噪音的隨機生成數(shù)據(jù)作為權重驗證計算準確性,可以看出,在無噪音情況下,當陣列規(guī)模較小的時候(第1行和第3行)使用GPU進行計算可以達到16~17×左右的加速比,在陣列規(guī)模較大的時候(第2行)更是能夠發(fā)揮GPU的并行優(yōu)勢,達到185×的加速比.之后再用有噪音的隨機生成數(shù)據(jù)評估性能,在使用GPU進行加速計算的情況下,當陣列規(guī)模較小時(第1行和第3行)加速比可達到400×左右,而當陣列規(guī)模較大時(第2行)其加速比更可達2 794×.由以上數(shù)據(jù)可以看出加速效果十分顯著.
作為案例研究,我們實現(xiàn)了如第3節(jié)架構的一個模擬器,并據(jù)此評估我們的訓練算法.
我們實現(xiàn)了一個ReRAM Crossbar仿真框架,并給出了基于Pytorch的定制化訓練算法,包含第3節(jié)中提到的諸多模擬電路特性;模擬器仿真部分基于System-C實現(xiàn),ReRAM設備模型來自文獻[15],默認的IO和權重精度均為8-bit(可以配置).
在具體的仿真實現(xiàn)上有諸多參數(shù)可以設置,包括電路參數(shù)和神經(jīng)網(wǎng)絡參數(shù),如表2和表3所示:
Table 2 Circuit Parameters for Simulator表2 模擬器所需電路參數(shù)
Table 3 Neural Network Parameters for Simulator表3 模擬器所需神經(jīng)網(wǎng)絡參數(shù)
基于表2和表3所列參數(shù),針對所需的仿真模型,通過提前設置LSTM模塊數(shù)、Linear模塊數(shù)、數(shù)據(jù)緩沖區(qū)模塊數(shù),并通過System-C中的信號將相關模塊串聯(lián),即可生成特定的模擬器,且該流程可通過代碼腳本自動生成.
對ReRAM神經(jīng)網(wǎng)絡加速器而言,面積和功耗是重要指標之一,因此本項目模擬器對此進行了32 nm尺寸下的參考設計,具體參數(shù)如表4所示.
其中,緩沖區(qū)(buffer)相關的模型參數(shù)來自CACTI[16],Crossbar面積參數(shù)來源于文獻[17],其他參數(shù)采用了ISAAC[5]的參數(shù).
Table 4 Hardware Parameters for Simulator表4 模擬器所需硬件參數(shù)
4.2.1 仿真算法評估
我們實現(xiàn)的LSTM網(wǎng)絡為應用在一個在TIMIT數(shù)據(jù)集上進行語音識別的網(wǎng)絡.該數(shù)據(jù)集的訓練集、驗證集和測試集大小分別為3 696,400和192.其中每條測試集語音幀數(shù)為619,因此總計有118 848幀測試數(shù)據(jù).其神經(jīng)網(wǎng)絡輸入維度為39(經(jīng)過MFCC預處理后的語音數(shù)據(jù),即每一幀的向量長度),輸出維度為61(語素分類數(shù)),包含一個LSTM層(隱層大小128)和一個全連接層.表5為仿真算法評估結(jié)果.
Table 5 Evaluation Result for Training Algorithm表5 訓練算法評估結(jié)果
我們使用通用的神經(jīng)網(wǎng)絡訓練算法作為基準,經(jīng)過30個周期的訓練,其分類準確度可以達到84.22%,此網(wǎng)絡模型稱為基準模型.在此基礎上,我們在訓練中引入了神經(jīng)網(wǎng)絡8-bit的權重量化和IO限制,結(jié)果顯示其準確度為84.17%,即有輕微的下降.接下來將基準模型直接部署模擬器上(后者在模擬過程中引入了所有的限制因素,包括權重量化、IO限制、ReRAM的非理想因素等),結(jié)果顯示由于權重量化、器件噪音以及DAAD等的影響,識別準確度下降為82.53%.最后我們將基準模型在ReRAM約束下進行微調(diào)(fine-tune),引入了所有限制因素,在網(wǎng)絡收斂后,可以得到其識別準確度84.05%,這個數(shù)據(jù)與將該網(wǎng)絡部署到模擬器上獲得的精度一樣.
表5表明:傳統(tǒng)的訓練算法在應用到ReRAM的推斷過程中,權重的量化和IO精度限制對神經(jīng)網(wǎng)絡的表達結(jié)果影響很小,但是由于器件噪音以及DAAD等的約束,會導致性能下降.而我們的定制化訓練算法將以上因素考慮到訓練過程中,再將訓練好的模型應用到ReRAM Crossbar的計算之上,可以有效減小器件因素帶來的性能下降.
4.2.2 模擬器的仿真準確度評估
在模擬器本身的準確性方面,我們做了基于SPICE模擬的評估.這是因為模擬器本身需要能夠滿足實際器件的物理特性和約束.現(xiàn)有的基于SPICE的ReRAM模擬工作,其電路方程非常復雜(對于一個2r×2c的Crossbar,需要求解2r×2c+2r×(2c-1)個電壓參數(shù)和3×2r×2c個電流參數(shù),且方程是非線性的),因此求解難度很高,模擬仿真速度慢.
本項目模擬器在計算速度和仿真準確性上做了權衡:1)Crossbar的輸入電壓為1-bit的值(只有高低電壓之分),以此來消除非線性的影響;2)考慮到Crossbar陣列中連線上的電容和電感對于計算影響很小[18],因此將其忽略;3)每當讀取電導值時,都要引入ReRAM variation[19].
在此基礎上,我們將結(jié)果與實際芯片的電路級仿真進行了比較.在陣列大小為1 152×128規(guī)模下,ReRAM單元高阻和低阻分別為800 KΩ和50 KΩ,導線電阻(bit-line,source-line,work-line)分別為87 mΩ,100 mΩ,1.16 Ω(130 nm工藝下的CMOS電路).在此條件下,我們得到的行為級模型計算的結(jié)果電流值與電路仿真的結(jié)果電流值其誤差不超過2.68%.
本文提出了基于ReRAM的長短期記憶網(wǎng)絡加速器訓練和仿真框架,包括針對ReRAM器件特性的定制訓練算法、時鐘驅(qū)動的行為級模擬器及其GPU加速.驗證結(jié)果顯示訓練算法能夠有效降低模擬器件帶來的噪音和數(shù)值精度損失等不利因素的影響,而該模擬器與SPICE仿真的計算結(jié)果誤差在2.68%以內(nèi),并且避免了SPICE對電路仿真耗時過長的缺點.與現(xiàn)有的工作相比,本文提出的模擬器項目完成了端到端的訓練和仿真,并將一個實際應用于TIMIT數(shù)據(jù)集語音分類的LSTM網(wǎng)絡部署并運行.未來我們會繼續(xù)完善該模擬器,增強各模塊的可配置性,為相關的加速器硬件設計提供探索方案.
致謝感謝北京市未來芯片技術高精尖創(chuàng)新中心的支持!