AI芯片技术发展
關注我們
更多精彩等你發現!
?
?
▌本文來源:StarryHeavensAbove(已授權)
?
前段時間我在Techbeat上做了一個關于AI芯片的講座,這里整理一個文字的版本,分享給大家。
?
我們說AI芯片,一般是泛指所有用來加速AI應用,特別是基于神經網絡的深度學習應用的硬件,它可以是一顆獨立的芯片,也可以是芯片中的模塊,其基本技術都是相關的。
當我們討論AI芯片出現的背景的時候,經常會看到這兩張圖。左邊這張是openai在2018年發布的報告,簡單來說,它的結論就是從2012年到2018年,我們訓練神經網絡模型需要的計算量呈指數型增長。這背后一方面是因為我們使用的神經網絡模型的規模越來越大,另一方是要訓練這樣的模型需要更大的數據集。這個規律我們也稱為AI的摩爾定律。
右邊這張圖是通用處理器的性能在40年間增長的趨勢,可以看到,在近10年,處理器性能的增長已經非常緩慢了,很難達到實際的摩爾定律最初的預測。
綜合來說,AI計算的需求爆炸性增長,而通用處理的處理能力很難提升,這中間就出現一個很明顯的gap。
所以,一個很直接的想法就是,如果通用處理器不能滿足AI計算的需求,我們是否可以設計針對AI計算的專用處理器呢?答案當然是肯定的。這也就是領域專用計算的概念。一般來說,一個領域是不是適合開發專用的處理器有兩個條件,第一是這個領域的應用需求足夠大,有很強的動力驅動相應的研發投入;第二是這個領域的計算模式限定在一個較小的集合,這樣我們才有可能用專用硬件來對這些特定的運算進行加速。AI領域正好滿足這兩個條件。因此,我們說AI芯片設計是一個典型的領域專用計算問題,也就是domain specific computing。
領域計算并不是一個新的概念,這里這張圖是我在2013年基于之前的一篇論文總結的,主要是描述領域專用處理器的設計方法學,這里也可以看出我們在解決一個領域專用計算問題的時候要做哪些事情。首先需要對特定領域進行建模,把需求模型化和量化,作為后續工作的評價標準。建模可能會使用特殊的語言擴展或者數據流圖的形式。Domain Model是后續開發的基礎,據此可以得到兩個重要的中間描述,分離出指導硬件設計和生成應用軟件代碼的兩部分信息。硬件架構設計的主要工作是設計專用的計算引擎(Customized Computing Engine)和互連機制(Customized Interconnection)。計算引擎分為三種:專用處理器(ASP),硬件加速器(HW Accelerators)和可編程陣列(Programing fabric)。圖的右半部分就是軟件開發的工作和相應的工具。細節內容我就不展開講了,感興趣的朋友可以看看我的公眾號上關于專用處理器的文章。這里我只想強調一點,就是我們設計一個專用處理器,往往需要設計新的指令集架構,編程模型,甚至是新的編程語言。這也意味著我們可能沒有現成的軟件工具可以使用,我們在設計和優化新的硬件的同時,必須打造新的軟件工具鏈。只有提供全棧的軟硬件,才能讓用戶特別是開發者利用好新硬件的能力。這個也是專用處理器設計的一個巨大挑戰。
?
如果我們按照設計領域專用處理器的思路來考慮AI芯片,那么我們首先需要分析AI領域的計算模式特征。這里展示的是我們非常熟悉的Resnet-50神經網絡模型。Resnet在圖像處理任務里使用非常廣泛,它需要的計算量還是比較大的。做一次正向處理大約需要3.9G的MAC。但如果我們進一步分析它需要的運算,其中絕大部分是卷積操作。這在各類CNN網絡里是非常常見的。如果我們觀察其它常用的神經網絡模型,不難發現使用最多的操作的類型是很有限的,而需要運算量最大的基本是卷積和矩陣乘這類的操作??紤]到卷積實際上也可以轉換為矩陣乘,神經網絡的核心處理可以歸結為GEMM類型運算。因此,加速神經網絡的核心問題就是加速GEMM類運算的問題,這個也是一般AI芯片設計需要首先考慮的問題。
GEMM類的運算模式并不復雜,一直以來也是比較常用的運算,對它進行加速方法也有很多的研究,只是現在的需求和使用場景發生了很大變化。在實際系統中,我們需要根據不同目標來進行設計和優化,并很好的融合到整體架構當中。下面我們就看幾個不同類型的GEMM加速的實現案例。
首先是Google在2017年公開的第一代TPU芯片,這可以說是一個專門加速矩陣運算的芯片。它的核心是一個256x256的矩陣乘陣列,可以同時完成6w多次的MAC操作,這種規模的MAC陣列在一般的芯片里是很難見到的。而Google很巧妙的使用了脈動陣列的架構,簡化了硬件實現的難度。Google的TPU網站上有很清楚的動態展示,對脈動陣列感興趣的朋友可以看看。當然,在實際應用中要充分利用這么大的陣列也不容易,到后面幾代TPU,就把陣列分成了兩塊,每塊的規模減少了一半。另外,對于不適合矩陣乘陣列的操作,TPU里面設計了專門的加速器,以保證整個網絡的效率。TPU的指令集也很簡單,主要就是Load,Store和計算,基本就是保證矩陣乘陣列的工作。
Nvidia為加速GEMM在GPU中設計了新的Tensor Core和相應的矩陣運算指令。第一代Tensor core主要執行4X4矩陣的運算,最新發布的第三代tensor core規模大一點,但相對TPU的MAC陣列,粒度細很多,同時Tensor Core和GPU架構緊密融合。他的優勢是使用比較靈活,比較容易兼容CUDA編程模型。對于非GEMM類型的操作,則可以在GPU傳統的計算單元中處理。但如果單純看GEMM加速的效率,在有些情況下比規模更大的GEMM引擎要差一些。
Habana則是在DSP的基礎上增加了GEMM引擎,這也是一種比較常見的AI芯片架構方式,它也是考慮到了靈活性和效率的平衡。
當然,對GEMM的加速效果是受很多因素影響的。首先要有大量的運算單元,這個相對比較容易,但即使有了大量的運算單元,如果數據不能有效的供給到GEMM引擎,則它理論上計算能力再強也發揮不出來。這也是為什么我們經??吹紸I芯片宣傳的峰值運算能力很強,但跑實際網絡的有效算力就差了很多。此外,還有很多需要做架構優化和權衡的問題。比如可編程性。值得一提的是,Habana一直強調自己是從做硬件之前就開始做軟件工具的。從實際展示的結果來看,Habana的芯片利用率還是比較高的,這個應該是硬件架構比較平衡,軟件工具比較完善才可能做到的。
下面我們看一下華為在去年的Hot chips會議上展示的達芬奇AI處理器架構,它吸取了過去幾年AI硬件加速的經驗,融合向量,標量和矩陣的的運算。3D Cube:16*16*16三維彈性立方體,可在一個時鐘周期內完成4096個FP16 MAC運算。而這個核通過不同的配置,可以作為 幾十毫瓦的IP到支持幾百瓦的芯片,的不同場景,比如高能效的Ascend 310到算力最強的Ascend 910。應該說達芬奇架構代表了對現階段AI硬件加速的比較一致的認識,大家有興趣也可以去看一下《昇騰AI處理器架構與編程》這本書,有很多詳細的介紹。
當然,這幾年AI芯片的熱潮也給我們帶來一些很有意思的,比較特殊的架構。比如,Grophcore的IPU是一個大規模并行,同構眾核架構。最基本的硬件處理單元是IPU-Core,它是一個SMT多線程處理器,可以同時跑6個線程,更接近多線程CPU。芯片上有一千多個小的這種通用處理器核。同時,芯片沒有外部存儲,而是實現了300M左右的片上存儲,這個也是很少見的。Graphcore還設計了一個相當簡潔的多核通信和同步機制,大大簡化的硬件設計和多芯片擴展的難度。而另外一個更激進的架構是Cerenbras的wafer級芯片,也就是整個wafer產出一顆芯片,可以說是工程上的奇跡。不過,目前看來這個芯片還是主要用在非常專用的場景。我們當然也很希望未來看到更多有意思的架構出現。
如果總結一下這幾年AI計算加速在產業的發展,簡單來說就是無芯片不AI。從云到邊到端的各種場景都需要AI運算能力,因此也都需要AI加速。但是在不同的場景下,對AI加速的需求又有很大差別。比如云端的訓練場景,需要高精度,高吞吐率,需要處理很大的數據集,因此還需要很大的存儲。同時,軟硬件必須有很強的擴展能力,支持大規模集群的訓練模式。而云端推理場景的需求又有一些差異,高吞吐和低時延的要求并存。如果看端設備,從可穿戴設備,到手機,到自動駕駛,需求和應用場景的限制差異很大,不同場景可能需要不同的芯片來支持。端設備中,很少會有獨立的AI芯片,AI加速主要是SoC中的一個IP。另外一個很有前景的應用場景是邊緣服務器,這個場景可能是AI和5G最好的一個結合點。除了傳統的各種各樣處理器,包括CPU,會強化AI處理能力之外,在網絡芯片,存儲芯片,或者傳感器芯片里也有增加AI處理的嘗試,這樣做的好處是讓AI處理盡量離數據更近,可以緩解大量數據搬運的需求。
?
?
?
下面我們來看看軟件棧方面的情況。我們前面已經強調了專用處理器的軟件工具鏈方面的挑戰和重要性,這里還是看看華為在hotchips上介紹的例子。對于領域專用處理器來說,其用戶往往也是開發者。這里將用戶分成了不同的情況。對于專家級的用戶,你需要開發更低層次的編程接口,用戶自己會做更多的優化工作。而對于普通用戶,只會在抽象層次比較高的編程接口和模型上工作,大部分的優化工作需要工具鏈中的編譯器來完成,或者通過優化后的庫來支持,不過這兩類工作的挑戰都不小。
?
這個例子里面中間一列,我們看到目前業界應用最多的軟件棧。硬件基于Nvidia GPU,軟件是基于CUDA。正好Nvidia剛剛發布了新的AI軟硬件產品,我們不妨展開來看一下。
首先是Nvidia新推出的A100,給AI硬件加速又設定了新的標桿。A100是7nm工藝,使用HBM2存儲器接口,3D封裝,整體性能有大幅提升。具體來說,Tensor Core支持更多的數據類型,特別是AI中常用的數據類型,支持固定結構的2:4稀疏化處理。FP16/BF16的峰值處理能力是312TFLOPS,INT8的峰值處理能力是624TOPS,如果是稀疏處理的情況,則最高性能翻倍。近幾年很多AI芯片初創公司都說自己的芯片硬件性能比Nvidia GPU高幾倍,不過現在看來,即使單看硬件,A100的指標也是最強的。
在A100的基礎上,Nvidia的整個硬件產品線也做了升級,從顯卡到云服務器到邊緣服務器到自動駕駛和智能機器平臺,非常完整。
我們如果來看軟件工具和生態,Nvidia更是絕對的標桿,這方面其它廠商都有比較大的差距。本次黃教主展示的數據是有180萬的開發者使用Nvidia的軟件生態。首先是積累十多年的CUDA,在這之上又包裝了一層CUDA-X,還整合了包括AI在內的各種領域功能,甚至包括對5G虛擬接入網的支持。對于不同類型的應用,不同類型的用戶,都可以提供比較完善的支持,而且這套生態還是基于一套非常成熟和一致的底層架構,確實是非常厲害。我之前也整理了一個CUDA生態比較詳細的信息圖,有興趣的朋友可以到我的公眾號看看。
?
在這次的廚房展示中,黃教主說的最多的一個詞可能是end-to-end,也就是端到端的支持,還給出了很多實例,比如對于推薦系統和交互是語音結合自然語言處理這類的系統都給出了專門的解決方案。而Nvidia AI就是一個端到端的軟硬件加速方案,從大數據處理,到AI的training,再到inference,可以說把Nvidia的生態優勢發揮到了極致。其中對于推薦系統,Nvidia專門推出了一個Merlin框架,解決用GPU加速推薦系統的問題。對這個問題感興趣的朋友,可以看看“如何加速推薦系統?這是個高價值問題”。
?
?
?
下面我們討論一下在軟件棧里面非常重要的編譯器。這張圖來自Facebook開發的GLOW編譯器,這里主要用來展示一下一般來說AI領域的編譯器是做什么的。首先,和傳統的編譯器類似,AI編譯器也是在不同的中間表示,也就是IR之間,進行轉換和優化的工具。但它的輸入一般不是編程語言而是神經網絡模型,比如是這里的計算圖的形式,這個計算圖可能是來自上層的機器學習框架。AI編譯器也可以在圖的層次進行一些優化,然后轉換為層次更低的IR,IR可能有多個層次,編譯器就是逐漸的降低IR的層次,最終生成硬件能夠運行的代碼。我們可以看到,AI編譯器的IR會有AI運算的特點,比如AI中常用的算子,conv,relu,pooling等等。此外AI編譯器還需要使用一些新的優化技術和算法來優化計算圖或者算子的實現。
目前的開源AI編譯器項目也非?;钴S,這其中最有代表性的兩個是TVM和Google的MLIR。這兩個編譯器也都融入了很多先進的思想,從一般的編譯器功能擴展到軟硬件協同設計的概念。比如TVM就包括了一個開源的硬件加速器VTA,展示了從編譯器到硬件加速器聯合優化的初步嘗試。而AutoTVM也是一個自動的編譯優化工具。
而MLIR也明確說明了它是一個開源的程序優化框架。MLIR的第一個重要賣點就是多層次IR。原因也很簡單,由于優化目標和方法的不同,單層或者很少的IR層次無法滿足要求。當然,支持多層IR也不是說說這么簡單,MLIR里支持IR的自由擴展使用了Dialect的設計,并提供了定義和操作Dialect的方法和基本的工具。這正好也是MLIR的第二個主要賣點,也就是提供了比較豐富的基礎設施支持。MLIR充分利用了LLVM的經驗和優化算法,也希望兼容各種現有的優化手段。對需要打造自己的編譯器的開發者來說,可以簡化很多工作。MLIR項目的理念非常好,有可能解決很多困擾我們的問題,非常值得大家關注。另外,值得一提的是,現在的AI編譯器和AI框架并沒有一個非常清晰的邊界,未來也會是一個相互融合的趨勢,當然總的目標都是更高效的執行AI運算。
?
?
到這里,我們基本看到了近幾年AI芯片在硬件和軟件兩條線上的最新的進展。下面我們來聊聊AIi芯片的未來。
AI芯片的本質是一個領域專用架構,那么它發展的方向是完全取決于AI領域算法和應用發展的方向。2012年的Alexnet到2018年的Transformer,其核心計算還是稠密矩陣運算,這也是目前AI芯片支持的最好的計算模式。但在現在這個時間點,AI算法的走向還不是很清晰,未來每個分支的計算需求可能相差很遠。在出現一個統一的模型之前,也很難形成一個統一的AI芯片架構。
除了AI硬件越來越強,神經網絡模型也在進化。OpenAI正好在最近又發布了一個報告,是說從2012年到現在,大家設計的神經網絡模型的效率越來越高,訓練一個具有同等精度的模型的計算代價減少了大約44倍,也就是說現在設計的很好的小模型完全可以達到之前大模型的精度。當然,這并不是說我們就不需要硬件加速,這里畢竟只是有限的場景。這個報告還有一些其它的有趣信息,比如從17年開始,訓練一個resnet50,按美元計算的成本下降了184x,這個數據應該是Google TPU實現的。這也說明,這幾年專用硬件加速技術的發展,對提高AI計算的效率做出了很大的貢獻。
當然,在一些成熟AI算法不斷優化執行效率的同時,新的突破還是往往需要更多的數據和更大的模型,比如最近的GPT-3。同時,AI應用場景也越來越廣,這兩個例子是最近比較熱的話題,把AI用于芯片設計和把AI用于5G的信號處理。因此,AI發展對算力和算力效率的需求在可預見的未來不會減弱。
要說技術趨勢,學術研究應該是最好的風向標。最近我們做了一件事情,整理了一些近幾年體系結構頂會中的論文(ISCA,ASPLOS,MICRO,HPCA),對和AI相關的研究加了些標簽,形成了一個AI芯片相關論文的列表,方便大家查詢。同時我們也分析了一下相關研究的趨勢,AI芯片架構方面的研究從14年開始,到17年都非?;钴S,有很多創新的工作。近兩年,相關研究還是很多,但在架構層面已經很難看到大的創新了,這也是AI硬件加速技術走向成熟的正常表現。未來可能更多的創新會來自和電路和器件級技術的結合,比如存內計算,類腦計算;或者是針對特殊的計算模式或者新模型,比如稀疏化計算和近似計算,對圖網絡的加速;或者是針對數據而不是模型的特征來優化架構,等等。另外,軟件和編譯器層面的技術優化還是很大空間,而跨邊界的優化技術和方法學也是值得關注的方向。
另外一個有趣的問題是,如果算法不發生大的變化,按照現在AI加速的主要方法和半導體技術發展的趨勢,我們有可能在不遠的將來會碰到數字電路的極限。比如IBM就提出,1到10TFlops/W基本就是數字電路實現目前的深度學習計算的效率極限,在往后則要靠近似計算,模擬計算,甚至是材料上的創新了。所以我們也看到很多初創公司在做這個方向的嘗試。
除了領域專用計算方法之外,另一個可能延續摩爾定律的技術是Chiplet,現在一種比較有意思的中文翻譯是“芯粒”,芯片的芯,顆粒的粒。簡單來說,就是基于先進的封裝技術,可以把多個芯片的裸片封裝在一起,通過這種模式而不是單純靠芯片工藝的升級,來提升整體的性能。這些裸片可以是相同功能的算力擴展,也可以是不同功能,不同架構,甚至不同工藝的裸片的組合。這里給出的是Nvidia在Hotchips上展示的研究,通過chiplet技術實現一個可伸縮的deep learning加速器。這個話題很大,想象空間也很大,給我們帶來的可能不止是技術上的進步,還可能是芯片設計模式和方法上的改變,甚至商業模式上的創新。時間關系就不展開了,有興趣的朋友也可以看看我之前分析的文章。
參考資料:
公眾號專題:
人工智能芯片技術進步
人工智能芯片產業發展
人工智能芯片技術基礎
?
Tutorialon Hardware Accelerators for Deep Neural Networks
http://eyeriss.mit.edu/tutorial.html
https://www.rle.mit.edu/eems/wp-content/uploads/2017/11/2017_pieee_dnn.pdf
(Efficient Processing of Deep NeuralNetworks: A Tutorial and Survey)
https://slideslive.com/38921492
(Efficient Processing of Deep NeuralNetworks: from Algorithms to Hardware Architectures)
HardwareAccelerators for Machine Learning (CS 217)
https://cs217.stanford.edu/
AIChip Paper List
https://github.com/BirenResearch/AIChip_Paper_List
?
最后我增加一張slides,是大神Jim Keller對AI芯片的點評,值得大家細品一下。
?
?
- THE END -
🍁
?
往期精選?
【免費】FPGA工程師招聘平臺
一張圖了解芯片到底是如何設計的
漫畫:為什么C語言永不過時?
推薦一個新發現的電子愛好者資源網站
后香農時代:華為提出10大數學問題!你能看懂幾個?
國產芯片與國外芯片公司的差距
?
?
?
?
喜歡就點個在看再走吧
?
總結
- 上一篇: 4D毫米波雷达天线设计
- 下一篇: 【第115期】世界一流大学计算机专业,都