通用or專用,智能算力芯片架構(gòu)該如何設(shè)計?
常用芯片中最通用的就屬CPU。以英特爾、AMD為代表,幾乎可以做任何事情,但是無法做到極致的性能和功耗。能做到極致能效比的是專用芯片,既所謂的ASIC。但是它的編程性差,應(yīng)用的范圍就比較窄。
而在這兩個極端之間還有很多選擇,比如GPU,這些年越來越成為行業(yè)的熱點。GPU是一個相對比較通用的處理器,現(xiàn)在稱之為GPGPU,具有良好的編程性,特別適合大規(guī)模數(shù)據(jù)并行類應(yīng)用。還有一類在硬件靈活度上更大的就是FPGA(現(xiàn)場可編程門陣列),這類器件可以通過硬件描述語言來改變邏輯結(jié)構(gòu),性能和功耗會更好,只是編程的難度較大。
通過分析過去五年具有代表性的芯片公司的股價走勢,就可以對行業(yè)的發(fā)展趨勢窺見一斑:英特爾近五年股價上漲了50%;Xilinx(全球領(lǐng)先的FPGA公司)股價大概上漲了2.6倍;而英偉達(當(dāng)紅的GPGPU壟斷企業(yè))過去五年股價上漲了16倍。我們即便不去追究深層次的原因,僅憑股價的成長也可以判斷行業(yè)已經(jīng)作出了選擇,GPGPU已經(jīng)成為未來計算的主角和核心。
同時,以史為鑒,從GPU的發(fā)展歷史看,它是如何一步一步成長為行業(yè)王者的?
GPU早在上世紀八十年代就已經(jīng)出現(xiàn)了,那時對于游戲的需求催生了特殊的專用于圖形渲染的硬件,這就是早期的GPU。在1990年-2000年這段時間,涌現(xiàn)了很多GPU廠商,每家公司規(guī)模并不大,有很多代表性的專用芯片產(chǎn)品。但是到了2005年左右,大家意識到在圖形學(xué)這個領(lǐng)域算法變化很快,可能每隔幾個月甚至每隔幾周就會發(fā)生翻天覆地的變化。但芯片需要18個月才能完成一次更迭,如果把硬件完全固定下來就無法跟上行業(yè)發(fā)展的節(jié)奏。
所以,人們開始探索把原來不可變的執(zhí)行流水線,設(shè)計成可以部分編程的架構(gòu),這種架構(gòu)更加靈活,可以更加高效的適應(yīng)算法的變化。真正的GPGPU行業(yè)大發(fā)展始于2006年出現(xiàn)的CUDA(Compute Unified Device Architecture,統(tǒng)一計算設(shè)備架構(gòu)),它是一種精心設(shè)計的、可對GPGPU直接編程的接口和語言。從此以后,對于大量的數(shù)據(jù)并行應(yīng)用就可以方便地使用CUDA編程,從而釋放出GPGPU中可觀的算力。
所以回看過去幾十年GPU的發(fā)展之路,是一條從“專用”過渡到“比較通用”,直到現(xiàn)在“非常通用”的發(fā)展路徑。如果我們用來類比今天的人工智能,是否也有相同的趨勢?AI需要極致的算力和能效比,做成專用芯片可能是合適的。但AI算法的變化又非???,可能以“天”計,這又要求我們不能做成非常固定的硬件,可能最后也會收斂到一個偏通用的架構(gòu)。這是我們的一個推論。
GPGPU的發(fā)展離不開“摩爾定律”
摩爾定律已經(jīng)被“社死”了很多年,在很多年前就有人說摩爾定律要終結(jié)了,但這些年摩爾定律非但沒有終結(jié),而且還活得很好。
如今5納米工藝可以量產(chǎn),3納米也沒問題,1納米也能夠預(yù)見,摩爾定律仍然會持續(xù)下去,而且會持續(xù)相當(dāng)長的時間。但確實,計算機不會變得更快。因為頻率不會變得更高,所以CPU的性能總體趨于穩(wěn)定。但計算機能夠集成的計算資源和存儲資源還是會不斷翻倍,因為摩爾定律使得硬件集成度每隔18個月提升一倍。
摩爾定律和GPGPU可謂“佳偶天成”,數(shù)據(jù)并行是一種可擴展性最強的并行方式,只要有海量的數(shù)據(jù)并行性,同時芯片又能夠按照摩爾定律不斷堆砌硬件資源,GPGPU的性能就會不斷提升。歷史已經(jīng)證明GPGPU的勝出歸根結(jié)底是摩爾定律的功勞。
既然針對某個特定應(yīng)用做到極致能效比的方式是專用芯片,那么專用芯片是否會比GPGPU更加有優(yōu)勢呢?
實際上GPGPU的架構(gòu)也不是一成不變的,也會加入專用的單元用于處理專業(yè)的任務(wù),從而使得GPGPU的發(fā)展與時俱進,它可以是專用和通用的結(jié)合體。比如Volta這一代的GPGPU,在流處理器里就把計算資源分成幾塊,既有計算整型數(shù)的單元也有強大的浮點數(shù)單元。
為了適應(yīng)人工智能的發(fā)展,還特意加入了新的單元,叫Tensor Core,其實就是為AI量身定做的專用計算單元。所以,GPGPU的架構(gòu)也在不斷更新、不斷地去適應(yīng)新型應(yīng)用所需要的底層算力。
如果說傳統(tǒng)GPGPU的算力并行度是以一個數(shù)據(jù)點為基本的粒度,在這個規(guī)模上并行,那么到了Tensor Core就變成了以小矩陣塊為基本粒度并行了,它在每一個周期都可以完成一個4×4矩陣相乘的結(jié)果,所以并行度和算力都高于傳統(tǒng)GPGPU的設(shè)計。
這個概念還可以推而廣之,比如說華為的昇騰AI處理器中的核心單元3D Cube,實際上就是一個矩陣計算的陣列塊,而它的規(guī)模比Tensor Core還要大,是以16×16為單位來做矩陣計算的,因此它的粒度更大,并行度更高,并且做同樣的矩陣計算平均下來功耗更低。但是基本單元塊粒度過大的話,相對于程序來說控制就復(fù)雜,通用性和適用性就下降。所以各個公司都是盡量在功耗、性能以及并行的粒度和可編程性之間找到一個平衡點。
為了適應(yīng)人工智能的發(fā)展,現(xiàn)代GPGPU還做了很多革新。比如引入了多樣化的數(shù)制。人工智能的應(yīng)用對計算精度的要求可以放寬,沒有必要一定按照標(biāo)準(zhǔn)的浮點數(shù)規(guī)則去運算。英偉達最新的Ampere架構(gòu)中就引入了新的數(shù)制TF32。之所以起名叫TF32,意思是用這個標(biāo)準(zhǔn)來做,最后訓(xùn)練出來的網(wǎng)絡(luò)精度不會下降,但TF32只有19位,它的計算方式和標(biāo)準(zhǔn)的浮點數(shù)不同,也正因為把位寬減少了,所以性能可以顯著提升。
此外,Ampere架構(gòu)還采用結(jié)構(gòu)化的稀疏。我們在神經(jīng)網(wǎng)絡(luò)中發(fā)現(xiàn),很多節(jié)點的權(quán)重都接近于0,而和0計算是白白浪費算力,所以在Ampere架構(gòu)中也考慮了結(jié)構(gòu)化的稀疏,每進行四次計算就可以規(guī)定有兩個是結(jié)構(gòu)化的0,實踐發(fā)現(xiàn)如果可以把網(wǎng)絡(luò)訓(xùn)練成這樣,那么在Ampere架構(gòu)下運算起來就會得到兩倍的性能提升。
所以說,GPGPU里面也會發(fā)生各種各樣的優(yōu)化,也在與時俱進。人工智能需要新型的計算芯片支持,大致可分為云端和終端。
在云端要適應(yīng)各種需求變化和應(yīng)用,并且既要能做訓(xùn)練也要能做推理,所以看起來就是GPGPU的天下。英偉達這樣的公司也在不斷的進化,不斷的推陳出新來保證產(chǎn)品的競爭力。
而在終端的需求相對比較單一,應(yīng)用固定一些,所以理論上設(shè)計專用硬件來追求極致的能效比是合理的。但終端的問題是加速器永遠只是一小部分,需要其他各種IP的配合協(xié)作才能組成一個完整的產(chǎn)品。比如說手機里面有豐富的功能,不是說只要人工智能做的好,手機就能賣得好。所以掌握傳統(tǒng)渠道和市場的終端芯片廠商,也會推出自己的解決方案,很有可能會后發(fā)制人。
市場需要的不是“好”的芯片,而是“好用”的芯片
我們要感謝這個時代帶給行業(yè)極大的發(fā)展機遇,甚至吸引了互聯(lián)網(wǎng)巨頭和海量的資本加入到這個戰(zhàn)場。
此前,中國的互聯(lián)網(wǎng)企業(yè)重視用戶體驗和商業(yè)模式,較少參與底層的硬件和芯片開發(fā),但現(xiàn)在情況完全不同了。世界面臨產(chǎn)業(yè)的大變革、大重組、大轉(zhuǎn)移。而芯片產(chǎn)業(yè)的發(fā)展本質(zhì)靠的是資本推動,當(dāng)硬科技成為行業(yè)風(fēng)口,就會產(chǎn)生大量的機會和變化。
這是一個非常好的時代,芯片產(chǎn)業(yè)總是由先進工藝推動的,我們可以樂觀的預(yù)期未來推動先進工藝的未必是美國的英特爾或英偉達,或許可能是中國的某家高科技公司呢?但另一方面,我們也必須看到英偉達研發(fā)一款新品的投入是以十億美金計,如果一個芯片公司的銷售達不到這個規(guī)模,肯定是無法持續(xù)的。
當(dāng)前海量的資本都瘋狂的涌入這個賽道,而芯片是一個需要打持久戰(zhàn)的行業(yè),一旦收入無法跟上,或無法成長為某個賽道的頭部,結(jié)局就可能很悲慘,即便是“飛起來的豬”也可能很快掉下來。
我們必須理解市場需要的不是“好”的芯片,而是“好用”的芯片。所謂好的芯片就是絕對算力高、硬件指標(biāo)高,這個相對容易做到。但是做到好用就很困難,做出來的芯片沒辦法把潛力發(fā)揮出來,這是目前AI芯片公司的通病。
還是以史為鑒,英偉達其實也是一步一步從不好用做到好用,走過了一個漫長的階段。早期的GPU是很不好用的,沒有什么人會用GPU編程,只有那些所謂的“極客”會考慮使用GPU,拼命把其中的算力榨取出來??梢哉f早期的GPU比現(xiàn)在的AI芯片更不好用。
這時候就需要有一批行業(yè)領(lǐng)袖和技術(shù)大咖挺身而出,代表性的人物包括UIUC的胡文美教授(Wen-mei Hwu),他們發(fā)明了CUDA,從此有了可以直接對GPU進行編程的語言,使得GPU的潛力得以充分發(fā)揮,從而真正走上了騰飛之路。又經(jīng)過十年左右的發(fā)展,形成了一個非常強大的生態(tài),可以支持各種各樣的應(yīng)用,豐富了高級語言的屬性,能夠支持更為復(fù)雜的模型和算法,并且逐步在很多行業(yè)形成壟斷。所以說GPGPU的發(fā)展不是一蹴而就的,是經(jīng)過十多年的不懈奮斗才走到了今天。
發(fā)展國產(chǎn)自主GPGPU的三種可能性
當(dāng)我們回過頭來探索國產(chǎn)自主GPGPU的發(fā)展之路,首先就是要沉得住氣,耐得下心,切不可急功近利、操之過急。事物的發(fā)展要遵循客觀規(guī)律,資本永遠是雙刃劍,既可載舟亦可覆舟。
一款芯片的絕對算力有多高,集成了多少個晶體管并不重要,關(guān)鍵是把芯片的潛力充分釋放給用戶,這需要一個良好的生態(tài)和完整的軟件棧,才能讓用戶樂于接受,不用改變太多的習(xí)慣就可以迅速移植現(xiàn)有的工作。講起來容易,實際做起來很難,需要長期的努力,因為這世界上并不存在一個通用的辦法或者一個通用架構(gòu)就可以解決這個問題。
現(xiàn)在流行說“兼容CUDA”,但要真正兼容出效率很難。即便英偉達做GPGPU這么多年,其實也是由無數(shù)個專用的優(yōu)化累積起來才能夠看上去如此的通用,這其中凝聚著大量工程師多年的心血。我們從頭做起也需要花費同樣的代價,沒有捷徑可走,大家一定要意識到這個問題的復(fù)雜性和長期性。
在此,我們嘗試探討發(fā)展國產(chǎn)自主GPGPU的三種可能性:
第一條道路叫“農(nóng)村包圍城市”。策略是從專用芯片做起,把某一個小的領(lǐng)域做精做強,占據(jù)一個山頭,然后再占第二個、第三個,形成一個個的革命根據(jù)地,逐漸實現(xiàn)農(nóng)村包圍城市。但也要防止各家企業(yè)在小的山頭上惡性競爭乃至自相殘殺,從而忘記了我們真正的歷史使命和遠大目標(biāo)。經(jīng)常發(fā)生的誤區(qū)是:當(dāng)一個企業(yè)爬上一座山頂?shù)臅r候,只顧著欣賞眼前的風(fēng)景而忘記了去征服更高的高山。
第二條道路來自“龜兔賽跑”的啟發(fā)。在歷史上小企業(yè)挑落行業(yè)巨頭的案例也是屢有發(fā)生的,比如說,英特爾的指令集在桌面電腦上一家獨大,但后來ARM能夠成功挑戰(zhàn)英特爾,就是抓住了移動互聯(lián)網(wǎng)帶來的歷史機遇。英特爾在這個時候打盹了,并沒有意識到行業(yè)發(fā)生的深刻變革(再加上幕后推手蘋果公司的推波助瀾)。當(dāng)下人工智能時代帶來的變革可能還要超越移動互聯(lián)網(wǎng),但令人吃驚的是在這個大變革的時代,實際上是兔子跑得比烏龜快?!巴米印本褪怯ミ_,英偉達沒有停下前進的步伐,沒有犯當(dāng)年英特爾的錯誤,至今還保持著當(dāng)年初創(chuàng)企業(yè)的活力,很多行業(yè)突破性的技術(shù)是最先出現(xiàn)在英偉達的產(chǎn)品上。
兔子跑得快已經(jīng)很棘手,而糟糕的是,我們作為后發(fā)者,國內(nèi)的芯片人才本來就極為緊缺,但由于資本的驅(qū)動,短期內(nèi)催生出很多芯片公司,據(jù)說今年新成立的芯片公司是去年的3倍,而培養(yǎng)的人才不可能一下子成長這么多。都說要集中優(yōu)勢兵力才能殲滅強敵,但現(xiàn)狀是,我們把為數(shù)不多的兵力分散到多個戰(zhàn)場,從而陷入越打越弱的怪圈。以史為鑒,只有當(dāng)對手疏忽的時候,抓住戰(zhàn)機畢其功于一役才有大的勝算,這往往需要有極大的戰(zhàn)略定力,甚至還需要有些運氣。在芯片行業(yè),千萬要防止一哄而上之后的一哄而散!
第三條道路也是目前我們認為最有機會的道路,就是開源。靠的是眾人拾柴和愚公移山,要的是細水長流,拼的是“天荒地老”。通過開源戰(zhàn)勝強大的對手,在軟件生態(tài)方面已經(jīng)戰(zhàn)果累累,在硬件上也已經(jīng)開始顯示威力。我們有理由相信,開源硬件即便不能一統(tǒng)江湖,至少也可以分庭抗禮。
我們認為,現(xiàn)階段國內(nèi)完全有機會做一個開源開放的、免費公益的GPGPU項目,目的是打造一個全棧式的平臺,提供開源硬件,編譯器、算子庫等,并且在指令集的設(shè)計上盡可能接近或者兼容CUDA生態(tài)圈。我們的研究團隊最近攥寫了一本關(guān)于GPGPU體系結(jié)構(gòu)的專用教材,書名是《通用圖形處理器設(shè)計-GPGPU編程模型和架構(gòu)原理》,預(yù)計明年初正式出版發(fā)行。同時希望號召國內(nèi)最大的程序員社區(qū),大家攜起手來,摒棄門戶之見,都來支持國產(chǎn)自主GPGPU,盡快把這個生態(tài)做大做強。
通過這些方式,經(jīng)過十年以上的努力,我們堅信在這一塊的劣勢會逐步得到彌補,逐漸縮小和國外巨頭之間的差距。