深度學習的異構加速技術(二):螺獅殼裏作道場

做者簡介:kevinxiaoyu,高級研究員,隸屬騰訊TEG-架構平臺部,主要研究方向爲深度學習異構計算與硬件加速、FPGA雲、高速視覺感知等方向的構架設計和優化。「深度學習的異構加速技術」系列共有三篇文章,主要在技術層面,對學術界和工業界異構加速的構架演進進行分析。前端

1、綜述

「深度學習的異構加速技術(一)」一文所述的AI加速平臺的第一階段中,不管在FPGA仍是ASIC設計,不管針對CNN仍是LSTM與MLP,不管應用在嵌入式終端仍是雲端(TPU1),其構架的核心都是解決帶寬問題。不解決帶寬問題,空有計算能力,利用率卻提不上來。就像一個8核CPU,若其中一個內核就將內存帶寬100%佔用,致使其餘7個核讀不到計算所需的數據,將始終處於閒置狀態。對此,學術界涌現了大量文獻從不一樣角度對帶寬問題進行討論,可概括爲如下幾種:算法

A、流式處理與數據複用
B、片上存儲及其優化
C、位寬壓縮
D、稀疏優化
E、片上模型與芯片級互聯
F、新興技術:二值網絡、憶阻器與HBM編程

下面對上述方法如何解決帶寬問題,分別論述。緩存

2、不一樣招式的PK與演進

2.一、流式處理與數據複用

流式處理是應用於FPGA和專用ASIC高效運算結構,其核心是基於流水線的指令並行,即當前處理單元的結果不寫回緩存,而直接做爲下一級處理單元的輸入,取代了當前處理單元結果回寫和下一處理單元數據讀取的存儲器訪問。多核CPU和GPU多采用數據並行構架,與流式處理構架的對好比圖2.1所示。圖左爲數據並行的處理方式,全部運算單元受控於一個控制模塊,統一從緩存中取數據進行計算,計算單元之間不存在數據交互。當衆多計算單元同時讀取緩存,將產生帶寬競爭形成瓶頸;圖右爲基於指令並行的二維流式處理,即每一個運算單元都有獨立的指令(即定製運算邏輯),數據從相鄰計算單元輸入,並輸出到下一級計算單元,只有與存儲相鄰的一側存在數據交互,從而大大下降了對存儲帶寬的依賴,表明爲FPGA和專用ASIC的定製化設計。服務器

圖2.1 數據並行與流式處理的對比網絡

圖2.2 一維脈動陣列(上)TPU中的二維脈動陣列(下)架構

當流式處理中各個處理單元(Processing Element, PE)具備相同結構時,有一個專屬名稱——脈動矩陣,一維的脈動矩陣如圖2.2(上)所示。當一個處理單元從存儲器讀取數據處理,通過若干同構PE處理後寫回到存儲器。對存儲器而言,只需知足單PE的讀寫帶寬便可,下降了數據存取頻率。脈動架構的思想很簡單:讓數據儘可能在處理單元中多流動一段時間。當一個數據從第一個PE輸入直至到達最後一個PE,它已經被處理了屢次。所以,它能夠在小帶寬下實現高吞吐[1]。併發

TPU中採用的二維脈動陣列如圖2.2(下)所示,用以實現矩陣-矩陣乘和向量-矩陣乘。數據分別從Cell陣列的上側和左側流入,從下側流出。每一個Cell是一個乘加單元,每一個週期完成一次乘法和一次加法。當使用該脈動陣列作卷積運算時,二維FeatureMap須要展開成一維向量,同時Kernel通過旋轉,然後輸入,如TPU專利中的圖2.3所示。框架

圖2.3 TPU專利中,脈動陣列在卷積運算時的數據重排運維

在極大增長數據複用的同時,脈動陣列也有兩個缺點,即數據重排和規模適配。第一,脈動矩陣主要實現向量/矩陣乘法。以CNN計算爲例,CNN數據進入脈動陣列須要調整好形式,而且嚴格遵循時鐘節拍和空間順序輸入。數據重排的額外操做增長了複雜性,據推測由軟件驅動實現。第二,在數據流經整個陣列後,才能輸出結果。當計算的向量中元素過少,脈動陣列規模過大時,不只難以將陣列中的每一個單元都利用起來,數據的導入和導出延時也隨着尺寸擴大而增長,下降了計算效率。所以在肯定脈動陣列的規模時,在考慮面積、能耗、峯值計算能力的同時,還要考慮典型應用下的效率。

寒武紀的DianNao系列芯片構架也採用了流式處理的乘加樹(DianNao[2]、DaDianNao[3]、PuDianNao[4])和類脈動陣列的結構(ShiDianNao[5])。爲了兼容小規模的矩陣運算並保持較高的利用率,同時更好的支持併發的多任務,DaDianNao和PuDianNao下降了計算粒度,採用了雙層細分的運算架構,即在頂層的PE陣列中,每一個PE由更小規模的多個運算單元構成,更細緻的任務分配和調度雖然佔用了額外的邏輯,但有利於保證每一個運算單元的計算效率並控制功耗,如圖2.4所示。

圖2.4 基於流式處理的計算單元組織結構:從上到下依次爲DianNao、DaDianNao總體框架與處理單元、ShiDianNao、PuDianNao的整體框圖和每一個MLU處理單元的內部結構

除了採用流式處理減小PE對輸入帶寬的依賴,還可經過計算中的數據複用下降帶寬,CNN中的複用方式如圖2.5所示。

(a) (b) (c)

圖2.5 CNN中的數據複用

在圖2.5 的(a) (b)(c)分別對應卷積核的整張FeatureMap複用、一組FeatureMap對多組Filter的複用、Filter經過增長BatchSize而複用。當上述三種方式結合使用時,可極大提高數據複用率,這也是TPU在處理CNN時逼近峯值算力,達到86Tops/s的緣由之一。

2.二、片上存儲及其優化

片外存儲器(如DDR等)具備容量大的優點,然而在ASIC和FPGA設計中,DRAM的使用常存在兩個問題,一是帶寬不足,二是功耗過大。因爲須要高頻驅動IO,DRAM的訪問能耗一般是單位運算的200倍以上,DRAM訪問與其它操做的能耗對好比圖2.6所示。

圖2.6 片外DRAM訪問的能耗開銷

爲了解決帶寬和能耗問題,一般採用兩種方式:片上緩存和臨近存儲。

1)增長片上緩存,有利於在更多狀況下增長數據複用。例如矩陣A和B相乘時,若B能所有存入緩存,則僅加載B一次,複用次數等價於A的行數;若緩存不夠,則需屢次加載,增長帶寬消耗。當片上緩存足夠大,能夠存下全部計算所需的數據,或經過主控處理器按需發送數據,便可放棄片外DRAM,極大下降功耗和板卡面積,這也是半導體頂會ISSCC2016中大部分AI ASIC論文采用的方案。

2)臨近存儲。當從片上緩存加載數據時,若採用單一的片上存儲,其接口常常不能知足帶寬的需求,集中的存儲和較長的讀寫路徑也會增長延遲。此時能夠增長片上存儲的數量並將其分佈於計算單元數據接口的臨近位置,使計算單元能夠獨享各自的存儲器帶寬。隨着數量的增長,片上存儲的總帶寬也隨之增長,如圖2.7所示。

圖2.7 TPU(上)和DianNao(下)的片上存儲器分佈

圖2.7中的脈動陣列和乘加樹都是規模較大的計算單元,屬於粗粒度。當採用細粒度計算單元的結構時,如圖2.8所示,可採用分層級存儲方式,即除了在片上配置共享緩存以外,在每一個計算單元中也配置專屬存儲器,使計算單元獨享其帶寬並減小對共享緩存的訪問。寒武紀的DaDianNao採用也是分層級存儲,共三層構架,分別配置了中央存儲器,四塊環形分佈存儲器,和輸入輸出存儲器,如圖2.9所示,極大加強了片上的存儲深度和帶寬,輔以芯片間的互聯總線,可將整個模型放在片上,實現片上Training和Inference。

圖2.8 細粒度計算單元與鄰近存儲,上圖中深紅色爲存儲器

圖2.9DaDianNao的計算單元與存儲器分佈

2.三、位寬壓縮

在兩年前,深度學習的定製處理器構架還處於初始階段,在Inference中繼承了CPU和GPU的32bit浮點量化,每次乘法運算不只須要12字節的讀寫(8bit量化時爲3字節),32位運算單元佔用較大的片上面積,增長了能耗和帶寬消耗。PuDianNao的論文中指出[4],16bit乘法器在ASIC佔用面積上是32bit乘法器的1/5,即在相同尺寸的面積上可佈局5倍數量的乘法器。當使用8bit時將得到更高收益。所以,學術界孜孜不倦的追求更低的量化精度,從16bit,到自定義的9bit[6],8bit,甚至更激進的2bit和1bit的二值網絡[7-8]。當高位寬轉爲低位寬的量化時,不可避免的帶來精度損失。對此,可經過量化模式、表徵範圍的調整、編碼等方式、甚至增長模型深度(二值網絡)來下降對精度的影響,其中量化模式、表徵範圍的調整方法如圖2.10 所示。

(a) (b)

圖2.10 (a) 幾種量化模式,和 (b) 動態位寬調整

圖2.10 (a) 中爲不一樣的量化模式,一樣的8bit,可根據模型中數值的分佈狀況採用爲線性量化、Log量化、或非線性量化表示。圖2.10 (b)是Jiantao Qiu等提出的動態位寬調整[9],使8bit的量化在不一樣層之間使用不一樣的偏移量和整數、小數分配,從而在最小量化偏差的約束下動態調整量化範圍和精度,結合重訓練,可大幅下降低位寬帶來的影響。在CNN模型中的測試結果見下表:

低位寬意味着在處理相同的任務時更小的算力、帶寬和功耗消耗。在算力不變的前提下,成倍的增長吞吐。對於數據中心,可大幅度下降運維成本,使用更少的服務器或更廉價的計算平臺便可知足需求(TPU的數據類型即爲8/16bit);對於更注重能耗比和小型化嵌入式前端,可大幅下降成本。目前,8bit的量化精度已經獲得工業界承認,GPU也宣佈在硬件上提供對8bit的支持,從而將計算性能提升近4倍,如圖2.11所示。FPGA巨頭Xilinx也在AI加速的官方文檔中論述了8bit量化的可行性[10]。

圖2.11 NVIDIA對int8的支持

2.四、稀疏優化

上述的論述主要針對稠密矩陣計算。在實際應用中,有很大一部分AI應用和矩陣運算屬於稀疏運算,其主要來源於兩個方面:

1) 算法自己存在稀疏。如NLP(Natural Language Processing,天然語言處理)、推薦算法等應用中,一般一個幾萬維的向量中,僅有幾個非零元素,通通按照稠密矩陣處理顯然得不償失。

2) 算法改形成稀疏。爲了增長普適性,深度學習的模型自己存在冗餘。在針對某一應用完成訓練後,不少參數的貢獻極低,能夠經過剪枝和從新訓練將模型轉化爲稀疏。如深鑑科技的韓鬆在FPGA2017上提出針對LSTM的模型剪枝和專用的稀疏化處理架構,如圖2.12 所示[11]。

圖2.12 LSTM模型剪枝比例與精度(左)和稀疏處理構架(右)

圖2.12 左圖,爲LSTM模型剪枝掉90%的參數後,基本沒有精度損失,模型獲得了極大的稀疏化。圖右側爲針對稀疏的FPGA處理構架,將處理的PE之間進行異步調度,在每一個PE的數據入口使用獨立的數據緩存,僅將非零元素壓入參與計算,得到了3倍於Pascal Titan X的性能收益和11.5倍的功耗收益。稀疏化並不只限於LSTM,在CNN上也有對應的應用。

與之對應的,寒武紀也開發了針對稀疏神經網絡的Cambricon-X[12]處理器,如圖2.13所示。相似的,Cambricon-X也在每一個PE的輸入端口加入了Indexing的步驟,將非零元素篩選出後再輸入進PE。與深鑑不一樣的是,Cambricon-X支持不一樣稀疏程度的兩種indexing編碼,在不一樣稀疏程度的模型下使用不一樣的編碼方式,以優化帶寬消耗。

圖2.13 寒武紀Cambricon-X稀疏神經網絡處理器結構

可針對稀疏的優化有兩個目的,一是從緩存中讀入的都是有效數據從而避免大量無用的零元素佔滿帶寬的狀況,二是保證片上PE的計算效率,使每一個PE的每次計算的輸入都是「乾貨」。當模型剪枝結合稀疏處理構架,將成倍提高FPGA和ASIC的計算能力,效果顯著,是異構加速的熱點之一。

綜上所述,稀疏化是從模型角度,從根本上減小計算量,在構架演進缺少突破的狀況下,帶來的收益是構架優化所不能比擬的。尤爲在結合位寬壓縮後,性能提高很是顯著。然而稀疏化須要根據構架特色,且會帶來精度損失,須要結合模型重訓練來彌補,反覆調整。上述過程增長了稀疏優化的門檻,須要算法開發和硬件優化團隊的聯合協做。對此,深鑑科技等一些公司推出稀疏+重訓練的專用工具,簡化了這一過程,在大量部署的場景下,將帶來至關的成本優點。

2.五、片上模型與芯片級互聯

爲了解決帶寬問題,一般的作法是增長數據複用。在每次計算的兩個值中,一個是權值Weight,一個是輸入Activation。若是有足夠大的片上緩存,結合適當的位寬壓縮方法,將全部Weight都緩存在片上,每次僅輸入Activation,就能夠在優化數據複用以前就將帶寬減半。然而從GoogleNet50M到ResNet 150M的參數數量,在高成本的HBM普及以前,ASIC在相對面積上沒法作到如此大的片上存儲。而隨着模型研究的不斷深刻,更深、參數更多的模型還會繼續出現。對此,基於芯片級互聯和模型拆分的處理模式,結合多片互聯技術,將多組拆分層的參數配置於多個芯片上,在Inference過程當中用多芯片共同完成同一任務的處理。寒武紀的DaDianNao就是實現這樣的一種芯片互聯結合大緩存的設計,如圖2.14所示。

圖2.14DaDianNao中的存儲器分佈(圖中藍色部分)和多片互聯時的加速能力(以GPU K20M爲單位性能的比較)

爲了將整個模型放在片上,DaDianNao一方面將片上緩存的容量增長到36MB(DaDianNao爲36MB和4608個乘加器,TPU爲28MB緩存和65536乘加器),充分保證計算單元的讀寫帶寬,另外一方面經過HT2.0實現6.4GB/s*4通道的片間通訊帶寬,下降數據才層與層之間傳遞的延遲,徹底取代了片外DRAM的交互,解決帶寬制約計算的問題。與之相應的,微軟在Hot Chips 2017上提出將LSTM模型拆分後部署到多片FPGA,以擺脫片外存儲器訪問以實現Inference下的超低延遲[2]。

2.六、新興技術:二值網絡、憶阻器與HBM

除了採用上述方式解決帶寬問題,學術界近期涌現出了兩種更爲激進的方法,二值網絡和憶阻器;工業界在存儲器技術上也有了新的突破,即HBM。

二值網絡是將Weight和Activation中的一部分,甚至所有轉化爲1bit,將乘法簡化爲異或等邏輯運算,大大下降帶寬,很是適合DSP資源有限而邏輯資源豐富的FPGA,以及可徹底定製的ASIC。相對而言,GPU的計算單元只能以32/16/8bit爲單位進行運算,即便運行二值模型,加速效果也不會比8bit模型快多少。所以,二值網絡成爲FPGA和ASIC在低功耗嵌入式前端應用的利器。目前二值網絡的重點還在模型討論階段,討論如何經過增長深度與模型調整來彌補二值後的精度損失。在簡單的數據集下的效果已獲得承認,如MNIST,Cifar-10等。

既然帶寬成爲計算瓶頸,那麼有沒有可能把計算放到存儲器內部呢?既然計算單元臨近存儲的構架能提高計算效率,那麼可否把計算和存儲兩者合一呢?憶阻器正是實現存儲器內部計算的一種器件,經過電流、電壓和電導的乘法關係,在輸入端加入對應電壓,在輸出便可得到乘加結果,如圖2.15所示[13]。當將電導做爲可編程的Weight值,輸入做爲Activation,便可實現神經網絡計算。目前在工藝限制下,8bit的可編程電導技術還不成熟,但在更低量化精度下尚可。將存儲和計算結合,將造成一種有別於馮諾依曼體系的全新型構架,稱爲在存儲計算(In-Memory Computing),有着巨大的想象空間。

圖2.15 憶阻器完成乘加示意圖(左)與向量-矩陣運算(右)

隨着工業界芯片製造技術的發展與摩爾定律的逐漸失效,簡單經過提高工藝製程來在面積不變的條件下增長晶體管數量的方式已經逐漸陷入瓶頸。相應的,二維技術的侷限使工藝向第三維度邁進。例如在存儲領域,3D構架和片內垂直堆疊技術可在片上成倍增長緩存容量,其表明爲高帶寬存儲器(HighBandwidth Memory,HBM)和混合存儲器立方體(HybridMemory Cube,HMC)。據Intel透露,Lake Crest的片上HBM2可提供最高12倍於DDR4的帶寬。目前,NVIDIAP100和V100 GPU已集成HBM2,片內帶寬高達900GB/s;TPU2的片內HBM帶寬爲600GB/s;Xilinx集成HBM的FPGA將在18年上市。這一技術革新使得對於當前的深度學習模型,即便不採用芯片級互聯方案也有望將整個模型置於片上,釋放了FPGA/ASIC對片外DRAM的需求,爲AI芯片發展提供巨大動力。

3、結語

上面的論述主要以當前學術界在AI處理器構架方面的討論爲主。然而在工業界,AI的大量需求已經在某些領域集中爆發,如雲服務、大數據處理、安防、手機端應用等。甚至在一些應用中已經落地,如Google的TPU,華爲的麒麟970等。AI處理器的發展和現狀如何?咱們下期見!

參考文獻

[1] 唐杉, 脈動陣列-因Google TPU得到新生. mp.weixin.qq.com/s/g-BDlvSy-…
[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, www.xilinx.com/support/doc…
[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.


此文已由做者受權騰訊雲技術社區發佈,轉載請註明 文章出處
原文連接:https://cloud.tencent.com/community/article/581797