很多人會問,為什么沒有英偉達,?目前所有主流深度學習運算主流框架后端都是英偉達的CUDA,,包括TensorFlow、Caffe,、Caffe2,、PyTorch、mxnet,、PaddlePaddle,,CUDA包括微架構和指令集以及并行計算引擎。CUDA壟斷了深度學習或者也可以說壟斷了人工智能,,這一點類似ARM的微架構和指令集,。CUDA強大的生態(tài)系統(tǒng),造就了英偉達牢不可破的霸主地位,。深度學習的理論基礎在上世紀五十年代就已經齊備,,無法應用的關鍵就是缺乏像GPU這樣的密集簡單運算設備,是英偉達的GPU開創(chuàng)了人類的深度學習時代,,或者說人工智能時代,,CUDA強化了英偉達的地位。你可以不用英偉達的GPU,,但必須轉換格式來適應CUDA,。
CUDA開啟了并行計算或多核運算時代,今天人工智能用的所有加速器都是多核或眾核處理器,,幾乎都離不開CUDA,。CUDA程序構架分為兩部分:Host和Device。一般而言,,Host指的是CPU,,Device指的是GPU或者叫AI加速器。在CUDA程序構架中,主程序還是由CPU 來執(zhí)行,,而當遇到數(shù)據(jù)并行處理的部分,,CUDA 就會將程序編譯成 GPU能執(zhí)行的程序,并傳送到GPU,。而這個程序在CUDA里稱做核(kernel),。CUDA允許程序員定義稱為核的C語言函數(shù),從而擴展了C語言,,在調用此類函數(shù)時,,它將由N個不同的CUDA線程并行執(zhí)行N次,這與普通的C語言函數(shù)只執(zhí)行一次的方式不同,。執(zhí)行核的每個線程都會被分配一個獨特的線程ID,,可通過內置的threadIdx變量在內核中訪問此ID。在 CUDA 程序中,,主程序在調用任何 GPU內核之前,,必須對核進行執(zhí)行配置,即確定線程塊數(shù)和每個線程塊中的線程數(shù)以及共享內存大小,。你可以不用英偉達的GPU,,但最終都離不開CUDA,也就是需要轉換成CUDA格式,,這就意味著效率的下降,。所以英偉達是參考級的存在。
從CUDA的特性我們不難看出,,單獨的AI加速器是無法使用的。今天我們分析三款可用于智能駕駛領域的AI加速器,,分別是高通的AI100,,華為的昇騰,特斯拉的FSD,。這其中高通AI100比較少見,。
高通AI100最早于2019年4月在深圳的高通AI開放日露面,2020年9月量產,。AI100是高通目前唯一的AI推理運算加速器,,定位四個方面的應用:一是數(shù)據(jù)中心的邊緣計算,二是5G行動邊緣計算,,三是智能駕駛與智能交通,,四是5G基礎設施。
AI100有兩個側重點:一是5G游戲,,AI100發(fā)布當天邀請了VIVO手機,、騰訊王者榮耀開發(fā)團隊利用AI100現(xiàn)場開了一場電玩競賽,即把部分運算放到5G邊緣服務器上,,減輕手機端的負載,。二是智能交通和智能駕駛,,高通自動駕駛Ride平臺的AI加速器很有可能就是AI100的車規(guī)翻版。
高通特別展示了AI100在智能交通/智能駕駛領域的應用,。
同時支持24路200萬像素幀率25Hz的圖像識別,,特斯拉的FSD不過是同時8路130萬像素幀率30Hz的圖像識別,性能至少是特斯拉FSD的3倍,。 AI100可以像刀片服務器那樣應用,,用PCIe交換機最多16個級聯(lián)。
最高每瓦有12.37TOPs的算力,,特斯拉FSD是36瓦的功耗,,AI部分估計大約為24瓦,每瓦只有大約3TOPs每瓦的算力,,英偉達的Orin大致為5.2TOPs每瓦的算力,。
上圖為高通AI100內部框架圖。設計很簡潔,,16個AI核,,內核與內核之間是第四代PCIe連接,帶寬有186GB/s,,8通道的PCIe網絡,,然后再與各種片上網絡(NoC),包括存儲NoC,、運算NoC和配置NoC通過PCIe總線連接,。片上存儲器容量高達144MB,帶寬136GB/s,。外圍存儲器為256Gb的LPDDR4,。支持汽車行業(yè)的ISO26262安全標準,即ASIL,,達到B級,。
NoC是多核AI處理器的核心技術之一,特斯拉FSD只有兩個NPU,,很可能用不到NoC而用比較落后的總線技術,,不過高通和華為都用到了。
NoC的詳細理論就不說了,,可以理解為一個運行在PE與存儲之間的通訊網絡,。NoC技術和網絡通信中的OSI(Open System Interconnection)技術有很多相似之處,NoC技術的提出也是因為借鑒了并行計算機的互聯(lián)網絡和以太網絡的分層思想,,二者的相同點有:支持包交換,、路由協(xié)議、任務調度、可擴展等,。NoC更關注交換電路和緩存器的面積占用,,在設計時主要考量的方面也是這些。NoC的基本組成為:IP核,、路由器,、網絡適配器以及網絡鏈路,IP核和路由器位于系統(tǒng)層,,網絡適配器位于網絡適配層,。針對NoC的這四個基本組成,也衍生出了許多的研究方向和優(yōu)化途徑,。
常見AI加速器的NoC如上表,。需要指出高通和華為都用了Arteris,這家公司實際是高通的子公司,,高通在2013年11月收購了這家僅有43人的法國小公司,,今天中國幾乎所有的大中型芯片公司都是其客戶,包括瑞芯微,、國民技術,、華為、全志,、炬力,、展訊等,可以說都在給高通打工,。英特爾在2019年收購了Netspeed,,F(xiàn)acebook在2019年收購了Sonics,這兩家的NoC使用面遠不如高通的Arteris,。
每個AI核內部框架如上,,主要分4個部分,分別是標量處理,、向量處理、存儲處理和張量處理,。深度學習中經常出現(xiàn)4種量,,標量、向量,、矩陣和張量,。神經網絡最基本的數(shù)據(jù)結構就是向量和矩陣,神經網絡的輸入是向量,,然后通過每個矩陣對向量進行線性變換,,再經過激活函數(shù)的非線性變換,通過層層計算最終使得損失函數(shù)的最小化,完成模型的訓練,。
標量(scalar):一個標量就是一個單獨的數(shù)(整數(shù)或實數(shù)),,不同于線性代數(shù)中研究的其他大部分對象(通常是多個數(shù)的數(shù)組)。標量通常用斜體的小寫字母來表示,,標量就相當于Python中定義的x=1,。
向量(Vector),一個向量表示一組有序排列的數(shù),,通過次序中的索引我們能夠找到每個單獨的數(shù),,向量通常用粗體的小寫字母表示,向量中的每個元素就是一個標量,,向量相當于Python中的一維數(shù)組,。
矩陣(matrix),矩陣是一個二維數(shù)組,,其中的每一個元素由兩個索引來決定,,矩陣通常用加粗斜體的大寫字母表示,我們可以將矩陣看作是一個二維的數(shù)據(jù)表,,矩陣的每一行表示一個對象,,每一列表示一個特征。
張量(Tensor),,超過二維的數(shù)組,,一般來說,一個數(shù)組中的元素分布在若干維坐標的規(guī)則網格中,,被稱為張量,。如果一個張量是三維數(shù)組,那么我們就需要三個索引來決定元素的位置,,張量通常用加粗的大寫字母表示,。
不太嚴謹?shù)卣f,標量是0維空間中的一個點,,向量是一維空間中的一條線,,矩陣是二維空間的一個面,三維張量是三維空間中的一個體,。也就是說,,向量是由標量組成的,矩陣是向量組成的,,張量是矩陣組成的,。
標量運算部分可以看作一個小CPU,控制整個AI Core的運行,。標量計算單元可以對程序中的循環(huán)進行控制,,可以實現(xiàn)分支判斷,,其結果可以通過在事件同步模塊中插入同步符的方式來控制AI Core中其它功能性單元的執(zhí)行流水。它還為矩陣計算單元或向量計算單元提供數(shù)據(jù)地址和相關參數(shù)的計算,,并且能夠實現(xiàn)基本的算術運算,。復雜度較高的標量運算如數(shù)據(jù)流量控制則由專門的AI CPU通過算子完成,AI處理器是無法單獨工作的,,必須要外置的CPU給予配合,。
華為昇騰系列內核架構。圖片來源:互聯(lián)網
華為的昇騰910即Davinci Max,,和高通AI100一樣,,也是8192個Int8,4096個FP16,。不過昇騰910是訓練用的,,高通AI100是推理用的,但910不計成本使用HBM2代存儲,,性能遠超AI100,。
上圖為特斯拉FSD信號內部流轉,相干流量即深度學習的數(shù)據(jù)流量需要CPU控制,,當然也不只是為深度學習服務,。 圖像識別深度學習中運算量最大的卷積部分實際就是矩陣的乘和累加??梢苑纸鉃?維的標量或者叫算子(即權重)與2維的向量即輸入圖像乘和累加,。
上圖為特斯拉FSD神經網絡架構,特斯拉把矩陣的乘和累加簡單寫成了MulAccArray,。特斯拉做芯片剛剛入門,,F(xiàn)SD上除了NPU是自己做的外,其余都是對外采購的IP,。NPU方面,,主要就是堆砌MAC乘和累加單元,在稍微有技術含量的標量計算領域,,特斯拉沒有公布采用何種指令集,,應該是沒什么特色。華為和高通都是采用了VLIW,。
高通的向量處理器可以簡單看作一個DSP,。眾所周知,高通的AI技術來源于其DSP技術,,高通對DSP非常青睞,而已經失去生命力的VLIW超長指令集非常適合用在深度學習上,,深度學習運算算法非常單一且密集度極高,,并不需要通用場景下的實時控制,。并且其程序運行有嚴格的時間要求,cache這種不可控時間的結構就不適合了,,通常采用固定周期的TCM作為緩存,,這樣內存訪問時間就固定了。有了上述的特征,,靜態(tài)編譯在通用場合下面臨的那些困難就不存在了,,而DSP其更高效的并行運算能力和簡化的硬件結構被完全發(fā)揮出來。
AI100為了考慮多種應用場合,,有FP16和Int8兩種精度陣列,,Int8即8位整數(shù)精度是智能駕駛領域最常見的,F(xiàn)P16則是游戲,、AR/VR領域常用的,。Int8有8192個,F(xiàn)P16有4096,,特斯拉則是9216個Int8陣列,,如果AI100只考慮智能駕駛,在總面積(差不多可等同于成本)不變的情況下算力還可以再提高不少,。
上圖為特斯拉NPU部分流程與裸晶分布,,算力理論峰值只是根據(jù)MAC數(shù)量簡單計算得出,實際存儲器是瓶頸,,存儲器能讓算力大打折扣,,這也是為什么訓練用AI芯片都不惜成本用HBM內存的原因。特斯拉的芯片上,,大部分都給了SRAM,,也是為了解決存儲器瓶頸問題。這里常見到兩個單位,,GiB和GB,,GB是十進制,GiB是二進制,,1GiB=(1024*1024*1024)B=1073741824B,,1GB=(1000*1000*1000)B=1000000000B,1GiB/1GB=1073741824/1000000000=1.073741824,。要求精度不高的話,,可以直接替換,高通AI100有144MB的片上存儲,,特斯拉只有32MiB,,高通顯然可以碾壓特斯拉的,此外外圍的LPDDR4存儲上,,高通也是碾壓特斯拉,,特斯拉帶寬只有63.58 GiB/s,,高通AI100是136GB/s。
最后說算力,,AI處理器對比似乎離不開算力對比,,實際單獨講算力數(shù)據(jù)毫無意義,上圖是高通AI100在五個數(shù)據(jù)集上的表現(xiàn),,我們可以看到性能與效率差別巨大,,AI算力越強,其適用面就越窄,,與深度學習模型的捆綁程度就越高,,換句話說,AI芯片只能在與其匹配的深度學習模型上才能發(fā)揮最大性能,,換一個模型,,可能只能發(fā)揮芯片10%的性能,所有AI芯片目前的算力數(shù)據(jù)都是理論峰值數(shù)據(jù),,實際應用中都無法達到理論峰值,,某些情況下,可能只有峰值算力的10%甚至2%,。100TOPS的算力可能會萎縮到2TOPS,。
在芯片領域,特斯拉只能算是小學生,,只要有意愿,,高通、英特爾,、英偉達,、華為、AMD,、聯(lián)發(fā)科,、三星都能碾壓特斯拉。