?

智能芯片的評述和展望

2019-02-20 03:34周聖元陳云霽陳天石
計算機研究與發展 2019年1期
關鍵詞:指令內存權重

韓 棟 周聖元 支 天 陳云霽 陳天石,3

1(中國科學院計算技術研究所智能處理器中心 北京 100190)2(中國科學院大學 北京 100049)3(上海寒武紀信息科技有限公司 上海 201203)

人工智能是研究如何讓計算機從原始數據獲取知識,實現類似人類的行為或智能的學科.人類作為地球上擁有最高智慧的生物,有著區別于傳統計算機的感知、學習和決策等能力.近些年,人工智能技術在許多商業領域的應用取得了巨大的成功.人工智能技術使得電腦能夠像人類一樣,在復雜多變的真實環境中做出判斷和決策.其中發展最為迅速的技術是模仿人類大腦神經系統結構的人工神經網絡(ANN).人工神經網絡的基本單元是感知器,它可以接受一系列輸入然后產生輸出.多層的感知器組成一個層級性的網絡結構,每層網絡中的感知器接受上層的輸入,然后生成輸出傳遞給下一層,最終產生輸出.

人工神經網絡的概念最早由McCulloch和Pitts[1]在1943年提出,并且他們提出了第1個神經網絡模型,即神經元模型(M-P)模型.之后,基于神經突觸模型,Knott[2]在1951年提出了第1個神經網絡學習策略.1958年,Rosenblatt[3]發明了用來進行模式識別的感知器模型,并且證明了在監督學習的策略下感知器模型可以收斂.1974年,Werbos[4]發明了著名的監督學習算法——反向傳播算法(BP),這大大推動了神經網絡的發展.

近年來,隨著世界各地科研人員和科技公司的重視和投入,人工智能的研究取得重大進展,在語音識別、圖像分類、自然語言處理、系統辨識與控制、醫療診斷等應用領域取得了巨大突破[5-17].

傳統的人工智能算法運行于CPU或GPU之上,但隨著人工智能算法中人工神經網絡的網絡結構迅速膨脹,單一的CPU或GPU在人工智能的處理上十分低效,于是很多硬件研究人員也開始轉向能夠有效支持人工智能算法的性能更強大的領域專用處理器的研究及多核處理器系統的研究.

但是,隨著半導體工藝達到納米級的尺度,柵氧化層泄漏損耗在整個芯片能量消耗中占據更大的比重,而且溝道摻雜濃度提高會導致結泄漏損耗增加[18].所以,能量密度的增加使得保證所有晶體管在全頻率和額定電壓下同時開關動作,并且保持芯片工作在安全溫度范圍內變得十分困難.

此外,Esmaeilzadeh等人[19]的研究表明,在給定溫度和能量的要求下,8 nm的集成電路中需保持斷電的元件(dark silicon)的比例會達到50%~80%,系統僅僅能在最好的情況下獲得7.9倍的加速.在這種情況下,研究人員開始研究專用的協處理器和通用處理器組成的混合系統來提高系統的性能.

1 人工智能簡介

1.1 經典算法

本節主要講述SVM算法[20]、k-Means算法[21]以及感知器算法[3]等經典人工智能算法.

SVM算法[20]是一種通過線性和非線性變換,對二分類問題進行有監督學習的算法.其首先通過核函數,將支持向量映射到高維度空間,然后在高維度空間依據范式進行線性分類,最終得到分類超平面.然后其通過已有的核函數以及該超平面對后續測試集進行分類.

k-Means算法[21]是一種通過迭代將數據進行無監督學習的聚類算法.其首先任選k個數據作為聚類中心,然后對每個數據點計算其與聚類中心的距離,再后重新計算聚類中心,最后判定用以評測數據的測度函數是否收斂,如果收斂則結束,否則繼續調整聚類中心.

感知器算法是一種針對二分類問題的監督學習算法.其通過權重和輸入進行內積,得到激活值,然后依據激活值與數據標定結果,對權重進行更新,從而逐漸收斂得到二分類權重.

1.2 人工神經網絡基本算法

近幾年,人工智能算法中的人工神經網絡算法所占比重日益加大.傳統的神經網絡使用Sigmoid函數作為神經元的激活函數,使用BP算法作為訓練方法.但BP算法由于其殘差會從靠后一個層向前一層反饋的時候,乘以因子得到前一層的殘差,因此,如果因子總是小于1,會產生“梯度消失”現象.隨著網絡層數的加深,“梯度消失”的現象更加嚴重,優化函數容易陷入局部最優解,并且局部最優更可能偏離全局最優,深層網絡的效果可能還不如淺層網絡.深度神經網絡(DNN)[22]使用ReLU函數代替了Sigmoid函數,從而有效克服梯度消失的問題.最初,DNN中采用全連接層進行連接,但是因為網絡輸入層的節點很多,同時全連接層要求下層神經元和上層所有神經元形成連接,這樣一來網絡的參數數量會迅速膨脹.但是,實際上,在很多應用中,譬如圖像領域,只有圖像中局部的像素之間才存在關聯,所以下層網絡只需要和上層網絡中的局部生成連接即可.卷積神經網絡(CNN)就是基于這種思想,通過卷積核將下層和上層進行連接,卷積核參數在上層節點中共享,從而減少了網絡的參數.卷積神經網絡主要包括卷積層、匯聚層、歸一化層和全連接層(分類層)這4種網絡層.

1) 卷積層.卷積層通過幾個濾波器(核)提取輸入數據的特征.假設卷積層的輸入尺寸為xi×yi×di,每一個卷積核的尺寸為Kx×Ky,步長為Sx,Sy.則輸出特征圖(a,b)處的值為

其中,f(*)一般為激活函數,如ReLU函數;wi,j,k和β代表相應的權重和偏置.

2) 匯聚層(池化層).匯聚層的主要作用是降低特征圖的尺寸,進一步減少網絡中的參數數量,同時減少過擬合的出現.匯聚層常用最大值函數或平均值函數作為濾波器的形式,保留局部的最大值或平均值.設窗的大小為Kx×Ky,最大值的情況表示為

3) 歸一化層.歸一化層通過不同特征圖的相同位置值的對比來模擬生物神經元的橫向抑制機制.歸一化層有2種類型,局部對比歸一化(LCN)(即將每個數據與同一特征層相鄰位置的數據進行歸一化)和局部響應歸一化 (LRN)(即每個數據與不同特征層的同一位置的數據進行歸一化).實際使用中,LRN由于其跨越特征層做歸一化的特性,因而使用較多.LRN形式為

其中,α,β,k是該層的參數,M參數是特征圖fi的鄰居個數.

4) 分類層(全連接層).分類層通常作為神經網絡的末層,輸出節點與輸入層全連接,可計算為

其中,f(*)是最大值函數或其他激活函數;w和β代表相應的偏置.

1.3 常見人工智能應用算法

1.3.1 AlexNet

AlexNet[23]是一個8層的卷積神經網絡,在ImageNet LSVRC-2010比賽對120萬圖像的1 000分類問題中,它達到了top-1 37.5%,top-5 17.0%的錯誤率,并且該模型的變種在ILSVRC-2012比賽中獲得了冠軍.

AlexNet的前5層是卷積層(某些卷積層中含有池化層),后3層是全連接層,最后一層是一個1 000維的softmax層.它有4個新的特征:

1) 使用ReLU非線性激活函數.采用了非線性的激活函數ReLU,比傳統使用Sigmoid的等價網絡快6倍.

2) 多GPU訓練.120萬張圖片訓練時的計算量太大,因此將它們的網絡分布在了2個GPU上.它們在每個GPU上放置一半的神經元,同時只在某些特定的層上進行GPU之間的通信.

3) 局部響應歸一化.即引入了LRN,從而增加了模型的泛化能力.

4) 重疊池化.傳統的CNN中采用局部池化層,即池化單元互不重疊,亦即步長s等于窗的邊長z.在該網絡中采用了s=2,z=3的池化層,即重疊池化.

AlexNet針對過擬合采取了2種方法:1)數據增強.該網絡中采用2種數據增強的舉措.一是進行圖像變換和水平翻轉,從256×256的圖像中提取5個(四角及中心)224×224的圖像塊并進行水平翻轉,最終得到10個圖像,對這10個圖像在softmax層的結果進行平均.2)失活(dropout).失活是指以0.5的概率把隱層神經元的輸出設為0,這樣來強迫神經元學習更魯棒的特征.在測試時使用所有神經元,但將它們的輸出乘以0.5.該網絡的前2個全連接層使用了失活方法.

1.3.2 GoogLeNet

GoogLeNet[24]是一個22層的深度卷積神經網絡,基于Inception架構[25],該架構能夠在保持計算量不變的基礎上增加網絡深度和廣度.GoogLeNet在ILSVRC2014比賽中取得了當時的最好結果.

提高深度 CNN性能最直接的方式是增加其深度和廣度.然而這種方式使得系統更容易過擬合,同時也增加了計算資源的消耗.解決該問題的基本方法是將全連接層替換為稀疏的全連接層或卷積層.然而在非均勻的稀疏結構上進行數值運算時,現行的計算架構效率低下.

Inception架構基于的主要思想是:使用容易獲得的稠密子結構近似覆蓋卷積神經網絡的最優稀疏結構.據此產生了圖1所示的結構:使用不同尺度的卷積核進行卷積,提取更加豐富的特征,然后進行聚合.

Fig. 1 Initial architecture of Inception network圖1 初始Inception結構

Inception架構基于的另外一個思想是:在計算要求高的地方減少維度.圖1中所示的的卷積核仍然會帶來很大計算量,于是使用了的卷積核降維之后再進行卷積.如圖2所示:

Fig. 2 Final architecture of Inception network圖2 最終Inception結構

1.3.3 ResNet

ResNet[26]基于殘差學習框架,擁有更深的網絡結構,但復雜度仍然較低.該網絡在ImageNet測試集上取得了3.57%的錯誤率,并且在ILSVRC2015分類任務中贏得了第1名.

在解決梯度消失的基礎上,一方面較深的模型效果更好,另一方面隨著深度的增加準確率會發生飽和,然后迅速下降.這種退化不是由于過擬合引起的,增加層數會帶來更大的誤差.ResNet通過引入深度殘差學習框架,解決了退化問題.

ResNet中的思路是:

1) 殘差學習.如圖3所示,假設多層網絡可以近似復雜函數H(x),這等價于讓網絡近似殘差函數F(x)=H(x)-x,然后加入前饋得到H(x)=F(x)+x.

2) 快捷恒等映射.多層網絡可以表示為y=F(x,Wi)+x,如果F,x維度不匹配,可以使用Ws來匹配維度y=F(x,Wi)+Wsx.

3) 網絡結構.先設計簡單網絡,設計原則為:相同輸出特征圖尺寸的層具有相同數量的濾波器;特征圖尺寸減半時將濾波器數量加倍.然后在簡單網絡基礎上加入快捷連接.

Fig. 3 Residual network圖3 殘差學習網路

1.3.4 Faster R-CNN

先進的目標檢測算法依靠區域提議算法(region proposal algorithm)和基于區域的卷積神經網絡(R-CNN).其中Fast R-CNN利用很深的網絡實現了接近實時的速率,而提議算法(proposals)是計算的主要瓶頸.R-CNN使用GPU進行運算,將區域提議算法在GPU上實現是一個加速的方法,但這樣就不能進行共享計算.為此,Faster R-CNN[27]引入了區域提議網絡(RPN),代替了以前使用的選擇性搜索(selective search)或滑動窗口算法進行區域提議.RPN與檢測網絡共用全圖像的卷積特征,實現了幾乎零成本的區域提議過程.

RPN的思路是:基于共享卷積層所得的特征圖對可能的候選框進行判別.RPN引入錨點(anchor)機制,對特征圖進行卷積相當于使用滑窗在特征圖上進行平移,在特征圖的每個位置可以預測多個提議區域(假設有k個),每個位置可以在滑窗的基礎上加入尺度和長寬比,例如在文獻[27]中定義3種尺度和3種長寬比,則k=9,這樣的每個候選窗口稱為一個錨點,對于W×H的特征圖有W×H×k個錨點.之后的網絡產生2個分支,一個分支用于計算目標邊框的坐標和寬高(邊框回歸層reg),一個分支用于判斷邊框確定的區域是不是目標(分類層cls).

為了訓練RPN,給每個錨點按照4個規則標定類別標簽(是或不是目標):1)如果候選框與真實框交并比(IoU)最大,標記為正樣本;2)如果候選框與真實框交并比IoU>0.7,標記為正樣本;3)IoU<0.3標記為負樣本;4)其余情況對訓練目標沒有幫助.然后根據Fast R-CNN的多任務損失方法最小化目標函數,損失函數為

為了能夠讓RPN和Fast R-CNN共享卷積層,有3種方法:1)交替訓練.先訓練RPN,然后用提議訓練Fast R-CNN,Fast R-CNN微調的網絡用于初始化RPN.2)近似聯合訓練.每次BP迭代時,前向過程生成區域提議,反向傳播過程中,對共享層組合RPN損失信號和Fast R-CNN損失信號,其中忽略了提議邊界框的導數,故為近似聯合訓練.3)非近似聯合訓練.加入了使邊界框坐標可微分的ROI(region of interesting)池化層.

1.3.5 GAN

生成對抗網絡(GAN)[28]同時訓練一個獲取數據分布的生成網絡G和一個用來判斷樣本是否屬于訓練集的識別網絡D,這是一個對抗的過程.訓練的目標是,使G最大化讓D出錯的可能.這是一個極小化極大值(minimax)問題,訓練的結果是G生成近似訓練集的數據分布,而D判斷樣本屬于任何一方的概率都是1/2.在G和D都是多層感知器(MLP)的情況下可以使用BP算法進行訓練.

2 人工智能處理器

2.1 FPGA

FPGA的可編程性和可重構性等特點允許在短時間內對定制的設計進行評估,以此縮短開發周期,節省設計的開發費用.因此,有很多研究人員基于FPGA平臺進行人工智能處理器的研究和實現.

Farabet等人[29]實現了一個類RISC(精簡指令集計算機)的可編程卷積網絡處理器.該處理器通過多個DSP并行地計算使用相同的輸入的不同輸出的局部和,然后平移輸入(窗口)來完成相應輸出的卷積.Farabet等人[30]后來在Xilinx Virtex 6 FPGA平臺上實現了一個可擴展數據流硬件結構.該系統包括多個計算單元(tiles),每個計算單元集成了多個一維卷積器(MAC)來構成二維卷積器.

由于二維卷積廣泛應用于圖像處理等場景中,Cardells-Tormo等人[31]提出了用于二維卷積的基于FPGA的結構.這種結構需要相對更少的片上內存開銷,因此可以用低成本的FPGA實現.此外,他們還提出了單位面積最大吞吐量準則,用來說明這種結構的高效性.

之后,隨著任務復雜度日益增加,因此,為了能處理越來越復雜的多層感知器,Ordoez-Cardenas等人[32]使用低成本的Xilinx Spartan-3E FPGA實現了多層感知器神經網絡(MLP)和相應的學習算法.他們設計了一個模塊化的方案,使系統能夠靈活地調整到特定的應用中.同時,流水線結構也提高了這個系統的性能.

在處理神經網絡系統的過程中,由于計算量增大,因此,功耗問題日益嚴峻,Maashri等人[33]發明了一個用于通用識別的神經網絡系統.該系統基于一個用于視覺處理的仿生神經網絡模型HMAX,相比于CPU和GPU,它能夠分別達到7.6倍和4.3倍的加速,節省12.8倍和7.7倍的能量消耗.

Gokhale等人[34]設計的nn-X則是一個可擴展、低功耗、用于加速深度神經網絡的協處理器,它能夠達到理論227Gops/s和實際200Gops/s的性能,同時整個系統的功耗只有8W.在Xilinx ZC706平臺上實現的內核使用2個ARM Cortex-A9 CPU作為主處理器,主處理器用來解析神經網絡并將其翻譯為相應的指令,然后將數據傳遞給協處理器nn-X.

隨著研究的推進,脈動型結構突顯出其在執行卷積運算中的優勢.SCoNN[35]是一個用于CNN推理階段的脈動型(systolic)硬件實現.它通過多個2D數組處理單元和一個滑窗實現并行的卷積處理.為了節省更多的能量和帶寬,SCoNN[36-37]直接把中間結果儲存到RAM中來作為下層的輸入數據.Sankaradas等人提出了由systolic并行卷積基元和一個數據傳輸專用控制器組成的協處理器,它擁有用于協處理器的片下高帶寬內存,同時使用較低的數據精度,在每次內存操作時使用打包過的數據字.該協處理器在FPGA中實現,需要和主機一起工作.但是,脈動陣列機具有很多優缺點.其優點有:可以大量復用輸出數據;更簡單的處理單元設計;為并發性調整的流水線;對計算密集型問題有相對較高的性能;簡單數據流和常規控制;具有可擴展性和模塊化特性.缺點有:對不同規模人工智能算法的靈活性不足;存在內存帶寬約束等[38-39].

隨著人工智能算法的數據量越來越大,通常需要使用額外的儲存空間來儲存它們.同時,隨著人工智能算法越來越復雜,帶寬需求越來越大.因此,研究者們開始尋找新的結構來充分地重利用(reuse)人工智能算法中的數據.

Qiu等人[40]提出了一個基于FPGA的人工智能加速器,它使用了全連接層的權重矩陣的奇異值分解來減少內存訪問,同時采用動態精度數據量化方法來減少能量和邏輯消耗.他們發現卷積層的核心是計算而全連接層的核心是內存,基于此,他們使用不同的方案對待2種數據.他們利用Xilinx Zynq ZC706實現的設計在150 MHz下的CNN的運算中達到了137.0 GOP/s的性能.

Zhang等人[41]實現了基于VC707 FPGA的61.62 GFLOPS人工智能加速器.他們使用了循環分塊和轉化技術來定量分析卷積層的計算和帶寬需求,然后借助roofline模型開發了一個統一的結構.

Suda等人[42]則更深入地進行了Zhang等人的研究.他們不僅關注卷積層的加速,還提出了一種系統的設計開發方法,來最大化基于OpenCL的FPGA加速器的性能.

為了減少額外的內存和帶寬開銷,Peemen等人[43]提出新型的人工智能加速器.他們設計了一種靈活的內存管理方式,用來支持數據訪問和優化人工智能算法中的數據位置.這種加速器能夠最小化片上內存需求,同時能夠最大化數據的利用率,因此這種方法避免了不必要的封裝(footprint)和能量消耗.

此外,除去將人工神經網絡部署于FPGA,Rice等人[44]基于George和Hawkins[45]研究的理論結構,實現了基于FPGA的分層貝葉斯網絡模型.結果表明相比于全部在Cray XD1運行的軟件,他們的硬件提升了75倍的平均吞吐量.Kim等人[46]提出了一種生成高效置信網絡(deep belief nets)原型,該模型比在高檔CPU上最優的軟件實現快了25~30倍.

2.2 ASIC

專用集成電路(ASIC)是一類專用的電路,能夠給設計者實現應用最大程度的自由.為了滿足不同消費者的需求,ASIC常常有更小的體積、更低的功耗、更高的性能、更強的安全性和量產之后更低的成本.

卷積運算在人工智能算法中占據很大的運算量,它本質上適合做并行運算.早期關于專用人工智能芯片的研究主要關注如何盡可能快速地實現卷積運算,以滿足實時處理的需求.

Lee和 Aggarwal[47]提出了一種并行的二維卷積結構,這種處理器擁有和圖片像素數目相同的處理單元,這些處理單元之間網狀相連,它可以使用任意大小的2維或3維的卷積核.Kamp等人[48]提出了一種全集成的2維濾波器(卷積核)宏單元(macrocell),它提供了7×7的可編程的卷積核,但只適用于垂直對稱的參數掩模.

Kim等人[49]提出了一種201.4 GOPS的實時多目標識別處理器.芯片模仿人類視覺系統,在含有3級流水線的神經感知器中使用了仿生神經網絡和模糊電路.

由于人工智能算法中的Deep CNN在許多計算機視覺任務中能夠達到最高的準確率,在經濟的推動下出現了很多Deep CNN加速器.Sim等人[50]提出了一種Deep CNN加速器,它擁有1.42 TOPS/W的能量效率.為了減少能量消耗,他們應用了一個雙范圍的乘法累加器(DRMAC)來進行低能耗的卷積運算.他們利用了分塊排列的方式(tiled manner),使用和片上存儲相同大小的數據塊和壓縮的卷積核進行卷積運算,來減少片下內存的開銷和帶寬需求.

Fig. 4 Architecture of DianNao圖4 DianNao結構方框圖

此外,還有利用人工智能算法內在錯誤彈性(intrinsic error resilience)的硬件加速器研究.Hashmi等人[51]提出了一種仿生的計算模型,并且揭示了相對皮質網絡(relative cortical networks)的內在容錯性.這個模型的關鍵是使用固定型方案(stuck-at)來保護函數計算結果,當硬件出現錯誤時不做任何處理.人工智能算法本質上能夠抵抗短暫或者永久的錯誤,基于此,Temam[52]提出并且實現了一個能夠忍受多重錯誤的人工智能芯片.它可以使用多種的基于ANN的算法,實現一些高性能任務的運算.它和其他定制芯片一樣,相比通用芯片能夠提高2個數量級的能量效率.

3 DianNao系列加速器

3.1 DianNao

DianNao[53]作為DianNao系列中最早的加速器,其計算峰值達到452 GOP/s,在臺積電65 nm的工藝下,面積為3.02 mm,功耗為485 mW.DianNao主要關注內存使用的加速,其利用陳天石等研究者提出的啟發式模型方法,達到了計算量和內存體系之間完美的平衡,從而獲得了相比CPU具有3個量級的能量效率提升.同時,盡管GPU在運算速度上超過了DianNao,但它需要的能量和面積是DianNao的100倍.

DianNao基本結構為一個控制邏輯(CP)和其控制一個輸入緩沖區(NBin),以及另一個緩沖區(SB)和其將輸入神經元和權重傳遞給的神經功能單元(NFU),然后還包括輸出緩沖區(NBout),其從NFU接收輸出神經元,如圖4所示.其中使用了一個內存接口來為3個緩沖區中的數據流進行路由.其NFU利用交錯的3級流水線結構,將不同類型的層在DianNao中被分解為2個階段或者3個階段,并且在CP的控制下進行流水線運算,同時對多個輸出神經元進行計算.

為了在降低計算的能量消耗的同時,優化數據傳輸策略,減少數據傳輸的能量,DianNao將片上存儲被分為3部分:輸入緩沖區(NBin)、輸出緩沖區(NBout)和突觸(權值)緩沖區(SB).其收益如下:1)可以調整SRAM為合適的讀寫帶寬,而不必是同等的帶寬.由于權重的數目大約比輸入神經元和輸出神經元的數目高一個量級,這種專用的結構可以為讀請求提供更好的能量和時間性能.2)分離儲存和神經網絡位置先驗信息,使得DianNao能夠避免數據沖突,這種發生在緩沖區的沖突往往需要消耗時間和能量來彌補.3)DianNao能夠讓NBin緩沖區工作在循環緩存狀態,來重用輸入神經元數據.因此,DianNao相比CPU或GPU將數據傳輸帶寬減少到1/30~1/10.

3.2 DaDianNao

DaDianNao[54]是在DianNao的基礎之上構建的多核處理器,其處理器核心的規模擴大到16個,同時增大了片上內存.DaDianNao基于28 nm工藝,運行頻率為606 MHz,同時其面積只有67.7 mm2,功率只有大約16 W.DaDianNao不僅支持推理算法,同時支持訓練算法,以及權值預訓練環節(RBM).

Fig. 5 Architecture of DaDianNao圖5 DaDianNao結構方框圖

為了有效避免邏輯和數據的擁塞,DaDianNao采用如圖5所示的分塊(tile-based)結構,即將所有輸出神經元的運算被分為16個片段,分給相應的運算塊(tile).其每個運算塊(tile)同時處理16個輸出節點對應的輸入節點,即單個芯片同時進行256個并行運算.

DaDianNao一方面使用了大量分布式的eDRAM來使所有的突觸(權重)靠近運算器,另一方面通過采用了一個高帶寬的胖樹(fat tree)結構來向每個塊(tile)廣播相同的輸入數據以及收集每個塊中不同的輸出節點值.其在胖樹結構的末端,有2個eDRAM起到和DianNao中的NBin和NBout相同的作用.同時,中心eDRAM中的輸入神經元值被廣播到所有的塊(tile)來計算不同的輸出,這些輸出被集中到另一個中心eDRAM.這樣,一方面,在MLP和卷積層中,比起神經元,權重的數量更多,所以移動神經元值比移動權重更合理;另一方面,靠近計算單元儲存權重提供低能耗/低延時的數據供應.同時中心eDRAM連接到了hyper transport(HT)2.0接口,用以和相同的芯片通信系列.

3.3 PuDianNao

PuDianNao[55]是DianNao系列中,用以支持多種人工智能算法的人工智能芯片.其支持的算法有k-近鄰、樸素貝葉斯、k-均值、線性回歸、支持向量機、深度神經網絡、分類樹等.PuDianNao在1 GHz的頻率下,具有每秒1.056萬億次運算的峰值性能,但是只有0.596 W的功耗和3.51 mm2的芯片面積.多種人工智能算法在PuDianNao上運行的平均性能相當于使用通用GPU的性能,但是其能量消耗只有GPU大約百分之一.

Fig. 6 Architecture of PuDianNao圖6 PuDianNao結構方框圖

如圖6所示,PuDianNao由功能單元、數據緩存、1個控制模塊、1個指令緩存和1個DMA組成.其中,為了支持多種人工智能算法,功能單元被分為1個用來支持多種基礎運算的機器學習功能單元(MLU)和1個輔助MLU的算法邏輯單元(ALU).

MLU包含6級流水,用以支持多種人工智能算法.1)第1級計數級(Counter)通過按位與運算或比較輸入數據然后累加結果來加速計數運算,計數運算在分類樹和樸素貝葉斯中經常使用.2)第2級加法級(Adder)用來計算機器學習中普通的向量加法.3)第3級乘法級(Mult)計算向量乘法,并且可以從前一級或數據緩存中輸入數據.4)第4級加法樹級(Adder tree)對乘法的結果進行求和.5)第5級累加級(Acc)對求和結果進行累加.6)最后的第6級Misc級負責排序和線性插值運算,排序器可以用來尋找累加級中的最小值,線性插值器用來計算非線性函數的近似結果.其中,乘法級、加法樹級和累加級配合共同實現點乘運算.此外,ALU用以提供MLU支持的基礎運算外的各種各樣的運算.

片上數據緩存被分為3個分離的部分:8 KB的HotBuf,16 KB的ColdBuf 和8 KB的 OutputBuf.HotBuf用來存儲短重用距離(short reuse distance)的輸入數據,相反,ColdBuf用來存儲長重用距離(long-reuse distance)的輸入數據,而OutputBuf用來存儲臨時或輸出數據.其一方面適應了機器學習中多種集群平均重用距離的變量,另一方面可以消除由不同讀入數據位寬引起的額外帶寬開銷.因此,PuDianNao可以避免內存帶寬成為系統瓶頸.

3.4 ShiDianNao

Fig. 7 Computation mode of ShiDianNao圖7 ShiDianNao運算模式

ShiDianNao[39]是用來處理圖像實時人工智能算法的人工智能芯片.它能夠被嵌入到傳感器中,以實現實時的圖像處理.ShiDianNao可以直接從CMOS或CCD傳感器直接獲取輸入圖像,同時僅用SRAM進行了完整的CNN映射,減少DRAM對權值的訪問.其相比DianNao,它大體上提升了60倍的能量效率.

ShiDianNao加速器包括1個突觸權值緩存(synapse buffer, SB)、2個儲存輸入輸出節點數據的緩存(NBin, NBout)、1個神經功能單元(neural function unit, NFU)和1個算法邏輯單元(arith-metic logic unit, ALU),1個用來儲存指令和譯碼的緩存和譯碼器.其中,NFU用來進行加、乘、比較等基礎的運算,ALU專門用于激活函數的運算.

NFU包含了一組處理基元(processing element, PE)陣列.基于2維滑窗的特點,同時卷積核的大小有限,處理基元的性質為:每個基元代表一個神經元(節點),排列在一個2維的網格拓撲結構中.它可以傳輸FIFO中的數據到其相鄰的基元中.

以圖7所示的卷積層為例,假設PE陣列的大小為2×2,卷積層卷積核的大小為3×3,步長為1×1.在計算特征圖時,每個PE計算一個輸出神經元(節點),計算結束后移動到一個新的基元中.在計算的第1個周期Cycle0,所有4個PE(PE0,0,PE0,1,PE1,0,PE1,1)從SB中獲取卷積核k0,0的值,從NBin中獲取第1個輸入節點的值(x0,0,x0,1,x1,0,x1,1),然后PE計算輸入節點和權值的乘積,把臨時結果儲存到寄存器中,同時從FIFO中獲取輸入節點值.PE1,0,PE1,1在Cycle1中從NBin讀取輸入節點x2,0,x2,1,在Cycle2中讀取x3,0,x3,1.PE0,0,PE0,1在Cycle1中從PE1,0,PE1,1的FIFO中讀取輸入節點x1,0,x1,1,在Cycle2中讀取x2,0,x2,1.同時,在Cycle1和Cycle2中廣播卷積核值k1,0,k2,0,儲存輸入節點值到FIFO中.乘法運算的結果和前一次計算的結果進行累加.Cycle3~Cycle5和Cycle6~Cycle8的操作類似.PEi,0(i=0,1)從PEi,1中獲取輸入節點值xi,1-xi+2,1,xi,2-xi+2,2.PEi,1(i=0,1)從NBin中獲取輸入節點值xi,2-xi+2,2,xi,3-xi+2,3.同時系統順序地從SB中讀取卷積核值k0,1-k2,1和k0,2-k2,2,并將它們廣播給所有的PE,乘法和累加運算仍然同之前一樣.這樣每個PE就完成了運算,然后將累加的和傳給ALU就得到了輸出的y0,0,y0,1,y1,0,y1,1.

3.5 Cambricon-X

Cambricon-X[56]是一款專門針對稀疏剪枝設計的人工智能處理器.其利用人工神經網絡的稀疏性,減少運算量,同時減少功耗和面積.

其總體結構如圖8所示,由Buffer Controller負責從NBin中讀取數據送給PE,同時將PE的執行結果存放到NBout中,PE進行具體的運算.

Fig. 8 Architecture of Cambricon-X圖8 Cambricon-X總體結構框圖

其中,Buffer Controller的結構如圖9所示,同時從NBin中讀取神經元,然后依據各PE中的稀疏權值對應的索引,篩選出該PE需要運算的神經元,而后將篩選后的神經元發送給相應的PE,與PE中SB存儲的稀疏權值進行運算.從而,有效利用了稀疏神經網絡的權值稀疏性,將不需要計算的數據在送給運算部件之前先行剔除掉.同時,其BCFU則將旁路過來的input數據和PE的運算結果進行整合,得到最終的數據,將其寫入到NBout中.

Fig. 9 Architecture of Buffer Controller圖9 Buffer Controller結構框圖

PE結構如圖10所示,其分為PEFU以及SB.PEFU即包含乘法以及加法樹,將稀疏選擇之后的神經元以及權重進行乘法,然后將得到的結果通過加法樹得到最終結果.SB則存放稀疏之后的權重,與稀疏選擇之后的輸入一一對應.

Fig. 10 Architecture of PE and PEFU圖10 PE和PEFU結構框圖

Cambricon-X利用稀疏選數,在16個PE的基礎之上,做到了544 GOP/s的峰值,但是65 nm的工藝之下面積僅有6.38 mm2,并且其功耗僅有954 mW.

3.6 指令集

Cambricon[57]是一種新型的用于人工智能芯片的指令集結構(ISA).這種裝載結構基于對現有的人工智能算法復雜的分析,集成了標量、向量、矩陣、邏輯、數據傳輸和控制指令等.基于10種有代表性的NN技術對指令集進行的評估表明,Cambricon對大范圍的人工智能算法有很強的表示能力,并且有比x86,MIPS和GPGPU等通用指令集更高的代碼密度.比起最新最先進的人工智能芯片DaDianNao(能夠適應3種神經網絡),基于Cambricon的加速器原型只帶來了可以忽略不計的延時/能量/面積開銷,卻能夠覆蓋10種不同的神經網絡基準.

Cambricon的設計受到RISC ISA的啟發:首先,將復雜、高信息量的、描述高層次的神經網絡功能塊(如網絡層)分解為對應低層次運算的更短的指令(如點乘),這樣就可以使用低層次的運算來集成新的高層次的功能塊,這就保證了加速器有很廣泛的適用范圍.其次,簡短的指令大大地降低了指令譯碼器設計和驗證的復雜性.

Cambricon的裝載結構只允許使用加載或儲存(load/store)指令對主內存進行訪問.Cambricon不使用向量寄存器,而是將數據儲存在片上暫存器中.Cambricon包含了4種指令類型:計算類型、邏輯類型、控制類型、數據傳輸類型.盡管4種指令有效長度不同,但為了設計的簡單性和內存對齊的作用,所有的指令均為64 b.

Cambricon的控制指令和數據傳輸指令與MIPS指令類似.Cambricon包含2條控制指令:jump和conditionalbranch.為了支持向量和矩陣運算指令,Cambricon的數據傳輸指令支持可變數據尺寸.

基于對GoogLeNet的定量分析,神經網絡中99.992%的基礎運算可以被合并為向量運算,99.791%的向量運算可以被更進一步合并為矩陣運算.因此,人工智能算法可以分解為標量、向量和矩陣運算,而Cambricon充分地利用了這一點.

1) 矩陣指令.Cambricon中含有6條矩陣指令.以MLP為例,每個全連接層進行的運算為y=f(Wx+b).其中的關鍵運算是Wx,這可以通過矩陣乘向量指令(matrix-mult-vector, MMV)實現.為了避免轉置運算,還有VMM指令,在神經網絡的權值更新中,會用到W=W+μΔW運算.因此有叉乘指令(outer-product, OP)、矩陣乘標量指令(matrix-mult-scalar, MMS)和矩陣加法(matrix-add-matrix, MAM)指令.此外Cambricon還提供了矩陣減法指令(matrix-subtract-matrix, MSM)指令用于玻爾茲曼機(RBM).

2) 向量指令.不失一般性,以Sigmoid函數為例:對于向量A,執行Sigmoid運算f(A)=eA(1+eA),即對向量A中的每個元素進行激活操作.首先,使用向量指數指令(vector-exponential, VEXP)對向量A的每個元素求指數;其次,使用向量標量加法指令(vector-add-scalar, VAS)為上述結果向量eA的每個元素加1;最后,使用向量除法指令(vector-divide-vector, VDV)計算eA(1+eA).類似地,對于其他函數Cambricon提供相應的向量指令,如vector-mult-vector (VMV),vector-logarithm(VLOG)等.此外,Cambricon提供了向量隨機數指令(random-vector, RV),用于相關人工智能算法的實現中.

3) 邏輯指令.最好的人工智能算法中往往使用比較運算或其他邏輯運算.Cambricon中使用vector-greater-than-merge (VGTM)指令用于支持最大匯聚(max-pooling)運算.此外,Cambricon還提供了vector-greater-than (VGT), vector AND(VAND)等指令.

4) 標量指令.Cambricon仍然提供基礎的單元素標量運算和標量超越函數等指令.

4 人工神經網絡相關技術的發展

4.1 權值與輸入量化

4.1.1 二值網絡

由于人工智能芯片中乘法器最消耗能量和空間,Courbariaux等人[58]提出使用只含有-1和1的二值化權重可以將復雜的乘法累加運算替換為簡單的累加運算,進而提升硬件的性能.二值化連接(BinaryConnect)方法基于2個關鍵點:1)累加平均大量的隨機梯度需要足夠的精度,但含噪聲的權重(可以認為離散化是一種噪聲)也同樣適用于隨機梯度下降法(SGD).SGD每步都很小并且含有噪聲,對每個權重而言,隨機梯度的求和將噪聲平均掉了,因此這些累加器需要足夠的精度(來計算平均).同時,研究發現隨機舍入可以用來進行無偏離散化.2)變化權重噪聲、失活(Dropout)和失連(DropConnect)等方法在激活值或權重中加入了噪聲.但這些噪聲權重實際上提供了一種正則化的方法,可以讓更模型有更好的推廣性(避免了過擬合).這些研究說明只有權重的期望值才需要很高的精度,噪聲實際上是有好處的.

BinaryConnect方法中的權重只含有+1和-1兩種情況,這樣乘法累加運算就可以被加減運算取代.一種直接的二值化方法如下:

這種固定的二值化方法可以通過平均大量輸入權重的離散值來補償信息的損失.另一種更精細準確的方法是隨機二值化方法:

其中,σ是Hard Sigmoid 函數:

網絡的更新策略是:為了保證SGD算法正常工作,只在前向傳播和后向傳播時使用二值化權重,權重更新時仍使用精確的權重.

4.1.2 三值網絡

Hwang等人[59]提出了一種新的人工智能算法,它只需要三值(+1,0,-1)的權重和2~3位的定點量化信號.訓練算法仍使用反向傳播算法重訓練定點網絡,但使用了一些方法進行提高精度,如通過范圍和靈敏度分析進行精細信號分組(elaborate signal grouping)、同時量化權重和信號值、最優量化參數搜索和對深度神經網絡的考慮.

由于對權重和信號使用不同數據類型太復雜,所以需要根據它們的范圍和量化敏感度對它們分組.在每層的權重中,只有偏置值(bias)需要很高的精度(它們的范圍通常比其他權重大很多).對偏置值使用較高的(如8 b)定點數類型不會帶來很大的開銷.隱層信號的量化敏感度都很低,但網絡輸入的量化敏感度十分取決于應用.一種傳統的量化方法是:通過最優步長Δ直接量化訓練的浮點數權重,浮點數權重可以通過先使用玻爾茲曼機(RBM)進行預訓練,然后使用誤差反向傳播的精細調整來獲得.可以通過最小化L2誤差方法(類似Lloyd-Max量化)獲得初始值,然后使用窮舉搜索對量化步長進行微調來獲得最優步長.為了減小搜索維度,可以使用貪心算法進行逐層搜索.最終Δ大約是Lloyd-Max方法結果的1.2~1.6倍.

在權重精度很低時,直接量化方法有很高的輸出誤差.這可以通過使用定點優化方法重訓練量化的神經網絡來解決.直接對量化的神經網絡使用反向傳播算法往往行不通,這是因為權重的更新值往往比量化的步長小很多.為了解決這個問題,該網絡同時保留高精度和低精度的權重和信號.高精度的權重用于計算誤差的累計和生成量化的權重,而低精度的權重用于后向傳播算法的前向和后向步驟.

4.2 計算以及傳輸剪枝

4.2.1 稀疏CNN

Graham[60]通過研究發現,在高分辨率人工智能算法中使用單像素筆畫所寫的字符是一種稀疏矩陣.同時圖片填充后也可以認為是稀疏的,充分利用矩陣的稀疏性可以更加高效地訓練更大更深的網絡.

假設手寫字符是一個N×N的二值圖片,非零像素數目只有O(N),第1個隱層可以借助稀疏性計算得更快.傳統卷積層使用valid模式,但不是最優的,解決方法有:1)對輸入圖片用零像素填充;2)在每個卷積層使用較少數目的填充,保證卷積使用full模式;3)對一組重疊的子圖使用卷積網絡.而稀疏性能夠組合這些好的特點.

對于手寫字體而言,更慢的池化操作(窗較小的池化層,網絡更深)可以保留更多的空間信息,使網絡具有更好的可推廣性.對通常的輸入而言,慢的池化層相對需要更高的計算代價,但稀疏的輸入由于在網絡的前幾層保留了稀疏性,就只需要相對較低的能量代價.

DeepCNet(l,k)的網絡結構為:l+1層卷積層,中間是l層2×2的池化層.第l卷積層的濾波器的數量是nk,第1層濾波器尺寸為3×3,后面的層的濾波器的尺寸為2×2.在DeepCNet的基礎上加入network-in-network層,NiN層卷積核尺寸為1×1,在每個池化層和最后一個卷積層的后面加入NiN層,生成DeepCNiN(l,k)網絡.在該網絡中,采用了2種措施來使反向傳播函數更加高效:首先,只對卷積層進行失活操作,對NiN層不進行操作.其次,使用了leaky修正線性單元:

假設輸入全零時,隱層變量的狀態為基態(ground state)(由于偏置的存在,基態的值非零).當輸入稀疏數組時,只需要計算和基態不同的隱層變量的值.為了前向傳播網絡,對每層計算2種矩陣:1)特征矩陣(feature matrix)是一個行向量列表,一個代表ground state,一個代表該層中每個激活位置.矩陣的寬度時每個空間位置特征的數量.2)指針矩陣(pointer matrix)是一個和卷積層大小相同的矩陣.在其中儲存每個空間位置在特征矩陣中對應的行.

4.2.2 ReLU運行時剪枝

Akhlaghi等人[61]統計發現,CNN中的ReLU層的大量輸出都是零值,說明了卷積層中大量的輸出為負值.同時,不同中間層的零值空間分布不同.基于這個特點,SnaPEA算法能夠提前判斷中間計算結果是否會產生零值來決定是否提前終止,進而減少算法的計算量.SnaPEA有2種模式:1)準確模式.不會降低分類的準確率.2)預測模式.通過預測提前中止計算,以節省更多的計算量,代價是分類準確度有一定降低.

在準確模式下,將卷積核中的權重按照符號排序,正的權值在前,負的權值在后.在計算過程中定期檢查求和的符號位,一旦符號位為負就終止運算,在這種情況下不會降低分類準確率.

在預測模式下,如果卷積運算在特定次數的MAC運算后低于相應的閾值,最終的結果就很可能是負的,于是提前終止運算.但是這種操作會降低最終分類的準確度,為了減小這種損失,需要確定2個參數:閾值和相應的運算次數.參數可以通過一個多變量約束的優化問題來確定,進一步通過貪心算法來解決這個問題.該算法包括3個步驟:1)獨立測量準確率對每個卷積核引入不精確值(提前停止)的靈敏度,根據這個靈敏度確定每個卷積核的參數;2)聯合每層各個核的參數,為每層確定一組參數;3)迭代調整各層參數,使得在減少最大計算量的同時達到可以接受的準確率.由于確定參數的算法執行一次,所以并不會在CNN執行期間增加額外的運行開銷.

預測模式執行特定次數計算后根據閾值判斷是否終止計算,因此需要確定計算哪一部分權值.一種方法是將權重按照絕對值降序排序,選擇幅值較大的進行計算.但由于忽略了數據隨機性和數據之間的依賴,這種方法會導致正確率急劇下降.SnaPEA將權重按升序排序,并將其分為幾組,從每組中選取幅值最大的權重參與計算.在這種情況下,劃分的組數就是運算的次數.

4.3 特殊器件

3.1節所述的DianNao系列芯片采用了分布式片上內存來減小數據傳輸的能量開銷,此外還有其他降低數據傳輸能量開銷的方法:例如,讓片下高密度的內存更加靠近計算單元,或者直接將計算單元集成到內存中.在嵌入式系統中,還會將計算模塊集成到傳感器中.一些相關的研究中使用了模擬信號處理,但其有增加電路敏感性和設備非理想性的缺點,導致的結果是通常使用降低的精度進行計算.另一個問題是,DNN通常在數字域進行訓練,對于模擬信號處理,DAC和ADC就還需要額外的能量消耗.

同時,除了如DaDianNao等,把DRAM集成到芯片中,還可以使用TSV技術(也稱3D內存技術)將DRAM堆疊在芯片上.這種技術已經以混合立方儲存器(HMC)和高帶寬內存(HBM)的形式商業化了.相比二維 DRAM,三維內存(3D DRAM)的電容更小,因此能夠將帶寬提升一個量級,同時能夠節省5倍的能量.

將處理單元集成在內存中是另一種思路[62].例如,乘法累加運算可以集成在一個SRAM數組的位元(bit cell)中.在這項研究中,使用了5位DAC將字線(WL)轉換成代表特征向量的模擬電壓,使用位元(bit cell)儲存權重(±1),位元電流(IBC)計算出特征向量和權重的積,位元電流之間相加來對位線(VBL)放電.比起分離進行讀取和運算,這種方法節省了12倍的能量.

乘法累加運算可以直接集成在先進的非易失性儲存器中(憶阻器).特別地,可以使用電阻器的電導作為權重,電壓作為輸入來進行乘法運算,電流是乘法的輸出.加法操作可以通過將不同憶阻器的電流相加進行.這種方法的優點是,由于計算被集成在內存中,所以不用進行數據的傳輸,進一步節省了能量消耗.可供用作非易失性儲存器的器件有:phase change memory (PCM),resistive RAM(ReRAM),conductive bridge RAM (CBRAM)和spin transfer torque magnetic RAM (STT-MRAM)等.該技術的缺點有:降低了計算精度、需要忍受額外的ADC/DAC開銷、數組大小受連接電阻的導線數目限制、對憶阻器的編程需要消耗很大的能量等.ISAAC將DaDianNao中的eDRAM替換為憶阻器,為了解決精度不足問題,其中使用了8個二位的憶阻器來進行16 b的點乘運算.

在圖像處理領域,將數據從傳感器傳輸到內存中占據了系統能量消耗的很大的一部分.因此有一些研究試圖讓處理器盡可能地接近傳感器.特別地,大部分研究針對的是如何將計算移動到模擬域以避免ADC的使用,進而節省能量.然而,電路的非理想性導致了模擬計算中只能使用更低的精度.有研究將矩陣乘法集成在ADC中,其中乘法的高位使用開關電容進行計算.此外,還有研究實現了模擬的累加運算,其中假設3 b權重和6 b激活值的精度是足夠的,這將傳感器中ADC轉換次數減少到1/21.更有研究將整個卷積層的運算在模擬域實現.

除了可以將計算集成在ADC之前,將計算嵌入在傳感器本身也是可行的.有研究使用了Angle Sensitive Pixels傳感器來計算輸入的梯度,降低了10倍的數據傳輸消耗.此外,由于DNN第1層的輸出通常是類似梯度的特征圖,這使得有可能跳過第1層的計算,進一步減少能量消耗.

5 未來工作展望

人工智能日益成為工業界和學術界極其重要的一個領域.隨著人工智能算法日益復雜以及人工智能處理的數據日益增大,人工智能芯片相比GPU和CPU等傳統處理器,具有越來越明顯的優勢.人工智能芯片可以滿足在日益復雜的應用場景中,對存儲性能和計算能力的巨大需求.隨著技術的發展和研究的深入,人工智能芯片已經發展出了諸如DianNao系列的芯片系列,解決了很多現有的問題和應用場景.但是,目前的人工智能芯片,其訪存瓶頸和計算能耗依然有很多的提升空間.其未來可能的發展方向有5個方面:

1) 隨著應用場景的增多,人工智能算法日益復雜,作為人工智能芯片,保持針對人工智能算法的通用性將會是一個巨大的挑戰.

2) 人工智能算法中,其計算過程具有非精確性特點,因此,使用低精度量化是減少人工智能算法的計算復雜度和開銷的一種重要的手段.其不僅可以如4.1節所說,使用二值網絡處理特定的算法,同時還可以尋找適用范圍更加廣泛、更加精準的算法.將這些算法應用在人工智能芯片之后,將極大地節省芯片功耗和面積.

3) 由于現有的人工智能算法,其搜索空間龐大無比.因此,進一步利用其稀疏性質,減少人工智能算法的計算復雜度和開銷,將會使得人工智能芯片具有更低的功耗和面積.

4) 隨著芯片集成度越來越高,如何在一個芯片中部署多個運算核單元,并且使得這些運算核協同工作,獲得較高的加速比,也逐漸成為一個重要的發展方向.

5) 對于人工智能算法,其計算單元相對簡單,因此,探索新的物理器件例如光衍射、憶阻器等來進行存儲和運算,可以極大地優化人工智能芯片的功耗和算法.

猜你喜歡
指令內存權重
權重望寡:如何化解低地位領導的補償性辱虐管理行為?*
基于 Verilog HDL 的多周期 CPU 設計與實現
權重常思“浮名輕”
《單一形狀固定循環指令G90車外圓仿真》教案設計
筆記本內存已經在漲價了,但幅度不大,升級擴容無須等待
“春夏秋冬”的內存
關于ARM+FPGA組建PLC高速指令控制器的研究
為黨督政勤履職 代民行權重擔當
權重漲個股跌 持有白馬藍籌
內存搭配DDR4、DDR3L還是DDR3?
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合