前言
不知道說到 GPU,大家腦海裡第一個浮現的是否都是 NVIDIA?
對我來說,一提到 GPU 我第一個想到的是 AMD,從國中第一次自己組電腦到現在,我一直都是使用 AMD GPU,從最開始只有 4GB VRAM 的 RX 570,到第一代 RDNA 架構的 RX 5700 XT,再到現在基於 RDNA 4 架構的 RX 9070 XT,每一代在都陪伴了我多年。
目前的 GPU 市場因為 AI 的興起,還有我個人在學科學運算的原因,以下段落我會分成兩個部分來說明,第一部分是用在傳統圖形領域的 GPU,第二部分則是用在平行運算領域,可能完全沒有圖形管線的 GPGPU。
傳統圖形領域的 GPU
NVIDIA 的技術封閉性相較於 AMD 的開放
我從最早第一次買 GPU 的時候就已經對 NVIDIA 感到不滿,不論是當時顯示器支援的 G-Sync 還是後來的 DLSS,NVIDIA 總是想透過封閉的技術來鎖定消費者,而 AMD 這邊幾乎總是端出開放標準的替代品,像是 Freesync 和早期的 FSR,雖然後期 FSR 4 因為需要透過神經網路來運算,考量到模型公開等於放棄底牌,所以才改成了封閉的技術,但至少在商業決策尚可接受時,AMD 都是以開放的方式來盡可能提供技術支援。
在驅動程式方面也一樣,應該很多人都知道 Linus 曾經說過的話:NVIDIA fuck you.,就是因為 NVIDIA 不願意讓社群有辦法參與程式的開發和改進。
反觀 AMD 的 GPU 驅動程式 Mesa 則是完全開放的,社群可以自由地參與開發和改進。
純光柵化領域的效能比拼
對像我這種主要在玩競技遊戲和音樂遊戲的玩家來說,純光柵化的效能表現是最重要的指標,這也是我後來完全不在意 NVIDIA 光線追蹤和幀生成、超解析度的原因,因為這些技術對我來說幾乎沒有幫助。
因此 AMD GPU 相對於 NVIDIA 顯然更適合我,生態開放的同時純光柵化效能更好售價也更便宜。
用於通用運算的 GPGPU
雖然我一直對 NVIDIA 的封閉性意見很大,但 NVIDIA 在科學運算領域早期大力投入的 CUDA 確實幫助了很多人做出原本用 CPU 難以負擔計算完成的研究和模擬。
AMD 因為早期技術路線導致的財務問題最近幾年才剛剛靠 CPU 的 Zen 架構起死回生,在 GPU 領域目前則透過開放的 ROCm 工具鏈迅速追趕。
下面我會法通用運算分到兩類應用上,一是需要高精度(FP64)的應用例如科學運算和演算法研究,二是需要高吞吐量低精度(FP16, BF16, FP8, INT8, FP4, INT4 甚至 1.58Bit 平衡三進位)的 AI 模型訓練和推論。
科學運算
因為消費級 GPU 幾乎從來就沒有 FP64 的需求,因此會把重點放在 CDNA 架構上。
在科學運算領域,AMD CDNA 算是給足了誠意,CDNA 1 的 MI100 雖然沒有 FP64 的 matrix core,但三萬初的二手價格也讓這張卡還有一戰的能力,對比基於 RDNA 4 新出的 AI Pro R9700 雖然 FP32 只有一半,但價格也來到 R9700 的 60%,且 R9700 的 FP64 因為更傾向服務於 AI 的消費者因此比例只有 FP32 的 1/64,大約在 0.75TFLOPs,要注意的是 MI100 等企業級產品的設計是被動式散熱,需要搭配獨立風道或改裝風扇來散熱。
CDNA 2 是一個有趣的轉折點,FP64 峰值終於追上同時期 NVIDIA 主流企業級的 H100,H100 介於 MI210 和 MI250X 之間。
我目前經手過的機器有 CDNA 3 的 MI300X 和 MI325X,值得注意的是這代不論在 HBM 容量還是 FP64 效能上都已經和 NVIDIA 的最新產品拉開差距。
這也是我說 NVIDIA 已經為了 AI 放棄科學運算領域進展的原因,B300 的 FP64 甚至被砍到 64:1 只有 1.25TFLOPs。
CDNA 4 相較於 CDNA 3 主要是在低精度方面提升很大,後面再講。
AI 應用
AI 真的是 AMD 最想吃下的那塊,也是資本市場最期待的訊號。
AI 訓練和微調的部分因為我本身不熟,先不做評價。
至於模型推論的話我認為一樣可以透過不同數值精度來分析,但 VRAM 容量和頻寬也同樣重要。
消費級 RDNA 的 AI 推論現狀
RDNA 1 是當初 AMD 從 GCN 分家的第一代遊戲卡,也就是 RX 5000 系列,也是我入手的第二張 AMD GPU(RX 5700 XT),因此幾乎完全放棄了通用運算的能力,官方甚至不提供 ROCm 支援,因此可以把它當作純遊戲卡就好,我曾經嘗試過在上面硬跑 ROCm,但只要啟動一個 kernel 就會導致顯示器輸出全黑。
RDNA 2 的 RX 6000 系列是 AMD 開始給通用運算能力的一代,但因為缺乏硬體 matrix 單元導致 AI 效能非常差,只適合做一些平行運算小實驗,我認為速度上不適合用作為 AI 推論的主力。
RDNA 3 的 RX 7000 系列補齊了 matrix 單元,能有效率得在硬體上做 WMMA 指令,因此 AI 推論能力得到大幅提升,至今為止大多數 AI 推論引擎對於 RDNA 3 的支援也都蠻完整,可惜的地方是沒有 FP8 和 INT4 的硬體支援,對於低精度模型推論理論上能吃到的加速效果有限。但 AMD 推出了我認為堪稱神作的 APU 系列 Ryzen AI Max,最知名的型號就是搭載 128GB 統一記憶體架構的 Ryzen AI Max+ 395,這顆 APU 上的 Radeon 8060S 使用 RDNA 3.5 架構打造,最高可以分配到 96GB 作為 VRAM,雖然核心規模相對較小但因為不需要 offload 到 DRAM 上,因此在參數較大的 AI 推論表現上可以贏過幾乎所有 VRAM 塞不下整個模型的獨立 GPU。
到 RDNA 4 的 RX 9000 系列,也就是我目前正在使用的 RX 9070 XT,開始提供硬體 FP8 和 INT4 的支援,以及稀疏性加速,對於 AI 推論的加速效果有了質的飛躍。但在目前模型的能力下,我認為 16GB VRAM 壓力還是很大,真正堪用的模型通常需要部分權重和 KV Cache offload 到 DRAM 上,這樣就又造成了頻寬的瓶頸,因此我認為如果真的需要本地 AI 的話可能還是選 Ryzen AI Max+ 395 或是未來要出的 Ryzen AI Max+ 495 會比較適合。
我認為雖然 16GB VRAM 跑本地語言模型雖然還很難提供生產力,但這不代表 ROCm 支援沒有意義,也許未來小模型會有更好的智力,從而帶來生產力,就像歷史上 AMD GPU 多次在軟體支援起初發佈時落後,但時隔幾年老卡卻依賴當初優秀的硬體底子透過軟體重回運算的巔峰,就像以太幣礦潮那次一樣。
企業級 CDNA 的 AI 推論現狀
比起 RDNA 在消費級市場因為頻寬與 VRAM 容量受限的掙扎,CDNA 在企業級 AI 推論的軟硬體生態其實已經相當完善。跳過前面幾代偏向科學運算的架構,從 CDNA 3 開始,硬體原生支援 FP8 和稀疏性加速後,主流的推論引擎對 ROCm 的支援就已經步入正軌。
以實務上的部署經驗來說,在單節點多卡(例如 MI325X * 8)的環境下,目前已經能非常順暢地透過 Docker Compose 進行容器化部署。針對大型語言模型的推論,這個層級的硬體資源與極大的 HBM 容量允許我們實作更進階的架構最佳化。
例如在 vLLM 環境下實作 PD 分離(Prefill/Decode Disaggregation),將計算密集的 Prefill 階段與記憶體頻寬密集的 Decode 階段拆分給不同的 GPU 或實例處理,並搭配 LMCache 這類的分散式 KV Cache 管理機制來跨實例共享 Context。這樣的架構能大幅提升整體系統的推論吞吐量,在進行 LLM benchmark 時的效能表現已經與競品具備極高的對抗能力。
至於未來的 CDNA 4,主要方向則是針對更極限的低精度(如 FP6、FP4)與區塊量化格式進行底層硬體支援,進一步緩解巨型模型推論時的記憶體頻寬瓶頸。
看向未來
最近有一些 UDNA 的消息傳出,因為目前的 RDNA 和 CDNA 架構導致工程團隊和開發者需要同時做兩套最佳化,UDNA 靠 ISA 和編譯器後端的統一,能大幅降低維護負擔和提升效能在消費級和企業級產品間的可攜性,也間接對 ROCm 開發者的練習成本降低不少。
題外話
我自己對於 Bitnet,也就是平衡三進制的 AI 模型蠻有興趣,我以前就稍微看過一些平衡三進制的發展,例如前蘇聯的 Setun 電腦,還有 GitHub 上的 SBTCVM,但讓我意外的是沒想到平衡三進制似乎最適合的應用是在仿生(也就是 AI)的領域,這讓我想到老子說過的三生萬物,和容錯系統裡的聖經 TMR(三重模組冗餘),或許在背後有某種通用的原理在運作。
蠻希望看到一些客製化 HIP kernel 可以讓現有硬體高效率的做 Bitnet 推論,如果我有多餘時間開發也許會來試試。