周川波
(作者單位:四川廣播電視臺520發射傳輸臺)
隨著互聯網發展、存儲介質價格降低、數據來源越來越廣泛,人們來到了大數據(Big Data)時代。深度學習[1-3](Deep Learning)可以讓那些擁有多個處理層的計算模型來學習具有多層次抽象的數據的表示。這些方法在許多方面都帶來了顯著的改善,包括最先進的語音識別、視覺對象識別、對象檢測、推薦系統[4-5]和許多其他領域,例如藥物發現和基因等。深度學習能夠發現大數據中的復雜結構。它是利用反向傳播(Backpropagation,BP)算法來完成這個發現過程的。BP算法能夠指導機器如何從前一層獲取誤差而改變本層的內部參數,這些內部參數可以用于計算表示。深度卷積網絡在處理圖像[6]、視頻、語音和音頻方面帶來了突破,而遞歸網絡在處理序列數據,比如文本和語音方面表現優秀。
深度學習方法雖然取得許多突破,但是也存在著模型參數數量大,訓練慢等問題,除了改進訓練算法,在軟件層面加快速度外,利用硬件加速訓練神經網絡也引起了學術界的關注。在2016年的ISCA會議和MICRO會議,發表了許多有關身神經網絡加速器的文章,下面簡單介紹這兩個會議的有關內容。
ISCA2016于6月18日至22日在韓國首爾召開,這次會議有近800名來自世界各地的工業界和學術界的專家學者參加,在參會人數上創下歷史新高。本屆會議共收到了291篇投稿論文,最終錄用了57篇,接收率為19.6%。
在這次大會上,SK Hynix的執行副總裁Seok-Hee Lee做了關于存儲技術的報告。由于CPU/GPU計算能力的迅速增長,未來系統性能的提高遇到了“存儲墻”(Memory Wall)的瓶頸,使存儲技術在計算機體系架構的重要性越來越高。除了繼續研究基于傳統的SRAM和DRAM的存儲架構,新型存儲技術,比如非易失性存儲器(Non-volatile Memory)的研究越來越受到學術界和工業界的重視。這次大會57篇論文中,大約20篇都與Memory相關。
MICRO是計算機體系結構領域的頂級會議,重點關注處理器體系結構的設計等內容。自1968年創辦以來,迄今已經舉辦了49屆,MICRO2016于10月15日至19日在臺北召開。本屆會議共收到了283篇投稿論文,最終錄用了61篇,接收率為21.6%。
從MICRO論文分析來看,目前體系結構研究的熱點體現在兩個方面:第一是對存儲結構的關注,第二是對神經網絡加速器的關注。
本文關注的是新型存儲器和神經網絡加速器研究的結合點——基于新型存儲器ReRAM的神經網絡加速器。與現在深度學習框架theano、tensorflow 使用軟件仿真和GPU加速[7]不同,使用ReRAM可以直接在內存中完成神經網絡計算,節省了數據在內存、CPU、GPU頻繁遷移產生的事件和能源損耗。本文首先介紹了ReRAM的原理和結構[8-9],基于ReRAM提出了一個簡單神經網絡架構[10],PRIME[11]強化了ReRAM架構的處理能力,使其適應于不同的神經網絡結構和較大規模數據,NEUTRAMS[12]消除了硬件約束,通過仿真層對硬件的抽象,使得在表示層設計的神經網絡不需要修改即可實現在不同硬件架構上移植。
電阻式隨機訪問存儲器[8-9](ReRAM),是一類通過改變單元(Cell)電阻來實現非易失性存儲(Non-volatile Memory)的隨機訪問存儲器。廣義的定義下并沒有指明實現電阻變化的材料,如非特別說明,本文所指的ReRAM是廣義ReRAM的一個子類,即使用金屬氧化物的ReRAM,這種ReRAM使用金屬氧化物層來實現電阻的變化。
如圖1(a),ReRAM單元是一種金屬-絕緣體-金屬(Metal-insulator-metal,MIM)結構,由頂層電極,底層電極和中間層金屬氧化物組成。當有額外的電壓通過時,ReRAM單元將從高阻態(High Resistance State,HRS)轉換成低阻態(Low Resistance State,LRS),通常高阻態表示邏輯“0”,低阻態表示邏輯“1”。
圖1(b)展示了ReRAM單元雙極轉換的I-V圖,將一個單元從高阻態(邏輯“0”)轉換成低阻態(邏輯“1”)稱為置位(SET)操作,將一個單元從低阻態(邏輯“1”)轉換成高阻態(邏輯“0”)稱為重置(RESET)操作。通常使用正電壓來進行置位操作,使用負電壓來進行重置操作。進行SET操作時,正電壓保持不變,觀察到電流增加,也就是說電阻減小,成為低阻態。進行RESET操作時,負電壓保持不變,電流趨向于零,也就是說電阻增大,成為高阻態。需要強調的是,目前情況下基于ReRAM的存儲器耐久度達到了1 012數量級,而基于PCM的存儲器耐久度在106~108。ReRAM有較好的耐久度。
圖1(c)展示了ReRAM的Crossbar整列結構,這是最能有效利用面積的陣列組織方式。目前有兩種通用的方法來提升ReRAM的密度、降低功耗,一種是多層的Crossbar架構(Multi-layer Crossbar Architecture),一種是多平面的單元結構(Multi-level Cell,MLC)。在MLC結構下,ReRAM的每個單元通過使用不同平面的電阻,可以實現存儲超過1bit的信息。實現這種一個單元存儲多bit信息需要非常好的寫控制器件,目前已經能夠做到一個單元存儲7bit信息。

圖1(a) ReRAM單元示意圖 圖1(b) 雙極轉換的I-V曲線圖圖1(c) Crossbar架構圖解
因為Crossbar架構的高密度,ReRAM被認為是可以替代DRAM成為下一代主存的關鍵技術。但也存在一些障礙,其中就是ReRAM的讀延遲與DRAM相當,但是寫延遲要就比DRAM久(5倍以上),目前也有一些優化措施提升ReRAM的寫性能,讓ReRAM與DRAM的差距在10%以內。除了ReRAM,還有其他的非易失性存儲器被研究者所關注,他們包括自旋轉移力矩磁性隨機訪問存儲器(Spin-transfer Torque Magnetic RAMSTT-RAM),相變存儲器(Phase Change Memory)等等,這些存儲器都能實現除數據存儲之外的邏輯運算能力。在這些存儲器中,ReRAM因為通過Crossbar結構對大規模矩陣向量進行有效計算,在神經計算中被廣泛應用。
2015年,Prezioso等人在Nature上的文章[10]指出,他們制造了一個12×12的基于ReRAM的Crossbar原型,利用該原型實現了神經計算,并把3×3的黑白圖片成功分成了三類。Prezioso等人從實驗的角度證實了ReRAM存儲器應用于神經計算的可能,這篇文章也成為了構造更龐大、更復雜神經網絡加速器的基石。
Prezioso的ReRAM原型如圖2,該結構集成了12×12的Crossbar,每個單元使用Al2O3/TiO2-x憶阻器(Memristor)。該原型芯片可用來實現圖3中的簡單神經網絡。圖3(b)中的單層感知機包含10個輸入,3個輸出,神經元之間的全連接構成了10×3=30個連接權重(Synaptic Weights)。感知機的輸出fi通過非線性的激活函數得到:

其中Ii通過矩陣運算得到:

Vj(j=1,...,9)是與圖片像素相關的輸入信號,V10是偏置,β用來控制激活函數非線性程度的參數,Wij表示神經元之間的連接權重。這樣一個簡單神經網絡已經可以用來執行一些模式識別任務了,例如,將3×3的黑白圖片分成三類,圖片的每個像素成為神經網絡的一個輸入。Prezioso等人使用的數據集包含N=30個圖片(如圖 3(c),這些圖片包含“z”“v”“n”三個形狀,每個形狀還包含9個被“污染”的版本(翻轉原始圖片中的一個像素),因為數據集有限,它們不光被用來訓練網絡,也被用來測試網絡。
在實際實現中,輸入信號通過電壓Vj來表示,取值為+0.1 V或者-0.1 V,代表黑像素點或者白像素點。對于偏置V10而言,通常為0.1 V。這種編碼方式使得標準數據集很均衡,即每一個類中圖片對應的輸入信號和接近于零,這加速了訓練的收斂。為了讓網絡的輸出層同樣有這種平衡性質,每個連接權重(突觸)使用了兩個憶阻器,因此Crossbar上憶阻器數量為30×2=60(如圖4(a),Prezioso等人使用了額外的器件來保證每一列上虛擬地線條件(Virtual Ground Conditions)得到滿足,減去了當前在相鄰列使用的流式結構來生成不同的輸出信號Ii,Prezioso等人確保Ohm定律能夠應用于Crossbar的每一列,對于不同的權重。


圖2 ReRAM Crossbar原型結構圖
(a)輸入圖片,3 3簡單二值灰度圖,(b)用來分類圖片的單層感知機,(c)輸入的圖片集合,(d)訓練算法流程圖。
其中Gij+表示憶阻器的有效電導率,也就是在電壓0.1 V下I/V的比率。公式(1)同樣也是通過外部元器件實現,這里β取值為2×105A-1。

對于每一步訓練而言(如圖4(d)),訓練集中中每個一樣例依次輸入 Crossbar,Crossbar 產生輸出為 fi(n),n為樣例的編號,權重的更新量依照如下公式計算:
其中fi(g)是第i個輸出的目標值,在Prezioss等人的系統中,取值+0.85表示正確分類,取值-0.85表示錯誤分類。一旦全部的N個樣例完成訓練,所有的更新量Δij(n)計算完成,權重依照下面公式更新:
其中η是一個常數。


圖3 簡單圖片分類任務

圖4 進行圖片分類任務時芯片的工作過程
(a)Crossbar上使用10×6的片段實現的單層感知機,(b)對二值圖片’z’的分類操作過程,深色像素對應+VR,淺色像素對應VR,這里使用的讀電壓VR=0.1V,寫電壓VW=1.3V,(c)更新權重的操作過程(這里表示的是第一列)。
對于3×3二值灰度圖片的分類結果如圖5,通常能夠在23代收斂。圖5嵌套的圖展示了權重W初始化值和訓練至21代時值的分布情況。
Prezioso 等人設計的芯片,在Crossbar上能夠直接完成公式2、公式3,通過額外的元器件,完成公式1、公式4、公式5的起算,實現了基本的神經網絡計算,并完成簡單的二值灰度圖片分類任務。不可否定的是,該研究啟發了學界基于ReRAM的神經網絡加速器的研究。但是在大數據和規模極大的神經網絡模型下,Prezioso等人的芯片在通用性、計算性能、功耗等方面都有待提升。下面我們將介紹性能和通用性更好的神經網絡加速器架構PRIME。

圖5 迭代次數與錯分數折線圖
章節3實現的芯片原型結構簡單,僅僅能夠處理30個連接權重,對于處理大數據是不足夠的。本章節介紹的基于ReRAM主存技術的神經網絡加速器架構PRIME[11]是遲萍等人發表在ISCA2016上的最新成果。PRIME基于 PIM思 想(Processing In Memory),使用的Crossbar陣列不光能夠被用來加速神經網絡計算,還能夠當成普通存儲器使用。遲萍等人不光設計了微架構(Microarchitecture),還提供了軟硬件接口,這使得開發者能夠基于PRIME實現不同種類的神經網絡。PRIME的實驗效果非常好,相比前人的神經網絡加速器,在遲萍等人的實驗環境下,PRIME的性能提升了2360倍,功耗降低了895倍。PRIME的特點如下:
(1)存儲架構既能用來加速神經網絡計算,又能作為普通存儲器。
(2)通過精心設計的電路和微架構,使得能在內存中進行神經網絡計算,同時占用面積很小。
(3)PRIME采用了一種輸入和突觸組合方法來克服精度問題。
(4)PRIME提供了一組軟硬件接口,使得開發者能夠實現不同的神經網絡,同時PRIME在編譯期間優化神經網絡映射時間,能夠實現與其他計算單元之間的并行運算。
PRIME的設計概觀如圖6(c),與其他神經網絡加速器不同(圖6(a),圖6(b),PRIME不需要額外的處理單元(Processing Units,PU),PRIME直接使用ReRAM單元來進行計算,為了完成這個目標,PRIME包含三部分,它們分別是內存子陣列,全函數子陣列,緩存子陣列。內存子陣列僅僅只有數據存儲的能力(同傳統內存子陣列相同),它們的微架構和電路設計同當前的ReRAM主存相似。全函數子陣列有兩種操作模式,在主存模式下,全函數子陣列功能和傳統主存相同,在計算模式下,全函數子陣列可以用來做神經網絡計算,需要使用一個PRIME控制器來控制模式的切換。緩存子整列用來為全函數子陣列提供數據緩存,實際設計時,靠近全函數子陣列的主存子陣列被用來作為緩存子陣列。所有的緩存子陣列都有獨立的數據接口,因此緩存訪問不會占用主存訪問的帶寬。當不需要使用緩存時,緩存子陣列也可以用來作為普通的主存。使用全函數子陣列進行神經網絡計算能夠享受數據遷移的超高帶寬,使用緩存子陣列也使神經網絡計算可以與CPU并行。
PRIME架構如圖7所示,有關要點如下:
第一,全函數子陣列的設計。解碼器和驅動。PRIME改進了一些元件,如圖7(A),這些元件解決了計算模型和內存之間的差異。

圖6(a) 傳統的處理器-協處理器架構 圖6(b) 使用3D集成技術的PIM方法圖6(c) PRIME設計概觀
列多路器。圖7(B)中的列多路起包含了模擬減法單元和sigmoid單元,這支撐了基本的神經網絡計算。
讀出放大器。如圖7(C),讀出放大器使得低精度的ReRAM單元支持高精度的神經網絡計算。同時也提供了卷積神經網絡操作相關的器件。
緩存連接。如圖7(D),它建立在全函數子陣列和緩存子陣列之間,使得全函數子陣列能夠訪問緩存子陣列上的任意位置。
第二,緩存子陣列的設計。緩存子陣列被設計用來緩存全函數子陣列的輸入輸出數據。全函數子陣列不需要CPU的參與就可以直接訪問緩存子陣列,使得它可以與CPU并行執行。
第三,PRIME 控制器。如圖7(E),PRIME控制器解碼指令,將控制信號傳給全函數子陣列。PRIME控制器使得全函數子陣列可以在內存模式和計算模式之間轉換。
第四,克服精度挑戰。精度挑戰包含幾個方面:輸入精度、權重精度、輸出精度。在PRIME設計上,采用了不同的假定,分別是輸入電壓3-bit精度(8個層級的電壓),4-bit精度的權重,6-bit精度的輸出。需要指出的是,PRIME使用了2個3-bit來實現6-bit的輸入信號,使用兩個4-bit來實現8-bit的權重。
第五,實現的神經網絡算法。PRIME實現了感知機層、卷積層、池化層、本地應答規則化層等等。
(A)針對不同電壓源的字線(Wordline)驅動,(B)模擬減法和sigmoid電路的列多路器,(C)可重構的讀出放大器,支持多層輸出,加入了ReLU和4-1最大池化函數單元,用于卷積神經網絡,(D)全函數子陣列和緩存子陣列之間的連接,(E)PRIME控制器
PRIME基于ReRAM,提升了神經網絡計算的計算性能,降低了功耗,適用于MLP、CNN等網絡結構,在MNIST數據集上取得了很好的實驗效果,是一個值得關注的神經網絡加速器架構。
章節3介紹了一個實現神經網絡計算的最簡化的微架構,章節4進一步深化了架構的設計,使其能夠支持大規模較復雜的神經網絡。但是這兩種方法都是基于特定的硬件,支持特定的神經網絡,抽象化程度較低,YuJi等人在前人研究的基礎上,提出了NEUTRAMS工具集[12],該工具集借鑒了計算機系統層層抽象的思想,提出了神經網絡系統的分層結構,使得基于該工具集進行神經計算不依賴特定的硬件結構。NUTRAMS工具集的分層思想參考了計算機系統的分層思想(如圖8(a)),NUTRAMS的結構(如圖8)分為:表示層、轉換層、映射層、仿真層。

圖8 與傳統計算機系統架構類比

圖7 PRIME架構
下面給出了NUTRAMS各層簡介:
表示層,參照大部分神經網絡模型給用戶提供的接口,表示層大都提供了兩種操作,分別為集群(Population,大規模神經元的集合,其實也就是神經網絡所謂層的概念,如隱藏層,顯示層)和映射(Projection,集群之間的連接,也就所謂的層與層之間的權重)。一個使用集群和映射操作的例子是:

創建一個神經網絡需要兩類信息:(1)節點信息,及神經元、突觸種類;(2)邊信息,即權重、延遲、其他用來描述映射的屬性。這也就是表示層所有表示的信息,這類可以用于傳統神經網絡如多層感知器,也可以用卷積神經網絡。
轉換層,轉換層是NUTRAMS的核心,就是在該層次突破了硬件的約束。YuJi等人使用的核心思想是分治算法,將復雜的神經網絡連接劃分成更小的連接,讓其滿足硬件約束。圖9是一個數據流示意圖,圖9(A)是原始神經網結構,圖9(B)圖9(C)描述了兩種減少權重的方法,一種是將前置集群拷貝,和后置集群分別連接,一種是將前置集群合并,與后置集群連接,圖9(D)是原始神經網絡的劃分圖,大規模的連接被劃分成了小規模的連接,使直至該網絡適合于特定的硬件架構。關于如何進行劃分和怎么保證劃分之后神經網絡的計算精度,可以參考YuJi等人的論文。
映射層,映射層是用來將神經元分配到計算核心,構建連接關系,填寫路由表。最優映射不光能夠充分有效地利用芯片資源,也能夠保證正確性。YuJi等人提出的映射方法傾向于將密切聯系的神經元放在一起。根據之前的描述,經過轉換層的轉換,結果為相互連接的集群,每一個連接子矩陣(經過分治算法的劃分得到的)滿足硬件約束。然后所有的神經元被分配到虛擬核心上,再構建虛擬核心到物理核心的映射。YuJi等人使用了KL(Kernighan-Lin)劃分策略,該策略將映射抽象成圖的劃分問題,嘗試在劃分邊界上最小化聯系。該方法首先隨機生成一個映射格局,然后二分節點,聯系緊密的模塊保持在同一個劃分中。這個過程將一直持續,直到臨近的兩個節點被放到任意的最終劃分結果中。通過這種方法實現了聯系的最小化,并構建了一個映射。
仿真層,仿真層是對硬件芯片的抽象,NUTRAMS將芯片劃分成三類邏輯模塊:計算核心、主存、片內網絡(Network on Chip,NoC)。對于計算核心的仿真步驟為:(1)得到當前輸入脈沖(Input Spike)和突觸權重,(2)計算并更新神經元狀態,(3)發射新脈沖。如果當前有很多輸入,重復步驟(1)和步驟(2)。對于主存的仿真方法很直觀,只需保存神經網絡模型的突觸權重即可。對于片內網絡的仿真方法也是很直接的:源神經元發出的脈沖產生一個從源計算核心到目的計算核心的NoC數據包(X-Y路由策略)。
NEUTRAMS提供了更高層次的抽象,使得神經網絡設計不在受硬件約束,相同的神經網絡易于移植到不同的硬件芯片上。YuJi等人設計了將NUTRAMS工具集應用在PRIME架構上的實驗,取得了很好的效果
本文首先介紹了深度學習、ISCA、MICRO的有關內容和背景,重點關注基于ReRAM的神經網絡加速器,然后介紹了ReRAM的原理和結構,介紹了基于ReRAM設計的簡單神經網絡架構,該架構僅僅支持30個連接權重,支持神經網絡十分有限。PRIME架構極大的擴展了對神經網絡計算的支持,針對不同網絡(多層感知器,卷積神經網絡)和較大規模數據集(MNIST)都取得了較好的實驗效果。PRIME雖然對神經網絡加速效果較好,但是其提供的軟硬件接口仍然只針對PRIME架構本身,缺乏擴展性。

圖9 數據流示意圖
NEUTRAMS工具集是為了消除硬件約束提出來,該工具集通過仿真層對硬件的抽象,使得在表示層設計的神經網絡不需要修改即可實現在不同硬件架構上移植。