深度學(xué)習(xí)的異構(gòu)加速技術(shù)(二):螺獅殼里做道場
一、綜述
在“深度學(xué)習(xí)的異構(gòu)加速技術(shù)(一)”一文所述的AI加速平臺的***階段中,無論在FPGA還是ASIC設(shè)計,無論針對CNN還是LSTM與MLP,無論應(yīng)用在嵌入式終端還是云端(TPU1),其構(gòu)架的核心都是解決帶寬問題。不解決帶寬問題,空有計算能力,利用率卻提不上來。就像一個8核CPU,若其中一個內(nèi)核就將內(nèi)存帶寬100%占用,導(dǎo)致其他7個核讀不到計算所需的數(shù)據(jù),將始終處于閑置狀態(tài)。對此,學(xué)術(shù)界涌現(xiàn)了大量文獻從不同角度對帶寬問題進行討論,可歸納為以下幾種:
A、流式處理與數(shù)據(jù)復(fù)用
B、片上存儲及其優(yōu)化
C、位寬壓縮
D、稀疏優(yōu)化
E、片上模型與芯片級互聯(lián)
F、新興技術(shù):二值網(wǎng)絡(luò)、憶阻器與HBM
下面對上述方法如何解決帶寬問題,分別論述。
二、不同招式的PK與演進
2.1、流式處理與數(shù)據(jù)復(fù)用
流式處理是應(yīng)用于FPGA和專用ASIC高效運算結(jié)構(gòu),其核心是基于流水線的指令并行,即當(dāng)前處理單元的結(jié)果不寫回緩存,而直接作為下一級處理單元的輸入,取代了當(dāng)前處理單元結(jié)果回寫和下一處理單元數(shù)據(jù)讀取的存儲器訪問。多核CPU和GPU多采用數(shù)據(jù)并行構(gòu)架,與流式處理構(gòu)架的對比如圖2.1所示。圖左為數(shù)據(jù)并行的處理方式,所有運算單元受控于一個控制模塊,統(tǒng)一從緩存中取數(shù)據(jù)進行計算,計算單元之間不存在數(shù)據(jù)交互。當(dāng)眾多計算單元同時讀取緩存,將產(chǎn)生帶寬競爭造成瓶頸;圖右為基于指令并行的二維流式處理,即每個運算單元都有獨立的指令(即定制運算邏輯),數(shù)據(jù)從相鄰計算單元輸入,并輸出到下一級計算單元,只有與存儲相鄰的一側(cè)存在數(shù)據(jù)交互,從而大大降低了對存儲帶寬的依賴,代表為FPGA和專用ASIC的定制化設(shè)計。
圖2.1 數(shù)據(jù)并行與流式處理的對比
圖2.2 一維脈動陣列(上)TPU中的二維脈動陣列(下)
當(dāng)流式處理中各個處理單元(Processing Element, PE)具有相同結(jié)構(gòu)時,有一個專屬名稱——脈動矩陣,一維的脈動矩陣如圖2.2(上)所示。當(dāng)一個處理單元從存儲器讀取數(shù)據(jù)處理,經(jīng)過若干同構(gòu)PE處理后寫回到存儲器。對存儲器而言,只需滿足單PE的讀寫帶寬即可,降低了數(shù)據(jù)存取頻率。脈動架構(gòu)的思想很簡單:讓數(shù)據(jù)盡量在處理單元中多流動一段時間。當(dāng)一個數(shù)據(jù)從***個PE輸入直至到達(dá)***一個PE,它已經(jīng)被處理了多次。因此,它可以在小帶寬下實現(xiàn)高吞吐[1]。
TPU中采用的二維脈動陣列如圖2.2(下)所示,用以實現(xiàn)矩陣-矩陣乘和向量-矩陣乘。數(shù)據(jù)分別從Cell陣列的上側(cè)和左側(cè)流入,從下側(cè)流出。每個Cell是一個乘加單元,每個周期完成一次乘法和一次加法。當(dāng)使用該脈動陣列做卷積運算時,二維FeatureMap需要展開成一維向量,同時Kernel經(jīng)過旋轉(zhuǎn),而后輸入,如TPU專利中的圖2.3所示。
圖2.3 TPU專利中,脈動陣列在卷積運算時的數(shù)據(jù)重排
在極大增加數(shù)據(jù)復(fù)用的同時,脈動陣列也有兩個缺點,即數(shù)據(jù)重排和規(guī)模適配。***,脈動矩陣主要實現(xiàn)向量/矩陣乘法。以CNN計算為例,CNN數(shù)據(jù)進入脈動陣列需要調(diào)整好形式,并且嚴(yán)格遵循時鐘節(jié)拍和空間順序輸入。數(shù)據(jù)重排的額外操作增加了復(fù)雜性,據(jù)推測由軟件驅(qū)動實現(xiàn)。第二,在數(shù)據(jù)流經(jīng)整個陣列后,才能輸出結(jié)果。當(dāng)計算的向量中元素過少,脈動陣列規(guī)模過大時,不僅難以將陣列中的每個單元都利用起來,數(shù)據(jù)的導(dǎo)入和導(dǎo)出延時也隨著尺寸擴大而增加,降低了計算效率。因此在確定脈動陣列的規(guī)模時,在考慮面積、能耗、峰值計算能力的同時,還要考慮典型應(yīng)用下的效率。
寒武紀(jì)的DianNao系列芯片構(gòu)架也采用了流式處理的乘加樹(DianNao[2]、DaDianNao[3]、PuDianNao[4])和類脈動陣列的結(jié)構(gòu)(ShiDianNao[5])。為了兼容小規(guī)模的矩陣運算并保持較高的利用率,同時更好的支持并發(fā)的多任務(wù),DaDianNao和PuDianNao降低了計算粒度,采用了雙層細(xì)分的運算架構(gòu),即在頂層的PE陣列中,每個PE由更小規(guī)模的多個運算單元構(gòu)成,更細(xì)致的任務(wù)分配和調(diào)度雖然占用了額外的邏輯,但有利于保證每個運算單元的計算效率并控制功耗,如圖2.4所示。
圖2.4 基于流式處理的計算單元組織結(jié)構(gòu):從上到下依次為DianNao、DaDianNao整體框架與處理單元、ShiDianNao、PuDianNao的總體框圖和每個MLU處理單元的內(nèi)部結(jié)構(gòu)
除了采用流式處理減少PE對輸入帶寬的依賴,還可通過計算中的數(shù)據(jù)復(fù)用降低帶寬,CNN中的復(fù)用方式如圖2.5所示。
(a)
(b)
(c)
圖2.5 CNN中的數(shù)據(jù)復(fù)用
在圖2.5 的(a) (b)(c)分別對應(yīng)卷積核的整張FeatureMap復(fù)用、一組FeatureMap對多組Filter的復(fù)用、Filter通過增加BatchSize而復(fù)用。當(dāng)上述三種方式結(jié)合使用時,可極大提升數(shù)據(jù)復(fù)用率,這也是TPU在處理CNN時逼近峰值算力,達(dá)到86Tops/s的原因之一。
2.2、片上存儲及其優(yōu)化
片外存儲器(如DDR等)具有容量大的優(yōu)勢,然而在ASIC和FPGA設(shè)計中,DRAM的使用常存在兩個問題,一是帶寬不足,二是功耗過大。由于需要高頻驅(qū)動IO,DRAM的訪問能耗通常是單位運算的200倍以上,DRAM訪問與其它操作的能耗對比如圖2.6所示。
圖2.6 片外DRAM訪問的能耗開銷
為了解決帶寬和能耗問題,通常采用兩種方式:片上緩存和臨近存儲。
1)增加片上緩存,有利于在更多情況下增加數(shù)據(jù)復(fù)用。例如矩陣A和B相乘時,若B能全部存入緩存,則僅加載B一次,復(fù)用次數(shù)等價于A的行數(shù);若緩存不夠,則需多次加載,增加帶寬消耗。當(dāng)片上緩存足夠大,可以存下所有計算所需的數(shù)據(jù),或通過主控處理器按需發(fā)送數(shù)據(jù),即可放棄片外DRAM,極大降低功耗和板卡面積,這也是半導(dǎo)體頂會ISSCC2016中大部分AI ASIC論文采用的方案。
2)臨近存儲。當(dāng)從片上緩存加載數(shù)據(jù)時,若采用單一的片上存儲,其接口經(jīng)常不能滿足帶寬的需求,集中的存儲和較長的讀寫路徑也會增加延遲。此時可以增加片上存儲的數(shù)量并將其分布于計算單元數(shù)據(jù)接口的臨近位置,使計算單元可以獨享各自的存儲器帶寬。隨著數(shù)量的增加,片上存儲的總帶寬也隨之增加,如圖2.7所示。
圖2.7 TPU(上)和DianNao(下)的片上存儲器分布
圖2.7中的脈動陣列和乘加樹都是規(guī)模較大的計算單元,屬于粗粒度。當(dāng)采用細(xì)粒度計算單元的結(jié)構(gòu)時,如圖2.8所示,可采用分層級存儲方式,即除了在片上配置共享緩存之外,在每個計算單元中也配置專屬存儲器,使計算單元獨享其帶寬并減少對共享緩存的訪問。寒武紀(jì)的DaDianNao采用也是分層級存儲,共三層構(gòu)架,分別配置了中央存儲器,四塊環(huán)形分布存儲器,和輸入輸出存儲器,如圖2.9所示,極大增強了片上的存儲深度和帶寬,輔以芯片間的互聯(lián)總線,可將整個模型放在片上,實現(xiàn)片上Training和Inference。
圖2.8 細(xì)粒度計算單元與鄰近存儲,上圖中深紅色為存儲器
圖2.9DaDianNao的計算單元與存儲器分布
2.3、位寬壓縮
在兩年前,深度學(xué)習(xí)的定制處理器構(gòu)架還處于初始階段,在Inference中繼承了CPU和GPU的32bit浮點量化,每次乘法運算不僅需要12字節(jié)的讀寫(8bit量化時為3字節(jié)),32位運算單元占用較大的片上面積,增加了能耗和帶寬消耗。PuDianNao的論文中指出[4],16bit乘法器在ASIC占用面積上是32bit乘法器的1/5,即在相同尺寸的面積上可布局5倍數(shù)量的乘法器。當(dāng)使用8bit時將獲得更高收益。因此,學(xué)術(shù)界孜孜不倦的追求更低的量化精度,從16bit,到自定義的9bit[6],8bit,甚至更激進的2bit和1bit的二值網(wǎng)絡(luò)[7-8]。當(dāng)高位寬轉(zhuǎn)為低位寬的量化時,不可避免的帶來精度損失。對此,可通過量化模式、表征范圍的調(diào)整、編碼等方式、甚至增加模型深度(二值網(wǎng)絡(luò))來降低對精度的影響,其中量化模式、表征范圍的調(diào)整方法如圖2.10 所示。
圖2.10 (a) 幾種量化模式,和 (b) 動態(tài)位寬調(diào)整
圖2.10 (a) 中為不同的量化模式,同樣的8bit,可根據(jù)模型中數(shù)值的分布情況采用為線性量化、Log量化、或非線性量化表示。圖2.10 (b)是Jiantao Qiu等提出的動態(tài)位寬調(diào)整[9],使8bit的量化在不同層之間使用不同的偏移量和整數(shù)、小數(shù)分配,從而在最小量化誤差的約束下動態(tài)調(diào)整量化范圍和精度,結(jié)合重訓(xùn)練,可大幅降低低位寬帶來的影響。在CNN模型中的測試結(jié)果見下表:
低位寬意味著在處理相同的任務(wù)時更小的算力、帶寬和功耗消耗。在算力不變的前提下,成倍的增加吞吐。對于數(shù)據(jù)中心,可大幅度降低運維成本,使用更少的服務(wù)器或更廉價的計算平臺即可滿足需求(TPU的數(shù)據(jù)類型即為8/16bit);對于更注重能耗比和小型化嵌入式前端,可大幅降低成本。目前,8bit的量化精度已經(jīng)得到工業(yè)界認(rèn)可,GPU也宣布在硬件上提供對8bit的支持,從而將計算性能提高近4倍,如圖2.11所示。FPGA巨頭Xilinx也在AI加速的官方文檔中論述了8bit量化的可行性[10]。
圖2.11 NVIDIA對int8的支持
2.4、稀疏優(yōu)化
上述的論述主要針對稠密矩陣計算。在實際應(yīng)用中,有很大一部分AI應(yīng)用和矩陣運算屬于稀疏運算,其主要來源于兩個方面:
1) 算法本身存在稀疏。如NLP(Natural Language Processing,自然語言處理)、推薦算法等應(yīng)用中,通常一個幾萬維的向量中,僅有幾個非零元素,統(tǒng)統(tǒng)按照稠密矩陣處理顯然得不償失。
2) 算法改造成稀疏。為了增加普適性,深度學(xué)習(xí)的模型本身存在冗余。在針對某一應(yīng)用完成訓(xùn)練后,很多參數(shù)的貢獻極低,可以通過剪枝和重新訓(xùn)練將模型轉(zhuǎn)化為稀疏。如深鑒科技的韓松在FPGA2017上提出針對LSTM的模型剪枝和專用的稀疏化處理架構(gòu),如圖2.12 所示[11]。
圖2.12 LSTM模型剪枝比例與精度(左)和稀疏處理構(gòu)架(右)
圖2.12 左圖,為LSTM模型剪枝掉90%的參數(shù)后,基本沒有精度損失,模型得到了極大的稀疏化。圖右側(cè)為針對稀疏的FPGA處理構(gòu)架,將處理的PE之間進行異步調(diào)度,在每個PE的數(shù)據(jù)入口使用獨立的數(shù)據(jù)緩存,僅將非零元素壓入?yún)⑴c計算,獲得了3倍于Pascal Titan X的性能收益和11.5倍的功耗收益。稀疏化并不僅限于LSTM,在CNN上也有對應(yīng)的應(yīng)用。
與之對應(yīng)的,寒武紀(jì)也開發(fā)了針對稀疏神經(jīng)網(wǎng)絡(luò)的Cambricon-X[12]處理器,如圖2.13所示。類似的,Cambricon-X也在每個PE的輸入端口加入了Indexing的步驟,將非零元素篩選出后再輸入進PE。與深鑒不同的是,Cambricon-X支持不同稀疏程度的兩種indexing編碼,在不同稀疏程度的模型下使用不同的編碼方式,以優(yōu)化帶寬消耗。
圖2.13 寒武紀(jì)Cambricon-X稀疏神經(jīng)網(wǎng)絡(luò)處理器結(jié)構(gòu)
可針對稀疏的優(yōu)化有兩個目的,一是從緩存中讀入的都是有效數(shù)據(jù)從而避免大量無用的零元素占滿帶寬的情況,二是保證片上PE的計算效率,使每個PE的每次計算的輸入都是“干貨”。當(dāng)模型剪枝結(jié)合稀疏處理構(gòu)架,將成倍提升FPGA和ASIC的計算能力,效果顯著,是異構(gòu)加速的熱點之一。
綜上所述,稀疏化是從模型角度,從根本上減少計算量,在構(gòu)架演進缺乏突破的情況下,帶來的收益是構(gòu)架優(yōu)化所不能比擬的。尤其在結(jié)合位寬壓縮后,性能提升非常顯著。然而稀疏化需要根據(jù)構(gòu)架特點,且會帶來精度損失,需要結(jié)合模型重訓(xùn)練來彌補,反復(fù)調(diào)整。上述過程增加了稀疏優(yōu)化的門檻,需要算法開發(fā)和硬件優(yōu)化團隊的聯(lián)合協(xié)作。對此,深鑒科技等一些公司推出稀疏+重訓(xùn)練的專用工具,簡化了這一過程,在大量部署的場景下,將帶來相當(dāng)?shù)某杀緝?yōu)勢。
2.5、片上模型與芯片級互聯(lián)
為了解決帶寬問題,通常的做法是增加數(shù)據(jù)復(fù)用。在每次計算的兩個值中,一個是權(quán)值Weight,一個是輸入Activation。如果有足夠大的片上緩存,結(jié)合適當(dāng)?shù)奈粚拤嚎s方法,將所有Weight都緩存在片上,每次僅輸入Activation,就可以在優(yōu)化數(shù)據(jù)復(fù)用之前就將帶寬減半。然而從GoogleNet50M到ResNet 150M的參數(shù)數(shù)量,在高成本的HBM普及之前,ASIC在相對面積上無法做到如此大的片上存儲。而隨著模型研究的不斷深入,更深、參數(shù)更多的模型還會繼續(xù)出現(xiàn)。對此,基于芯片級互聯(lián)和模型拆分的處理模式,結(jié)合多片互聯(lián)技術(shù),將多組拆分層的參數(shù)配置于多個芯片上,在Inference過程中用多芯片共同完成同一任務(wù)的處理。寒武紀(jì)的DaDianNao就是實現(xiàn)這樣的一種芯片互聯(lián)結(jié)合大緩存的設(shè)計,如圖2.14所示。
圖2.14DaDianNao中的存儲器分布(圖中藍(lán)色部分)和多片互聯(lián)時的加速能力(以GPU K20M為單位性能的比較)
為了將整個模型放在片上,DaDianNao一方面將片上緩存的容量增加到36MB(DaDianNao為36MB和4608個乘加器,TPU為28MB緩存和65536乘加器),充分保證計算單元的讀寫帶寬,另一方面通過HT2.0實現(xiàn)6.4GB/s*4通道的片間通信帶寬,降低數(shù)據(jù)才層與層之間傳遞的延遲,完全取代了片外DRAM的交互,解決帶寬制約計算的問題。與之相應(yīng)的,微軟在Hot Chips 2017上提出將LSTM模型拆分后部署到多片F(xiàn)PGA,以擺脫片外存儲器訪問以實現(xiàn)Inference下的超低延遲[2]。
2.6、新興技術(shù):二值網(wǎng)絡(luò)、憶阻器與HBM
除了采用上述方式解決帶寬問題,學(xué)術(shù)界近期涌現(xiàn)出了兩種更為激進的方法,二值網(wǎng)絡(luò)和憶阻器;工業(yè)界在存儲器技術(shù)上也有了新的突破,即HBM。
二值網(wǎng)絡(luò)是將Weight和Activation中的一部分,甚至全部轉(zhuǎn)化為1bit,將乘法簡化為異或等邏輯運算,大大降低帶寬,非常適合DSP資源有限而邏輯資源豐富的FPGA,以及可完全定制的ASIC。相對而言,GPU的計算單元只能以32/16/8bit為單位進行運算,即使運行二值模型,加速效果也不會比8bit模型快多少。因此,二值網(wǎng)絡(luò)成為FPGA和ASIC在低功耗嵌入式前端應(yīng)用的利器。目前二值網(wǎng)絡(luò)的重點還在模型討論階段,討論如何通過增加深度與模型調(diào)整來彌補二值后的精度損失。在簡單的數(shù)據(jù)集下的效果已得到認(rèn)可,如MNIST,Cifar-10等。
既然帶寬成為計算瓶頸,那么有沒有可能把計算放到存儲器內(nèi)部呢?既然計算單元臨近存儲的構(gòu)架能提升計算效率,那么能否把計算和存儲二者合一呢?憶阻器正是實現(xiàn)存儲器內(nèi)部計算的一種器件,通過電流、電壓和電導(dǎo)的乘法關(guān)系,在輸入端加入對應(yīng)電壓,在輸出即可獲得乘加結(jié)果,如圖2.15所示[13]。當(dāng)將電導(dǎo)作為可編程的Weight值,輸入作為Activation,即可實現(xiàn)神經(jīng)網(wǎng)絡(luò)計算。目前在工藝限制下,8bit的可編程電導(dǎo)技術(shù)還不成熟,但在更低量化精度下尚可。將存儲和計算結(jié)合,將形成一種有別于馮諾依曼體系的全新型構(gòu)架,稱為在存儲計算(In-Memory Computing),有著巨大的想象空間。
圖2.15 憶阻器完成乘加示意圖(左)與向量-矩陣運算(右)
隨著工業(yè)界芯片制造技術(shù)的發(fā)展與摩爾定律的逐漸失效,簡單通過提升工藝制程來在面積不變的條件下增加晶體管數(shù)量的方式已經(jīng)逐漸陷入瓶頸。相應(yīng)的,二維技術(shù)的局限使工藝向第三維度邁進。例如在存儲領(lǐng)域,3D構(gòu)架和片內(nèi)垂直堆疊技術(shù)可在片上成倍增加緩存容量,其代表為高帶寬存儲器(HighBandwidth Memory,HBM)和混合存儲器立方體(HybridMemory Cube,HMC)。據(jù)Intel透露,Lake Crest的片上HBM2可提供***12倍于DDR4的帶寬。目前,NVIDIAP100和V100 GPU已集成HBM2,片內(nèi)帶寬高達(dá)900GB/s;TPU2的片內(nèi)HBM帶寬為600GB/s;Xilinx集成HBM的FPGA將在18年上市。這一技術(shù)革新使得對于當(dāng)前的深度學(xué)習(xí)模型,即使不采用芯片級互聯(lián)方案也有望將整個模型置于片上,釋放了FPGA/ASIC對片外DRAM的需求,為AI芯片發(fā)展提供巨大動力。
三、結(jié)語
上面的論述主要以當(dāng)前學(xué)術(shù)界在AI處理器構(gòu)架方面的討論為主。然而在工業(yè)界,AI的大量需求已經(jīng)在某些領(lǐng)域集中爆發(fā),如云服務(wù)、大數(shù)據(jù)處理、安防、手機端應(yīng)用等。甚至在一些應(yīng)用中已經(jīng)落地,如Google的TPU,華為的麒麟970等。AI處理器的發(fā)展和現(xiàn)狀如何?
參考文獻
[1] 唐杉, 脈動陣列-因Google TPU獲得新生. http://mp.weixin.qq.com/s/g-BDlvSy-cx4AKItcWF7jQ
[2] Chen Y, Chen Y, Chen Y, et al.DianNao: a small-footprint high-throughput accelerator for ubiquitousmachine-learning[C]// International Conference on Architectural Support forProgramming Languages and Operating Systems. ACM, 2014:269-284.
[3] Luo T, Luo T, Liu S, et al.DaDianNao: A Machine-Learning Supercomputer[C]// Ieee/acm InternationalSymposium on Microarchitecture. IEEE, 2015:609-622.
[4] Liu D, Chen T, Liu S, et al.PuDianNao: A Polyvalent Machine Learning Accelerator[C]// TwentiethInternational Conference on Architectural Support for Programming Languages andOperating Systems. ACM, 2015:369-381.
[5] Du Z, Fasthuber R, Chen T, et al.ShiDianNao: shifting vision processing closer to the sensor[C]// ACM/IEEE,International Symposium on Computer Architecture. IEEE, 2015:92-104.
[6] Eric Chung, Jeremy Fowers, KalinOvtcharov, et al. Accelerating Persistent Neural Networks at Datacenter Scale.Hot Chips 2017.
[7] Meng W, Gu Z, Zhang M, et al.Two-bit networks for deep learning on resource-constrained embedded devices[J].arXiv preprint arXiv:1701.00485, 2017.
[8] Hubara I, Courbariaux M, SoudryD, et al. Binarized neural networks[C]//Advances in neural informationprocessing systems. 2016: 4107-4115.
[9] Qiu J, Wang J, Yao S, et al.Going deeper with embedded fpga platform for convolutional neuralnetwork[C]//Proceedings of the 2016 ACM/SIGDA International Symposium onField-Programmable Gate Arrays. ACM, 2016: 26-35.
[10] Xilinx, Deep Learningwith INT8Optimizationon Xilinx Devices, https://www.xilinx.com/support/documentation/white_papers/wp486-deep-learning-int8.pdf
[11] Han S, Kang J, Mao H, et al.Ese: Efficient speech recognition engine with compressed lstm on fpga[J]. arXivpreprint arXiv:1612.00694, 2016.
[12] Zhang S, Du Z, Zhang L, et al. Cambricon-X: An accelerator for sparseneural networks[C]// Ieee/acm International Symposium on Microarchitecture.IEEE Computer Society, 2016:1-12.
[13] Shafiee A, Nag A, MuralimanoharN, et al. ISAAC: A convolutional neural network accelerator with in-situ analogarithmetic in crossbars[C]//Proceedings of the 43rd International Symposium onComputer Architecture. IEEE Press, 2016: 14-26.
原文鏈接:http://suo.im/4m1gvp
作者:kevinxiaoyu
【本文是51CTO專欄作者“騰訊云技術(shù)社區(qū)”的原創(chuàng)稿件,轉(zhuǎn)載請通過51CTO聯(lián)系原作者獲取授權(quán)】