英偉達的軟件護城河正在逐漸消失。
随着PyTorch支持更多 GPU 廠商,再加上 OpenAI 的Triton攪局,英偉達手中的利器CUDA 逐漸鋒芒不再。
上述觀點來自 Semi Analysis 首席分析師 Dylan Patel,相關文章已引發一波業内關注。
有網友看後評價:
英偉達淪落到此種境地,隻因為了眼前利益,放棄創新。
Pytorch 的作者之一 Sasank Chilamkurthy 還補刀:
當英偉達之前提出要收購 Arm 時,我就對潛在的壟斷感到非常不安。所以我開始做任何正常人都會做的事:讓 CUDA 從的領先 AI 框架中被除名。
下面展開談一談 Patel 提到的這些背後原因。
PyTorch 成 AI 開發框架赢家,将支持更多 GPU
這裡先來簡單說說 CUDA 昔日的輝煌故事。
CUDA 是英偉達推出的并行計算框架。
CUDA之于英偉達,可謂曆史的轉折點,它的出現,讓英偉達在 AI 芯片領域快速起飛。
在 CUDA 之前,英偉達的 GPU 隻是一個負責在屏幕上繪制圖像的 " 圖形處理單元 "。
而 CUDA 不僅可以調用 GPU 計算,還可以調用 GPU 硬件加速,讓 GPU 擁有了解決複雜計算問題的能力,可以幫助客戶為不同的任務對處理器進行編程。
除了常見的 PC 機,無人車、機器人、超級計算機、VR 頭盔等多種熱門的設備都有 GPU;而在很長一段時間内,隻有英偉達的 GPU,才能快速處理各種複雜的 AI 任務。
那麼風光無限的 CUDA,後來怎麼就地位不穩了?
這還得從 AI 開發框架之争聊起,尤其是PyTorch VS TensorFlow。
如果把 PyTorch 這些框架比做車,那 CUDA 就是變速箱——它可以加速機器學習框架的計算過程,當在英偉達 GPU 上運行 PyTorch 等時,可以更快地訓練、運行深度學習模型。
TensorFlow 發育早,也是谷歌門下利器,但奈何近兩年其勢頭逐漸被 PyTorch 超越。幾大頂會上,PyTorch 框架使用的比例也明顯上漲:
△圖源:The Gradient,幾大頂會中專門提到 PyTorch 的論文占比
還有 TensorFlow 深度使用者現身說法:" 現在我改用 PyTorch 了。"
PyTorch 能勝出,一個關鍵因素在于它比 TensorFlow 更靈活易用。
這一方面得益于 PyTorch 的 eager 模式,支持在 C++ 運行環境下修改模型,還可以立即看到每一步操作的結果。雖然 TensorFlow 現在也有 eager 模式,但大多數大型科技公司已經在圍繞着 PyTorch 開發解決方案。(紮心了……)
另一方面,雖然用這二者都寫 Python,但用的 PyTorch 的舒适度更勝一籌。
此外,PyTorch 可用的模型更多,生态更豐富,據統計,在 HuggingFace 中,85% 的大模型都是用 PyTorch 框架實現的。
過去,雖然各大 AI 開發框架之間打得火熱,但更底層的并行計算架構 CUDA 可算獨霸一方。
但時過境遷,在 AI 框架的角逐中,PyTorch 最終赢過此前領跑的 TensorFlow,地位暫時穩了,然後就開始搞事情。
近些年 PyTorch 在拓展支持更多 GPU,即将發布的 PyTorch2.0 首個穩定版也會對其他各家 GPU 和加速器支持進行完善,包括 AMD、英特爾、特斯拉、谷歌、亞馬遜、微軟、Meta 等等。
也就是說,英偉達 GPU 不再是那個唯一了
不過這背後其實也還有 CUDA 自身的問題。
内存牆是個問題
前面提到,CUDA 崛起與機器學習浪潮彼此促進,共赢生長,但有個現象值得關注:
近些年,領頭羊英偉達硬件的 FLOPS 不斷提高,但其内存提升卻十分有限。以 2018 年訓練 BERT 的 V100 為例,作為最先進 GPU,其在 FLOPS 上增長一個數量級,但内存增加并不多。
△ 圖源:semianalysis
在實際 AI 模型訓練中,随着模型越來越大,内存需求也越來越大。
比如百度和 Meta,在部署生産推薦網絡時,需要數十 TB 内存來存儲海量的 embedding table。
放訓練及推理中,大量時間實際上并未花在矩陣乘法計算上,而是在等待數據到達計算資源。
那為什麼不搞更多内存?
簡而言之,鈔能力不足。
一般來說,内存系統根據數據使用需求,遵照從 " 又近又快 " 到 " 又慢又便宜 " 的結構安排資源。通常,最近的共享内存池在同一塊芯片上,一般由 SRAM 構成。
在機器學習中,一些 ASIC 試圖用一個巨大的 SRAM 來保存模型權重,這種方法遇到動辄 100B+ 的模型權重就不夠了。畢竟,即便是價值約 500 萬美元的晶圓級芯片,也隻有 40GB 的 SRAM 空間。
放英偉達的 GPU 上,内存就更小了:A100 僅 40MB,下一代的 H100 是 50MB,要按量産産品價格算,對于一塊芯片每 GB 的 SRAM 内存成本高達 100 美元。
賬還沒算完。目前來說,片上 SRAM 成本并沒随摩爾定律工藝提升而大幅降低,若采用台積電下一代 3nm 制程工藝,同樣的 1GB,反而成本更高。
相比 SRAM,DRAM 倒是成本低很多,但延遲高一個數量級,且 2012 年來 DRAM 的成本也幾乎沒有明顯壓降。
随着 AI 繼續向前發展,對内存的需求,還會增加,内存牆問題就是這麼誕生的。
目前 DRAM 已占服務器總成本的 50%。比如英偉達 2016 年的 P100,比起最新的 H100,FB16 性能提升 46 倍,但内存容量隻增加了 5 倍。
△ NVIDIA H100 Tensor Core GPU
另一個問題也與内存有關,即帶寬。
計算過程中,增加内存帶寬是通過并行性獲得的,為此,英偉達使用了 HBM 内存(High Bandwidth Memor),這是一種 3D 堆疊的 DRAM 層組成的結構,封裝更貴,讓經費樸實的使用者們隻能幹瞪眼。
前面提到,PyTorch 的一大優勢在于:Eager 模式讓 AI 訓練推理更靈活易用。但其内存帶寬需求量也十分肥碩。
算子融合,即解決上述問題的主要方法。其要義在于 " 融合 ",不将每個中間計算結果寫入内存,而是一次傳遞,計算多個函數,這樣就将内存讀寫量變少。
△ 算子融合 圖源:horace.io/brrr_intro.html
要落地 " 算子融合 ",要編寫自定義 CUDA 内核,要用到 C++ 語言。
這時 CUDA 的劣勢就顯現出來了:比起寫 Python 腳本,編寫 CUDA 之于很多人真是難太多了……
相比下,PyTorch 2.0 工具就能大幅降低這個門檻。其内置英偉達和外部庫,無需專門學習 CUDA,直接用 PyTorch 就能增加運算符,對煉丹師們來說,自然友好很多。
當然,這也導緻 PyTorch 在近些年大量增加運算符,一度超過 2000 個(手動狗頭)。
2022 年末,剛發布的升級款 PyTorch2.0 更是大舉發力,瞄準編譯。
因添加了一個面向圖像執行模型的編譯解決方案,該框架在 A100 上訓練性能提升 86%,CPU 推理性能也提升 26%。
此外,PyTorch 2.0 依靠 PrimTorch 技術,将原來 2000 多個算子縮到 250 個,讓更多非英偉達的後端更易于訪問;還采用了 TorchInductor 技術,可為多個加速器和後端自動生成快速代碼。
而且 PyTorch2.0 還能更好支持數據并行、分片、管道并行和張量并行,讓分布式訓練更絲滑。
正是上述技術,再結合對英偉達之外廠商 GPU 和加速器的支持,原先 CUDA 為英偉達構築的軟件城牆就顯得沒那麼高不可攀了。
身後還有替代者
這邊英偉達自身内存提升速度沒跟上,那邊還有 PyTorch2.0 搞事,但還沒完——
Open AI 推出了個 " 簡化版 CUDA":Triton。(直接偷家)
Tirton 是種新的語言和編譯器。它的操作難度比 CUDA 低,但性能卻可與後者媲美。
OpenAI 聲稱:
Triton 隻要 25 行代碼,就能在 FP16 矩陣乘法 shang 上達到與 cuBLAS 相當的性能。
OpenAI 的研究人員已經使用 Triton,生成了比同等 Torch 效率高出 1 倍的内核。
雖然 Triton 目前隻正式支持英偉達 GPU,但之後這個架構也會支持多家硬件供應商。
還有值得一提的是,Triton 是開源的,比起閉源的 CUDA,其他硬件加速器能直接集成到 Triton 中,大大減少了為新硬件建立 AI 編譯器棧的時間。
不過話說回來,也有人覺得 CUDA 的壟斷地位還遠不算被打破。比如 PyTorch 的另一位作者、Meta 傑出工程師 Soumith Chintala 就覺得:
(分析師 Patel 寫的)這篇文章誇大了現實,CUDA 将繼續是 PyTorch 依賴的關鍵架構。
Tirton 并不是第一個(優化)編譯器,目前大多數還是把注意力放在 XLA 編譯器上面的。
他表示,現在尚不清楚 Tirton 是否會慢慢被大家接受,這還得靠時間來驗證。總之,Triton 并沒有對 CUDA 構成太大威脅。
文章作者 Patel 本人也看到了這條評論,然後回複稱:
我可沒說(CUDA 的壟斷地位)已經沒了(Broken),而是說正在退步(Breaking)。
而且目前 Triton 還隻正式支持英偉達 GPU(沒在别的 GPU 測試性能),如果 XLA 在英偉達 GPU 上的表現不占優勢,那它恐怕不如 Triton。
但 Soumith Chintala 反駁道,就算說 CUDA 的地位正在下滑也不妥。因為 Tirton 要在硬件上推廣的話,還有很多風險,還有很長的路要走。
有網友和這位 PyTorch 作者站在同一邊:
我也希望壟斷被打破,但目前 CUDA 還是最頂的,沒了它,很多人構建的軟件和系統根本玩不轉。
那麼,你覺得現在 CUDA 境況如何?
參考鍊接:
[ 1 ] https://www.semianalysis.com/p/nvidiaopenaitritonpytorch
[ 2 ] https://analyticsindiamag.com/how-is-openais-triton-different-from-nvidia-cuda/
[ 3 ] https://pytorch.org/features/
[ 4 ] https://news.ycombinator.com/item?id=34398791
[ 5 ] https://twitter.com/soumithchintala/status/1615371866503352321
[ 6 ] https://twitter.com/sasank51/status/1615065801639489539