英偉達(dá)CUDA壟斷地位難保:PyTorch不斷拆塔,OpenAI已在偷家

有網(wǎng)友看后評(píng)價(jià):
英偉達(dá)淪落到此種境地,只因?yàn)榱搜矍袄妫艞墑?chuàng)新。

Pytorch的作者之一Sasank Chilamkurthy還補(bǔ)刀:
當(dāng)英偉達(dá)之前提出要收購(gòu)Arm時(shí),我就對(duì)潛在的壟斷感到非常不安。所以我開(kāi)始做任何正常人都會(huì)做的事:讓CUDA從的領(lǐng)先AI框架中被除名。

下面展開(kāi)談一談Patel提到的這些背后原因。
PyTorch成AI開(kāi)發(fā)框架贏家,將支持更多GPU
這里先來(lái)簡(jiǎn)單說(shuō)說(shuō)CUDA昔日的輝煌故事。
CUDA是英偉達(dá)推出的并行計(jì)算框架。
CUDA之于英偉達(dá),可謂歷史的轉(zhuǎn)折點(diǎn),它的出現(xiàn),讓英偉達(dá)在AI芯片領(lǐng)域快速起飛。
在CUDA之前,英偉達(dá)的GPU只是一個(gè)負(fù)責(zé)在屏幕上繪制圖像的“圖形處理單元”。
而CUDA不僅可以調(diào)用GPU計(jì)算,還可以調(diào)用GPU硬件加速,讓GPU擁有了解決復(fù)雜計(jì)算問(wèn)題的能力,可以幫助客戶為不同的任務(wù)對(duì)處理器進(jìn)行編程。

除了常見(jiàn)的PC機(jī),無(wú)人車(chē)、機(jī)器人、超級(jí)計(jì)算機(jī)、VR頭盔等多種熱門(mén)的設(shè)備都有GPU;而在很長(zhǎng)一段時(shí)間內(nèi),只有英偉達(dá)的GPU,才能快速處理各種復(fù)雜的AI任務(wù)。

那么風(fēng)光無(wú)限的CUDA,后來(lái)怎么就地位不穩(wěn)了?
這還得從AI開(kāi)發(fā)框架之爭(zhēng)聊起,尤其是PyTorch VS TensorFlow。
如果把PyTorch這些框架比做車(chē),那CUDA就是變速箱——它可以加速機(jī)器學(xué)習(xí)框架的計(jì)算過(guò)程,當(dāng)在英偉達(dá)GPU上運(yùn)行PyTorch等時(shí),可以更快地訓(xùn)練、運(yùn)行深度學(xué)習(xí)模型。
TensorFlow發(fā)育早,也是谷歌門(mén)下利器,但奈何近兩年其勢(shì)頭逐漸被PyTorch超越。幾大頂會(huì)上,PyTorch框架使用的比例也明顯上漲:

△圖源:The Gradient,幾大頂會(huì)中專門(mén)提到PyTorch的論文占比
還有TensorFlow深度使用者現(xiàn)身說(shuō)法:“現(xiàn)在我改用PyTorch了。”

PyTorch能勝出,一個(gè)關(guān)鍵因素在于它比TensorFlow更靈活易用。
這一方面得益于PyTorch的eager模式,支持在C++運(yùn)行環(huán)境下修改模型,還可以立即看到每一步操作的結(jié)果。雖然TensorFlow現(xiàn)在也有eager模式,但大多數(shù)大型科技公司已經(jīng)在圍繞著PyTorch開(kāi)發(fā)解決方案。(扎心了……)
另一方面,雖然用這二者都寫(xiě)Python,但用的PyTorch的舒適度更勝一籌。
此外,PyTorch可用的模型更多,生態(tài)更豐富,據(jù)統(tǒng)計(jì),在HuggingFace中,85%的大模型都是用PyTorch框架實(shí)現(xiàn)的。
過(guò)去,雖然各大AI開(kāi)發(fā)框架之間打得火熱,但更底層的并行計(jì)算架構(gòu)CUDA可算獨(dú)霸一方。
但時(shí)過(guò)境遷,在AI框架的角逐中,PyTorch最終贏過(guò)此前領(lǐng)跑的TensorFlow,地位暫時(shí)穩(wěn)了,然后就開(kāi)始搞事情。
近些年P(guān)yTorch在拓展支持更多GPU,即將發(fā)布的PyTorch2.0首個(gè)穩(wěn)定版也會(huì)對(duì)其他各家GPU和加速器支持進(jìn)行完善,包括AMD、英特爾、特斯拉、谷歌、亞馬遜、微軟、Meta等等。
也就是說(shuō),英偉達(dá)GPU不再是那個(gè)唯一了
不過(guò)這背后其實(shí)也還有CUDA自身的問(wèn)題。
內(nèi)存墻是個(gè)問(wèn)題
前面提到,CUDA崛起與機(jī)器學(xué)習(xí)浪潮彼此促進(jìn),共贏生長(zhǎng),但有個(gè)現(xiàn)象值得關(guān)注:
近些年,領(lǐng)頭羊英偉達(dá)硬件的FLOPS不斷提高,但其內(nèi)存提升卻十分有限。以2018年訓(xùn)練BERT的V100為例,作為最先進(jìn)GPU,其在FLOPS上增長(zhǎng)一個(gè)數(shù)量級(jí),但內(nèi)存增加并不多。

△ 圖源:semianalysis
在實(shí)際AI模型訓(xùn)練中,隨著模型越來(lái)越大,內(nèi)存需求也越來(lái)越大。
比如百度和Meta,在部署生產(chǎn)推薦網(wǎng)絡(luò)時(shí),需要數(shù)十TB內(nèi)存來(lái)存儲(chǔ)海量的embedding table。
放訓(xùn)練及推理中,大量時(shí)間實(shí)際上并未花在矩陣乘法計(jì)算上,而是在等待數(shù)據(jù)到達(dá)計(jì)算資源。
那為什么不搞更多內(nèi)存?
簡(jiǎn)而言之,鈔能力不足。

一般來(lái)說(shuō),內(nèi)存系統(tǒng)根據(jù)數(shù)據(jù)使用需求,遵照從“又近又快”到“又慢又便宜”的結(jié)構(gòu)安排資源。通常,最近的共享內(nèi)存池在同一塊芯片上,一般由SRAM構(gòu)成。
在機(jī)器學(xué)習(xí)中,一些ASIC試圖用一個(gè)巨大的SRAM來(lái)保存模型權(quán)重,這種方法遇到動(dòng)輒100B+的模型權(quán)重就不夠了。畢竟,即便是價(jià)值約500萬(wàn)美元的晶圓級(jí)芯片,也只有40GB的SRAM空間。
放英偉達(dá)的GPU上,內(nèi)存就更小了:A100僅40MB,下一代的H100是50MB,要按量產(chǎn)產(chǎn)品價(jià)格算,對(duì)于一塊芯片每GB的SRAM內(nèi)存成本高達(dá)100美元。
賬還沒(méi)算完。目前來(lái)說(shuō),片上SRAM成本并沒(méi)隨摩爾定律工藝提升而大幅降低,若采用臺(tái)積電下一代3nm制程工藝,同樣的1GB,反而成本更高。
相比SRAM,DRAM倒是成本低很多,但延遲高一個(gè)數(shù)量級(jí),且2012年來(lái)DRAM的成本也幾乎沒(méi)有明顯壓降。
隨著AI繼續(xù)向前發(fā)展,對(duì)內(nèi)存的需求,還會(huì)增加,內(nèi)存墻問(wèn)題就是這么誕生的。
目前DRAM已占服務(wù)器總成本的50%。比如英偉達(dá)2016年的P100,比起最新的H100,F(xiàn)B16性能提升46倍,但內(nèi)存容量只增加了5倍。

△ NVIDIA H100 Tensor Core GPU
另一個(gè)問(wèn)題也與內(nèi)存有關(guān),即帶寬。
計(jì)算過(guò)程中,增加內(nèi)存帶寬是通過(guò)并行性獲得的,為此,英偉達(dá)使用了HBM內(nèi)存(High Bandwidth Memor),這是一種3D堆疊的DRAM層組成的結(jié)構(gòu),封裝更貴,讓經(jīng)費(fèi)樸實(shí)的使用者們只能干瞪眼。
前面提到,PyTorch的一大優(yōu)勢(shì)在于:Eager模式讓AI訓(xùn)練推理更靈活易用。但其內(nèi)存帶寬需求量也十分肥碩。
算子融合,即解決上述問(wèn)題的主要方法。其要義在于“融合”,不將每個(gè)中間計(jì)算結(jié)果寫(xiě)入內(nèi)存,而是一次傳遞,計(jì)算多個(gè)函數(shù),這樣就將內(nèi)存讀寫(xiě)量變少。

△ 算子融合 圖源:horace.io/brrr_intro.html
要落地“算子融合”,要編寫(xiě)自定義CUDA內(nèi)核,要用到C++語(yǔ)言。
這時(shí)CUDA的劣勢(shì)就顯現(xiàn)出來(lái)了:比起寫(xiě)Python腳本,編寫(xiě)CUDA之于很多人真是難太多了……
相比下,PyTorch 2.0工具就能大幅降低這個(gè)門(mén)檻。其內(nèi)置英偉達(dá)和外部庫(kù),無(wú)需專門(mén)學(xué)習(xí)CUDA,直接用PyTorch就能增加運(yùn)算符,對(duì)煉丹師們來(lái)說(shuō),自然友好很多。
當(dāng)然,這也導(dǎo)致PyTorch在近些年大量增加運(yùn)算符,一度超過(guò)2000個(gè)(手動(dòng)狗頭)。

2022年末,剛發(fā)布的升級(jí)款PyTorch2.0更是大舉發(fā)力,瞄準(zhǔn)編譯。
因添加了一個(gè)面向圖像執(zhí)行模型的編譯解決方案,該框架在A100上訓(xùn)練性能提升86%,CPU推理性能也提升26%。
此外,PyTorch 2.0依靠PrimTorch技術(shù),將原來(lái)2000多個(gè)算子縮到250個(gè),讓更多非英偉達(dá)的后端更易于訪問(wèn);還采用了TorchInductor技術(shù),可為多個(gè)加速器和后端自動(dòng)生成快速代碼。
而且PyTorch2.0還能更好支持?jǐn)?shù)據(jù)并行、分片、管道并行和張量并行,讓分布式訓(xùn)練更絲滑。
正是上述技術(shù),再結(jié)合對(duì)英偉達(dá)之外廠商GPU和加速器的支持,原先CUDA為英偉達(dá)構(gòu)筑的軟件城墻就顯得沒(méi)那么高不可攀了。

身后還有替代者
這邊英偉達(dá)自身內(nèi)存提升速度沒(méi)跟上,那邊還有PyTorch2.0搞事,但還沒(méi)完——
Open AI推出了個(gè)“簡(jiǎn)化版CUDA”:Triton。(直接偷家)

Tirton是種新的語(yǔ)言和編譯器。它的操作難度比CUDA低,但性能卻可與后者媲美。
OpenAI聲稱:
Triton只要25行代碼,就能在FP16矩陣乘法shang上達(dá)到與cuBLAS相當(dāng)?shù)男阅堋?/p>
OpenAI的研究人員已經(jīng)使用Triton,生成了比同等Torch效率高出1倍的內(nèi)核。
雖然Triton目前只正式支持英偉達(dá)GPU,但之后這個(gè)架構(gòu)也會(huì)支持多家硬件供應(yīng)商。
還有值得一提的是,Triton是開(kāi)源的,比起閉源的CUDA,其他硬件加速器能直接集成到Triton中,大大減少了為新硬件建立AI編譯器棧的時(shí)間。
不過(guò)話說(shuō)回來(lái),也有人覺(jué)得CUDA的壟斷地位還遠(yuǎn)不算被打破。比如PyTorch的另一位作者、Meta杰出工程師Soumith Chintala就覺(jué)得:
(分析師Patel寫(xiě)的)這篇文章夸大了現(xiàn)實(shí),CUDA將繼續(xù)是PyTorch依賴的關(guān)鍵架構(gòu)。
Tirton并不是第一個(gè)(優(yōu)化)編譯器,目前大多數(shù)還是把注意力放在XLA編譯器上面的。

他表示,現(xiàn)在尚不清楚Tirton是否會(huì)慢慢被大家接受,這還得靠時(shí)間來(lái)驗(yàn)證??傊琓riton并沒(méi)有對(duì)CUDA構(gòu)成太大威脅。