系統(tǒng)設(shè)計(jì)的藝術(shù):當(dāng)HPC與AI應(yīng)用成為主流,GPU架構(gòu)該向何處去?
我們多年前就曾經(jīng)提到,配合充足的數(shù)據(jù)并使用卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行AI工作負(fù)載訓(xùn)練正逐漸成為主流,而全球各主要HPC(高性能計(jì)算)中心多年來(lái)一直把這方面負(fù)載交給英偉達(dá)的GPU處理。對(duì)于模擬和建模等任務(wù),GPU的性能表現(xiàn)可謂相當(dāng)突出。從本質(zhì)上講,HPC模擬/建模與AI訓(xùn)練其實(shí)是一種諧波收斂,而GPU作為大規(guī)模并行處理器特別擅長(zhǎng)執(zhí)行這類工作。
但自2012年起,AI革命正式爆發(fā),圖像識(shí)別軟件第一次將準(zhǔn)確度提升至超越人類的水平。所以我們非常好奇,HPC和AI這種在同類GPU上高效處理的共性還能持續(xù)多久。于是在2019年夏季,通過(guò)對(duì)模型的細(xì)化迭代,我們嘗試用混合精度數(shù)學(xué)單元在Linpack基準(zhǔn)測(cè)試中得出與FP64計(jì)算相同的結(jié)果。而在英偉達(dá)于次年推出“Ampere”GA100 GPU之前,我們?cè)俅芜M(jìn)行一番HPC與AI的處理性能?chē)L試。當(dāng)時(shí)英偉達(dá)還沒(méi)有推出“Ampere”A100 GPU,所以顯卡巨頭尚未正式朝著在混合精度張量核心上訓(xùn)練AI模型的方向傾斜?,F(xiàn)在的答案當(dāng)然已經(jīng)明了,F(xiàn)P64矢量單元上的HPC工作負(fù)載需要做點(diǎn)架構(gòu)調(diào)整才能發(fā)揮GPU性能,毫無(wú)疑問(wèn)有點(diǎn)“二等公民”的意思了。但在當(dāng)時(shí),一切還皆有可能。
隨著英偉達(dá)在今年早些時(shí)候推出“Hopper”GH100 GPU,AI與HPC的代際性能改進(jìn)幅度出現(xiàn)了更大的差距。不僅如此,在最近的秋季GTC 2022大會(huì)上,英偉達(dá)公司聯(lián)合創(chuàng)始人兼CET黃仁勛表示,AI工作負(fù)載自身也出現(xiàn)了分歧,也迫使英偉達(dá)開(kāi)始探索CPU業(yè)務(wù)——或者更準(zhǔn)確地說(shuō),應(yīng)該叫面向GPU的優(yōu)化擴(kuò)展內(nèi)存控制器。
稍后我們會(huì)具體討論這個(gè)問(wèn)題。
花開(kāi)兩朵,各表一枝
讓我們先從最明確的判斷說(shuō)起。如果英偉達(dá)想讓自己的GPU擁有更強(qiáng)的FP64性能,用以支持天氣建模、流體動(dòng)力學(xué)計(jì)算、有限元分析、量子色動(dòng)力學(xué)及其他高強(qiáng)度數(shù)學(xué)模擬等64位浮點(diǎn)HPC應(yīng)用,那加速器的設(shè)計(jì)思路應(yīng)該是這樣的:制造一款不設(shè)任何張量核心、也不設(shè)FP32 CUDA核心(在CUDA架構(gòu)中主要作為圖形著色器)的產(chǎn)品。
但這樣的產(chǎn)品恐怕只有幾百家客戶愿意采購(gòu),所以單芯片價(jià)格可能在數(shù)萬(wàn)甚至數(shù)十萬(wàn)美元,只有這樣才能覆蓋掉設(shè)計(jì)和制造成本。為了建立起規(guī)模更大、而且更具利潤(rùn)空間的業(yè)務(wù),英偉達(dá)必須設(shè)計(jì)出更加通用的架構(gòu),其矢量數(shù)學(xué)運(yùn)算能力只要比CPU強(qiáng)就夠了。
所以自從英偉達(dá)15年前決定認(rèn)真為HPC應(yīng)用設(shè)計(jì)產(chǎn)品開(kāi)始,他們就一直專注于使用FP32浮點(diǎn)數(shù)學(xué)運(yùn)算的HPC場(chǎng)景——包括地震處理、信號(hào)處理和基因組學(xué)類負(fù)載中使用的單精度數(shù)據(jù)和處理任務(wù),并逐步提升GPU的FP64功能。
2012年7月推出的K10加速器搭載兩個(gè)“Kepler”GK104 GPU,與游戲顯卡中使用的GPU完全相同。其中設(shè)有1536個(gè)FP32 CUDA核心,沒(méi)采用任何專用FP64核心。它的FP64支持純由軟件完成,因此無(wú)法實(shí)現(xiàn)可觀的性能提升:雙GK104 GPU在處理FP32任務(wù)時(shí)性能為4.58 teraflops,而在處理FP64時(shí)為190 gigaflops,比率為24比1。而在2012年底的SC12超級(jí)計(jì)算大會(huì)上發(fā)布的K20X則采用GK110 GPU,F(xiàn)P32性能為3.95 teraflops,F(xiàn)P64性能為1.31 teraflops,比率提升至3比1。到這個(gè)時(shí)候,該產(chǎn)品對(duì)HPC應(yīng)用程序以及在學(xué)術(shù)/超大規(guī)模計(jì)算領(lǐng)域訓(xùn)練AI模型的用戶來(lái)說(shuō),已經(jīng)初步具備了可用性。K80 GPU加速卡采用兩個(gè)GK110B GPU,這是因?yàn)橛ミ_(dá)并沒(méi)有為當(dāng)時(shí)最高端的“Maxwell”GPU添加FP64支持,因此GK110 B就成了當(dāng)時(shí)廣受歡迎、最具性價(jià)比的選項(xiàng)。K80的FP32性能為8.74 teraflops,F(xiàn)P64性能則為2.91 teraflops,比率仍然保持為3比1。
到“Pascal”GP100 GPU,HPC與AI的差距隨FP16混合精度指標(biāo)的引入而進(jìn)一步拉開(kāi),不過(guò)矢量FP32與矢量FP64的比例進(jìn)一步轉(zhuǎn)化為2比1,而且在“Volta”GV100之后的“Ampere”GA100和“Hopper”GH100等更新GPU中得到了保持。在Volta架構(gòu)中,英偉達(dá)首次引入了具有固定矩陣?yán)谛〉膹埩亢诵模═ensor Core)矩陣數(shù)學(xué)單元,顯著提升了浮點(diǎn)(及整數(shù))運(yùn)算能力,并繼續(xù)在架構(gòu)中保留矢量單元。
這些張量核心被用于處理越來(lái)越大的矩陣,而具體運(yùn)算精度卻越來(lái)越低,于是這類設(shè)備獲得了極為夸張的AI負(fù)載吞吐量。這當(dāng)然離不開(kāi)機(jī)器學(xué)習(xí)自身的模糊統(tǒng)計(jì)性質(zhì),同時(shí)也跟多數(shù)HPC算法要求的高精度數(shù)學(xué)拉開(kāi)了巨大差距。下圖所示為AI和HPC性能差距的對(duì)數(shù)表示,相信大家已經(jīng)能夠看到二者間的趨勢(shì)性差異:
對(duì)數(shù)形式看著不夠震撼,咱們用實(shí)際比例再看一遍:
系統(tǒng)設(shè)計(jì)的藝術(shù):當(dāng)HPC與AI應(yīng)用成為主流,GPU架構(gòu)該向何處去?
并不是所有HPC應(yīng)用都能針對(duì)張量核心進(jìn)行調(diào)整,也不是一切應(yīng)用程序都能把數(shù)學(xué)運(yùn)算移交給張量核心,所以英偉達(dá)的GPU架構(gòu)中仍然保留著一些矢量單元。另外,很多HPC組織其實(shí)拿不出像HPL-AI那樣的迭代求解器。Linpack基準(zhǔn)測(cè)試中使用的就是HPL-AI求解器,它采用常規(guī)HPL Linpack并配合FP16加FP32運(yùn)算,再輔以一點(diǎn)點(diǎn)FP64運(yùn)算來(lái)收斂至與純FP64蠻力計(jì)算相同的答案。這種迭代求解器能夠在橡樹(shù)嶺國(guó)家實(shí)驗(yàn)室的“Frontier”超級(jí)計(jì)算機(jī)上提供6.2倍的有效加速,并在RIKEN實(shí)驗(yàn)室的“富岳”超級(jí)計(jì)算機(jī)上實(shí)現(xiàn)4.5倍的有效加速。如果能有更多HPC應(yīng)用程序迎來(lái)屬于自己的HPL-AI類求解器,那AI跟HPC“分家”的難題也就有解了,相信這一天終會(huì)到來(lái)。
但與此同時(shí),對(duì)于很多工作負(fù)載,F(xiàn)P64性能仍然是唯一的決定性因素。而憑借強(qiáng)大AI算力賺得盆滿缽滿的英偉達(dá),短時(shí)間內(nèi)肯定沒(méi)太多閑心照顧HPC這塊市場(chǎng)。
花再開(kāi)兩朵,再各表一枝
可以看到,英偉達(dá)的GPU架構(gòu)主要追求更高的AI性能,同時(shí)保持可接受的HPC性能,雙管齊下引導(dǎo)客戶每三年更新一次硬件。從純FP64性能的角度來(lái)看,在2012年至2022年這十年間,英偉達(dá)GPU的FP64吞吐量增長(zhǎng)了22.9倍,從K20X的1.3 teraflops到H100的30 teraflops。如果能配合迭代求解器用上張量核心矩陣單元,那增幅則可達(dá)到45.8倍。但如果是只需要低精度大規(guī)模并行計(jì)算的AI訓(xùn)練用戶,那從FP32到FP8的性能轉(zhuǎn)變就夸張了,已經(jīng)由最早的3.95 teraflops FP32算力提升至FP8稀疏矩陣的4 petaflops,也就是提高了1012.7倍。而如果是在當(dāng)時(shí)的K20X GPU上用FP64編碼的AI算法來(lái)比較(當(dāng)時(shí)的主流作法),那這十年間的性能提升只有可憐的2倍。
很明顯,二者的性能差異已經(jīng)不能用巨大來(lái)形容了。黃仁勛自己也提到,目前的AI陣營(yíng)本身再次一分為二。一類是基于transformer模型支持的巨型基礎(chǔ)模型,也被稱為大語(yǔ)言模型。這類模型的參數(shù)數(shù)量迅猛增長(zhǎng),對(duì)硬件的需求也不斷提升。與之前的神經(jīng)網(wǎng)絡(luò)模型相比,如今的transformer模型完全代表著另一個(gè)時(shí)代,如下圖所示:
請(qǐng)?jiān)忂@張圖有點(diǎn)模糊,但重點(diǎn)在于:對(duì)于第一組不包含transformers的AI模型,計(jì)算需求在兩年之內(nèi)增長(zhǎng)了8倍;但對(duì)于包含transformers的AI模型,其計(jì)算需求在兩年內(nèi)增長(zhǎng)了275倍。如果用浮點(diǎn)運(yùn)算來(lái)處理,那系統(tǒng)中得有10萬(wàn)個(gè)GPU才能滿足需求(這還不是太大的問(wèn)題)。但轉(zhuǎn)向FP4精度會(huì)把計(jì)算量翻倍,未來(lái)GPU采用1.8納米晶體管時(shí)算力又能增加2.5倍左右,所以還是余下了55倍左右的差距。要是能實(shí)現(xiàn)FP2運(yùn)算的話(假設(shè)這樣的精度足夠解決問(wèn)題)倒是可以把計(jì)算量減半,但那也至少得使用25萬(wàn)個(gè)GPU。而且,大語(yǔ)言transformer模型往往很難擴(kuò)展,特別是不具備經(jīng)濟(jì)意義上的可行性。所以這類模型就成了巨頭級(jí)企業(yè)的專屬,就如同核武器只會(huì)被掌握在強(qiáng)國(guó)手中一樣。
至于作為“數(shù)字經(jīng)濟(jì)引擎”的推薦系統(tǒng),它需要的不只是成倍增加的計(jì)算量,還需要遠(yuǎn)超大語(yǔ)言模型、甚至是GPU所能提供內(nèi)存容量的數(shù)據(jù)規(guī)模。黃仁勛在之前的GTC主題演講中就曾提到:
“與大語(yǔ)言模型相比,各個(gè)計(jì)算單元在處理推薦系統(tǒng)時(shí)面對(duì)的數(shù)據(jù)量要大出一個(gè)量級(jí)。很明顯,推薦系統(tǒng)不僅要求內(nèi)存速度更快,而且需要10倍于大語(yǔ)言模型的內(nèi)存容量。雖然大語(yǔ)言模型隨時(shí)間推移而保持著指數(shù)增長(zhǎng)、對(duì)算力的需求一刻不停,但推薦系統(tǒng)也同樣保持著這樣的增長(zhǎng)速度,而且不斷吞噬更多內(nèi)存容量。大語(yǔ)言模型和推薦系統(tǒng)可以說(shuō)是當(dāng)下最重要的兩類AI模型,而且有著不同的計(jì)算要求。推薦系統(tǒng)可以擴(kuò)展至數(shù)十億用戶與數(shù)十億個(gè)條目,每篇文章、每段視頻、每個(gè)社交帖都有對(duì)應(yīng)的數(shù)字表示,被稱為嵌入。每個(gè)嵌入表可能包含數(shù)十TB的數(shù)據(jù),需要由多個(gè)GPU協(xié)同處理。在處理推薦系統(tǒng)時(shí),既要求網(wǎng)絡(luò)中的某些部分實(shí)現(xiàn)數(shù)據(jù)并行處理,又要求網(wǎng)絡(luò)中的其他部分實(shí)現(xiàn)模型并行處理,這就對(duì)計(jì)算機(jī)中的各個(gè)部分提出了更高要求。”
下圖所示,為推薦系統(tǒng)的基本架構(gòu):
為了解決定特殊的內(nèi)存容量與帶寬問(wèn)題,英偉達(dá)開(kāi)發(fā)出了“Grace”Arm服務(wù)器CPU,并將其與Hopper GPU緊密耦合。我們也開(kāi)玩笑說(shuō),如果需要的主內(nèi)存量十分巨大,那Grace實(shí)際上只是Hopper的內(nèi)存控制器。但從長(zhǎng)遠(yuǎn)來(lái)看,也許把一堆運(yùn)行有NVLink協(xié)議的CXL端口掛入Hooper的下一代GPU就行。
所以英偉達(dá)拿出的Grace-Hopper超級(jí)芯片,就相當(dāng)于把一個(gè)“兒童”級(jí)CPU集群放進(jìn)了巨大的“成人”級(jí)GPU加速集群。這些Arm CPU倒是可以支持傳統(tǒng)的C++和Fortran工作負(fù)載,但代價(jià)是:混合集群當(dāng)中CPU部分的性能,只相當(dāng)于集群中GPU性能的十分之一,而成本卻是常規(guī)純CPU集群的3到5倍。
順帶一提,我們對(duì)于英偉達(dá)所做的任何工程選擇都尊重且理解。Grace是一款出色的CPU,Hopper也是一款出色的GPU,二者相結(jié)合肯定會(huì)有不錯(cuò)的效果。但現(xiàn)在的情況是,我們?cè)谕黄脚_(tái)上面對(duì)著三種截然不同的工作負(fù)載,它們各自把架構(gòu)拉向不同的方向。高性能計(jì)算、大語(yǔ)言模型和推薦系統(tǒng),這三位老哥各有特點(diǎn),根本沒(méi)法以符合經(jīng)濟(jì)效益的方式同時(shí)進(jìn)行架構(gòu)優(yōu)化。
而且很明顯,AI這邊的優(yōu)勢(shì)很大、HPC則逐漸勢(shì)微,這種狀況已經(jīng)持續(xù)了近十年。如果HPC想要完成自我改造,那么其代碼就得朝著推薦系統(tǒng)和大語(yǔ)言模型靠攏,而不能繼續(xù)堅(jiān)持在FP64上運(yùn)行現(xiàn)有C++和Fortran代碼。而且很明顯,跟AI客戶相比,HPC客戶的每一次運(yùn)算都有溢價(jià)。所以除非HPC專家們摸清了迭代求解器的普適性開(kāi)發(fā)方式,能夠以較低的精度對(duì)物理世界進(jìn)行建模,否則這種被動(dòng)局面將很難得到扭轉(zhuǎn)。
幾十年來(lái),我們一直覺(jué)得大自然本身其實(shí)是不符合數(shù)學(xué)規(guī)律的。我們是在被迫用高精度數(shù)學(xué)來(lái)描述大自然的效應(yīng),或者說(shuō)在用并不適合的語(yǔ)言描述客觀現(xiàn)實(shí)。當(dāng)然,大自然也許比我們想象中的更精妙,而迭代求解器反而更接近我們所要建模的現(xiàn)實(shí)。如果真是如此,那也許是人類的一種幸運(yùn),甚至要比十年前HPC和AI的偶然重合更幸運(yùn)。
畢竟世上本沒(méi)有路,走的人多了,也便成了路。