本文將分析CNN,還有近期比較火的SwinTransformer以及存內(nèi)計(jì)算對AI芯片發(fā)展趨勢的影響,Transformer的出現(xiàn)讓專用AI芯片變得岌岌可危,命懸一線。 所謂AI芯片算力一般指INT8精度下每秒運(yùn)作次數(shù),INT8位即整數(shù)8比特精度。AI芯片嚴(yán)格地說應(yīng)該叫AI加速器,只是加速深度神經(jīng)網(wǎng)絡(luò)推理階段的加速,主要就是卷積的加速。一般用于視覺目標(biāo)識別分類,輔助駕駛或無人駕駛還有很多種運(yùn)算類型,需要用到多種運(yùn)算資源,標(biāo)量整數(shù)運(yùn)算通常由CPU完成,矢量浮點(diǎn)運(yùn)算通常由GPU完成,標(biāo)量、矢量運(yùn)算算力和AI算力同樣重要,三者是平起平坐的。AI算力遠(yuǎn)不能和燃油車的馬力對標(biāo),兩者相差甚遠(yuǎn)。 AI芯片的關(guān)鍵參數(shù)除了算力,還有芯片利用率或者叫模型利用率。AI芯片的算力只是峰值理論算力,實(shí)際算力與峰值算力之比就是芯片利用率。
圖片來源:互聯(lián)網(wǎng)
上表為英偉達(dá)旗艦人工智能加速器T4的芯片利用率,芯片的利用率很低,大部分情況下93%的算力都是閑置的,這好比一條生產(chǎn)線,93%的工人都無所事事,但工資還是要付的。實(shí)際上芯片利用率超過50%就是非常優(yōu)秀,利用率低于10%是很常見的,極端情況只有1%,也就是說即使你用了4片英偉達(dá)頂級Orin,算力高達(dá)1000TOPS,實(shí)際算力可能只有10TOPS。 這也就是AI芯片主要的工作不是AI芯片本身,而是與之配套的軟件優(yōu)化,當(dāng)然也可以反過來,為自己的算法模型定制一塊AI芯片,如特斯拉。但應(yīng)用面越窄,出貨量就越低,攤在每顆芯片上的成本就越高,這反過來推高芯片價(jià)格,高價(jià)格進(jìn)一步縮窄了市場,因此獨(dú)立的AI芯片必須考慮盡可能適配多種算法模型。 這需要幾方面的工作:
首先主流的神經(jīng)網(wǎng)絡(luò)模型自然要支持;
其次是壓縮模型的規(guī)模并優(yōu)化,將浮點(diǎn)轉(zhuǎn)換為定點(diǎn);
最后是提供編碼器Compiler,將模型映射為二進(jìn)制指令序列。
早期的AI運(yùn)算完全依賴GPU,以致于早期的神經(jīng)網(wǎng)絡(luò)框架如Caffee、TensorFlow、mxnet都必須考慮在GPU上優(yōu)化,簡單地說就是都得適應(yīng)GPU的編碼器CUDA,這也是英偉達(dá)為何如此強(qiáng)的原因,它無需優(yōu)化,因?yàn)樵缙诘纳窠?jīng)網(wǎng)絡(luò)就是為GPU訂做的。CUDA為英偉達(dá)筑起了高高的城墻,你要做AI運(yùn)算,不兼容CUDA是不可能的,所有的程序員都已經(jīng)用習(xí)慣了CUDA。但要兼容CUDA,CUDA的核心是不開源的,無論你如何優(yōu)化,都不如英偉達(dá)的原生CUDA更優(yōu)。車載領(lǐng)域好一點(diǎn),可以效仿特斯拉。 卷積運(yùn)算就是乘積累加,Cn=A×B+Cn-1,A是輸入矩陣,簡單理解就是一副圖像,用像素?cái)?shù)字矩陣來表示一副圖像,B是權(quán)重模型,就是深度學(xué)習(xí)搜集訓(xùn)練數(shù)據(jù),經(jīng)過幾千萬人民幣的數(shù)據(jù)中心訓(xùn)練出的算法模型,也可以看做是一種特殊的濾波器,右邊的C是上一次乘積的結(jié)果。左邊的C就是本次計(jì)算的輸出結(jié)果。卷積運(yùn)算后經(jīng)過全連接層輸出,畫出Bounding Box并識別。用代碼表示如下。
圖片來源:互聯(lián)網(wǎng)
這些計(jì)算中有大量相同的數(shù)據(jù)存取,如下表。
圖片來源:互聯(lián)網(wǎng)
每一次運(yùn)算都需要頻繁讀取內(nèi)存,很多是重復(fù)讀取,這非常耗費(fèi)時(shí)間和功率,顯然是一種浪費(fèi),AI芯片的核心工作就是提高數(shù)據(jù)的復(fù)用率。 AI芯片分為兩大流派,一是分塊矩陣的One Shot流派,也有稱之為GEMM通用矩陣乘法加速器,典型代表是英偉達(dá)、華為。二是如脈動陣列的數(shù)據(jù)流流派,典型代表是谷歌、特斯拉。還有些非主流的主要用于FPGA的Spatial,F(xiàn)FT快速傅里葉變換。
華為AI芯片電路邏輯
圖片來源:互聯(lián)網(wǎng)
以華為為例,其將矩陣A按行存放在輸入緩沖區(qū)中,同時(shí)將矩陣B按列存放在輸入緩沖區(qū)中,通過矩陣計(jì)算單元計(jì)算后得到的結(jié)果矩陣C按行存放在輸出緩沖區(qū)中。在矩陣相乘運(yùn)算中,矩陣C的第一元素由矩陣A的第一行的16個(gè)元素和矩陣B的第一列的16個(gè)元素由矩陣計(jì)算單元子電路進(jìn)行16次乘法和15次加法運(yùn)算得出。矩陣計(jì)算單元中共有256個(gè)矩陣計(jì)算子電路,可以由一條指令并行完成矩陣C的256個(gè)元素計(jì)算。 由于矩陣計(jì)算單元的容量有限,往往不能一次存放下整個(gè)矩陣,所以也需要對矩陣進(jìn)行分塊并采用分步計(jì)算的方式。將矩陣A和矩陣B都等分成同樣大小的塊,每一塊都可以是一個(gè)16×16的子矩陣,排不滿的地方可以通過補(bǔ)零實(shí)現(xiàn)。首先求C1結(jié)果子矩陣,需要分兩步計(jì)算:第一步將A1和B1搬移到矩陣計(jì)算單元中,并算出A1×B1的中間結(jié)果;第二步將A2和B2搬移到矩陣計(jì)算單元中,再次計(jì)算A2×B2 ,并把計(jì)算結(jié)果累加到上一次A1×B1的中間結(jié)果,這樣才完成結(jié)果子矩陣C1的計(jì)算,之后將C1寫入輸出緩沖區(qū)。由于輸出緩沖區(qū)容量也有限,所以需要盡快將C1子矩陣寫入內(nèi)存中,便于留出空間接收下一個(gè)結(jié)果子矩陣C2。 分塊矩陣的好處是只計(jì)算了微內(nèi)核,速度很快,比較靈活,編譯器好設(shè)計(jì),增加算力也很簡單,只要增加MAC的數(shù)量即可。成本低,消耗的SRAM容量小。
圖片來源:互聯(lián)網(wǎng)
上圖為一個(gè)典型的脈動陣列,右側(cè)是一個(gè)乘加單元即PE單元的內(nèi)部結(jié)構(gòu),其內(nèi)部有一個(gè)寄存器,在TPU內(nèi)對應(yīng)存儲Weight,此處存儲矩陣B。左圖是一個(gè)4×4的乘加陣列,假設(shè)矩陣B已經(jīng)被加載到乘加陣列內(nèi)部;顯然,乘加陣列中每一列計(jì)算四個(gè)數(shù)的乘法并將其加在一起,即得到矩陣乘法的一個(gè)輸出結(jié)果。依次輸入矩陣A的四行,可以得到矩陣乘法的結(jié)果。PE單元在特斯拉FSD中就是96*96個(gè)PE單元。
圖片來源:互聯(lián)網(wǎng)
不過最后還要添加累加器,需要多個(gè)SRAM加入。 脈動式優(yōu)點(diǎn)是流水線式,不依賴一次一次的指令,一次指令即可啟動。吞吐量很高。算力做到1000TOPS易如反掌,單PE占硅片面積小。但是其編譯器難度高,靈活度低,要做到高算力,需要大量SRAM,這反過來推高成本。 在實(shí)際應(yīng)用當(dāng)中,情況會比較復(fù)雜,完整的深度學(xué)習(xí)模型都太大,而內(nèi)存是很耗費(fèi)成本的,因此,模型都必須要壓縮和優(yōu)化,常見的壓縮有兩種,一種是Depthwise Convolution,還包括了Depthwise Separable Convolution。另一種是Pointwise Convolution。Depthwise層,只改變feature map的大小,不改變通道數(shù)。而Pointwise層則相反,只改變通道數(shù),不改變大小。這樣將常規(guī)卷積的做法(改變大小和通道數(shù))拆分成兩步走。
圖片來源:互聯(lián)網(wǎng)
常規(guī)卷積,4組(3,3,3)的卷積核進(jìn)行卷積,等于108。
圖片來源:互聯(lián)網(wǎng)
Depthwise卷積,分成了兩步走,第一步是3*3*3,第二步是1*1*3*4,合計(jì)是39,壓縮了很多。 谷歌TPU v1的算力計(jì)算是700MHz*256*256*2=92Top/s@int8,之所以乘2是因?yàn)檫€有個(gè)加法累積。高通AI100的最大算力計(jì)算是16*8192*2*1600MHz=419Top/s@int8,高通是16核,每個(gè)核心是8192個(gè)陣列,最高運(yùn)行頻率1.6GHz,最低估計(jì)是500MHz。
性能最大化對應(yīng)的模型要求
圖片來源:互聯(lián)網(wǎng)
對谷歌TPU v1來說,其最優(yōu)性能是輸入為256,而不少Depthwise是3*3,其利用率為9/256,即3.5%。對高通AI100來說,如果算法模型輸入通道是256,那么效率會降低至16/256,即6.3%。顯然對于精簡算法模型,TPU非常不適合。對于精簡模型來說,高通AI100非常不適合。 以上這些都是針對CNN的,目前圖像領(lǐng)域的AI芯片也都是針對CNN的。近期大火的Swin Transformer則與之不同。2021年由微軟亞洲研究院開源的SwinTransformer的橫掃計(jì)算機(jī)視覺,從圖像分類的ViT,到目標(biāo)檢測的DETR,再到圖像分割的SETR以及3D人體姿態(tài)的METRO,大有壓倒CNN的態(tài)勢。但其原生Self-Attention的計(jì)算復(fù)雜度問題一直沒有得到解決,Self-Attention需要對輸入的所有N個(gè)token計(jì)算N的二次方大小的相互關(guān)系矩陣,考慮到視覺信息本來就是二維(圖像)甚至三維(視頻),分辨率稍微高一點(diǎn)就會暴增運(yùn)算量,目前所有視覺類AI芯片都完全無法勝任。
Swin Transformer的模型結(jié)構(gòu)
圖片來源:互聯(lián)網(wǎng)
從圖上就能看出其采用了4*4卷積矩陣,而CNN是3*3,這就意味著目前的AI芯片有至少33%的效率下降。再者就是其是矢量與矩陣的乘法,這會帶來一定的浮點(diǎn)矢量運(yùn)算。 假設(shè)高和寬都為112,窗口大小為7,C為128,那么未優(yōu)化的浮點(diǎn)計(jì)算是4*112*112*128*128+2*112*112*112*112*128=41GFLOP/s。大部分AI芯片如特斯拉的FSD和谷歌的TPU,未考慮這種浮點(diǎn)運(yùn)算。不過華為和高通都考慮到了,英偉達(dá)就更不用說了,GPU天生就是針對浮點(diǎn)運(yùn)算的??雌饋?1GFLOP/s不高,但如果沒有專用浮點(diǎn)運(yùn)算處理器,效率也會急速下降。
圖片來源:互聯(lián)網(wǎng)
與CNN不同,Swin Transformer的數(shù)據(jù)選擇與布置占了29%的時(shí)間,矩陣乘法占了71%,而CNN中,矩陣乘法至少占95%。
圖片來源:互聯(lián)網(wǎng)
針對Swin Transformer的AI芯片最好將區(qū)塊模型與數(shù)據(jù)流模型分開,指令集與數(shù)據(jù)集當(dāng)然也最好分開。
圖片來源:互聯(lián)網(wǎng)
針對Swin Transformer,理論上最好的選擇是存內(nèi)計(jì)算也叫存算一體,上圖是存內(nèi)計(jì)算架構(gòu)與傳統(tǒng)AI芯片的馮諾依曼架構(gòu)的功耗對比,存內(nèi)計(jì)算架構(gòu)在同樣算力的情況下,只有馮諾依曼架構(gòu)1/6的功耗。
馮諾依曼架構(gòu)與存內(nèi)計(jì)算架構(gòu)對比
圖片來源:互聯(lián)網(wǎng)
典型的存內(nèi)計(jì)算架構(gòu)芯片
圖片來源:互聯(lián)網(wǎng)
不過目前存內(nèi)計(jì)算離實(shí)用距離還非常遙遠(yuǎn):
第一,內(nèi)存行業(yè)由三星、美光和SK Hynix三家占了90%的市場,行業(yè)門檻極高,這三家極力保持內(nèi)存價(jià)格穩(wěn)定。
第二,目前AI模型都是越來越大,用存內(nèi)計(jì)算存儲大容量AI模型成本極高。三星的存內(nèi)計(jì)算芯片測試用的是二十年前的MNIST手寫字符識別,這種AI模型是kb級別的。而自動駕駛用的至少也是10MB以上。
第三,精度很低,當(dāng)前存內(nèi)計(jì)算研究的一個(gè)重點(diǎn)方法是使用電阻式RAM(ReRAM)實(shí)現(xiàn)位線電流檢測。由于電壓范圍,噪聲和PVT的變化,模擬位線電流檢測和ADC的精度受到限制,即使精度低到1比特也難以實(shí)現(xiàn),而輔助駕駛目前是8比特。
第四,電阻式RAM可靠性不高。經(jīng)常更新權(quán)重模型,可能導(dǎo)致故障。
最后,存內(nèi)計(jì)算的工具鏈基本為零。最樂觀的估計(jì),存內(nèi)計(jì)算實(shí)用化也要5年以上,且是用在很小規(guī)模計(jì)算,如AIoT領(lǐng)域,自動駕駛領(lǐng)域十年內(nèi)都不可能見到存內(nèi)計(jì)算。即使存內(nèi)計(jì)算實(shí)用化,恐怕也是內(nèi)存三巨頭最有優(yōu)勢。
Transformer的出現(xiàn)讓專用AI芯片變得非常危險(xiǎn),難保未來不出現(xiàn)別的技術(shù),而適用面很窄的AI專用芯片會完全喪失市場,通用性比較強(qiáng)的CPU或GPU還是永葆青春,至于算力,與算法模型高度捆綁,但捆綁太緊,市場肯定很小,且生命周期可能很短。 聲明:本文僅代表作者個(gè)人觀點(diǎn)。
審核編輯 :李倩
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4726瀏覽量
100313 -
AI芯片
+關(guān)注
關(guān)注
17文章
1844瀏覽量
34792 -
算力
+關(guān)注
關(guān)注
1文章
871瀏覽量
14651
原文標(biāo)題:Transformer挑戰(zhàn)CNN,AI芯片需要改變
文章出處:【微信號:zuosiqiche,微信公眾號:佐思汽車研究】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論