在這個 AI 世代,GPU 也不是只能用來打遊戲了,原本昂貴的專業繪圖卡,在 AI 公司眼中甚至是便宜的 AI 計算卡。而 Intel 在這條賽道上明顯是落後的,後知後覺地推出買來的 Gaudi 和從頭玩起的 oneAPI,不過隨著 Arc 邁入第二代。且 PyTorch 2.4 新增了 XPU 支援後,Intel 或許在 AI 這方面也有了一些競爭力。所以本篇文章將專注在 Intel Arc B580 於 AI 方面的表現,畢竟遊戲方面 B580 的表現應該早已被測的清清楚楚,既然遊戲表現不錯,那 Battlemage 架構在 AI 方面也能夠期待的,是吧?

開箱 - Nitro Arc B580 OC 12GB

開始測試之前,先來看看今天的主角 Intel Arc B580,這次選用的是 Acer 推出的 Nitro 系列 B580 OC 12GB 顯示卡。

打開包裝,第一印象就是外觀收斂了不少,我記得 Acer 第一代的 Predator 外觀相當前衛,好不好看不好說,但確實很獨特。而在 Arc 二代的 Battlemage 上 Acer Nitro B580 顯然走向了簡約設計。

正面是雙風扇設計,兩顆風扇方向相同。

不到兩槽的厚度,甚至顯卡 PCB 的部分也只佔了 2/3 不到,可見 Arc B580 的發熱與功耗確實不高。

背版部分採用了鋁金屬材質,搭配近期流行的簍空設計,讓風流更直接,增強散熱表現。

影像輸出部分有著 3 個 DP 2.1 和一個 HDMI 2.1。

測試 - Arc B580 12GB 在 PyTorch 的表現如何?

首先簡單的介紹一下測試平台,主機規格如下:
CPU:Intel Core i9-12900K
MB:ASUS ProArt Z690-Creator WiFi
RAM: ADATA XPG LANCER DDR5-5200 16GB×2
Graphics:Nitro Intel Arc B580 OC 12GB
Windows OS Drive:Seagate FireCuda 520 1TB(主機板散熱片)
Ubuntu OS Drive:Teamgroup A440 1TB(主機板散熱片)
Cooling:MONTECH HyperFlow ARGB 360
Case:InWin 303C
Power:FSP Hydro PTM PRO 850W

而作業系統部分,為了一些模型表現的量測,PyTorch 的 AI 測試於 Ubuntu 24.10 上進行,而 UL Procyon 及其他跑分與遊戲則皆透過 Windows 11 24H2 上進行。

在開始 AI 測試之前,先來點前景故事,以免被 PyTorch 等專有名詞搞混。PyTorch 是目前開發 AI 最常使用的框架,讓開發者能透過 Python 撰寫 AI 模型,透過 PyTorch 去底層控制 GPU 進行計算。但是,當初 AI 還沒紅起來的時候,只有 NVIDIA 在搞 GPU 通用計算,也就是 CUDA 在幹的事。也因此,PyTorch 仰賴了大量的 CUDA 程式碼,導致其他 GPU 開發商 AMD 等在 AI 世代想要跟上時,會遇到 CUDA 霸佔市場的窘境,更別提剛開始做 GPU 的 Intel。相比 AMD,在面對 CUDA 的反應就是照抄 CUDA API,搞出一個 ROCm,秉持著 CUDA 有的 function 我也有,理想上甚至 model.to("cuda") 的程式碼都不用改。Intel 更為大膽一點,從頭設計一個 oneAPI,來應對 CPU、GPU、FPGA 等等的通用計算,能保有 Intel 對軟硬體之間自己獨立自主的設計思路。

我這邊不說誰的方法比較好,但 Intel 的做法顯然是比較有風險的,畢竟是從頭開始玩。也因為與 CUDA 有著設計上的差異,在不久之前,想要透過 Intel GPU 玩 PyTorch,你需要去額外安裝 Intel Extension for PyTorch,簡稱 IPEX 的東西。簡單一點的解釋就是,網路上的 Code,你要自己去修改才能用。那對於學生還有開發者來說,與其花時間去研究 IPEX,不如直接買 NV 的 GPU 還比較省事,畢竟大家都這樣玩。加上當初 Arc A770 推出時,壓跟就不支援 PyTorch,是後期才有 Windows + WSL + Docker 的奇特解法才能用上 PyTorch,喔對,還要搭配那難用的 IPEX。那近期從 PyTorch 2.4 及 2.5 版開始,不用再搞 IPEX 這東西了,所有程式理論上只要把 .to("cuda") 改成 .to("xpu"),就能無痛使用 PyTorch 了。

Anyway,TL;DR:「近期 Intel 在 AI 領域的努力終於有了成效,能夠在 Arc GPU 上面跑多數 AI 模型了」。

那麼效果如何呢?首先你需要對 Linux 有點理解,因為目前 Arc B580 跑 PyTorch 似乎只有 Linux 的驅動可以支援,且該驅動還限制只能用 Ubuntu 24.10 安裝,好歹也支援一下 LTS 版嘛…

安裝完之後,我們就來測試吧!首先我先以目前最火紅的 LLM,即語言模型進行測試。使用的模型為 Meta 的 Llama 3.2-3B,該模型適合本機端的部署,能夠處理句子重寫、翻譯等簡單的事務。從結果看來,Arc B580 相較於上一代更高階 Arc A770 有著明顯的進步,可見 Arc 架構從 Alchemist 到 Battlemage 有著不小的提升。然而,相比 NVIDIA GeForce RTX 3070,在 AI 上的性能還是有些差距,畢竟定位和價位不是同級別的。

並且 Arc B580 擁有著 12GB 的記憶體,但在序列長度(sequence length,可以理解為句子的長度)達 4,096 時,竟然比 8GB 的 RTX 3070 更早出現記憶體不足,這個問題我們稍後再來詳細講。

而同樣是 Transformer 模型,只是從 GPT 的 Decoder-only Transformer 換成了 BERT 的 Encoder-only Transformer。B580 相較於前輩 A770 的表現就沒有前面來的明顯了,但有趣的是模型訓練的速度,B580 一擺 inference 時的落後,直追 RTX 3070。

Batch size 由 1 拉高到 8 之後,Arc B580 的表現就追上了 RTX 3070,可見 Arc B580 對於 low batch 的推理較不擅長,或許是在低負載的調度與記憶體的存取沒有那麼成熟。

而當精度由 bfloat16 提升至更精準的 float32 後,Arc B580 直接反超 RTX 3070。

那視覺這方面的表現呢?首先看到 Vision Transformer(ViT)的性能對比,該模型主要是用來做影像分類、分割、辨識,甚至是文件的問答和 OCR 等。以 base model 進行測試的情況下,Arc B580 展現出了很不錯的表現。而有趣的是 Arc A770 於大 batch size 的情況下竟然回到了領先地位。

模型訓練的情況也是類似,同樣由 Arc B580 取得了明顯的性能優勢,看起來 Arc 在序列長度較短的 ViT 模型上,是較具有優勢的。

那在序列長度較長的 DINOv2 Large 上,Arc B580 與 RTX 3070 的性能差距就沒有那麼明顯了,甚至還稍微落後。

最後看到最近熱度很高的文生圖模型的表現,首先是 Stable Diffusion 1.5,Arc 系列相比 RTX 3070 的表現還是有落差的。

但是由於 Arc B580 有著較多的記憶體,因此面對規模較大的模型,如:SDXL 上就能夠順暢運行,反之只有 8GB 記憶體的 RTX 3070 就連運行都不具有資格了。

所以從以上表現看來,Arc B580 在 Transformer 模型上的表現其實尚有進步空間,尤其是面對小 batch size 和長序列的情況下,而原因個人猜測應該是因為 PyTorch 函式庫的一個 function:torch.nn.functional.scaled_dot_product_attention。這個函式是現今 ChatGPT、Stable Diffusion、DALL-E 和 Sora 等模型能夠成功的關鍵因子,它是 Transformer 模型中一個不可或缺的模組,負責了 Transformer 模型注意力的計算。然而這東西有個缺點,那就是該模組計算的複雜度和記憶體需求會隨著序列長度的增加成指數級的成長,專業術語叫做 O(n^2)。

怎麼辦?所以有一些新的技巧,像是 Flash Attention 和 Memory Efficient Attention 能夠減緩指數級別的成長,同時減少記憶體的存取,加快運算速度。而 PyTorch 函式庫的那個函式,在 NVIDIA GPU 上會自動選擇 cuDNN 或是 Flash Attention 的加速,搭配額外一些硬體級別的加速,如:Tensor Core。但在 Arc GPU 上,目前看起來在 PyTorch 是沒有相關實作的。而這或許就是為什麼 12GB 的 Arc B580 會在 Llama 3.2-3B 長序列時爆記憶體,但 8GB 的 RTX 3070 卻不會的原因了。此外,運算時有沒有將 XMX 矩陣引擎納入也可能是 RTX 3070 與 Arc B580 性能出現差距的原因之一。

測試 - Arc B580 12GB 在 AI Deploy 的表現如何?

以上是 Arc GPU 於 PyTorch 上的表現,但 AI 並不是只會在 PyTorch 這個環境運行,畢竟 PyTorch 主要的對象是 AI 開發人員,而非一般消費者。那在消費者端,模型大多會透過 Intel 的 OpenVINO、NV 的 TensorRT,或是通用的 ONNX Runtime 去運行,以展現出最快的運行速度且減少資源消耗。那在這方面的測試,我們選擇了 UL Procyon,該軟體涵蓋了多數 AI 模型 deploy 後的情境,能夠幫助了解 AI deploy 於各個硬體上的性能表現。首先看到電腦視覺部分,Arc B580 在經過了 OpenVINO 的模型編譯後,仍不幸的無法超越 TensorRT 的 RTX 3070。同樣還是得強調,這兩者定位上就不是同一階級的。
但對於上一代要高上一階的 Arc A770,Arc B580則是毫無疑問的超車了。(為讓數值範圍不要差距過大不好呈現,圖表的 X 軸為 log scale)

而在圖片生成部分,也就是 Stable Diffusion,Arc B580 與 RTX 3070 的差距就縮小了非常多,可見 PyTorch 端的性能差距,應該有不少都是因為 PyTorch 缺少了一些底層針對 Intel GPU 的最佳化。期望隨著 PyTorch 的迭代,Intel 能夠漸漸填平這個差距,尤其是 Flash Attention 和 Memory Efficient Attention 的部分。

最後在語言模型 LLM 的測試上,Arc B580 有著參賽者之中,最優的表現。特別是透過 OpenVINO 的後端以 int4 量化後,連 13B 參數的 Llama2-13B 和 8B 的 Llama3.1-8B 也能夠順利運行。反之,RTX 3070 對於 int4 量化的 Llama2-13B 仍是沒轍。而且,在這邊語言模型(LLM)的表現上,所有 Transformer 模型表現皆是 Intel GPU 強於 NVIDIA GPU。可見在 int4 精度,且有相關硬體加速介入的情況下(沒道理 OpenVINO 不支援 oneAPI 的 SDPA 吧 XD),Arc GPU 在 Transformer 模型的理論性能應該是超過 NVIDIA GeForce RTX 3070 的。

結論 - Arc B580 12GB 是最佳入門 AI 卡?!

寫到這邊,我發現光是 AI 的篇幅好像就有點多了,所以就先來個結尾吧!回到標題的問題,Intel 的逆襲之路到哪了?我覺得目前 Arc B580 在 AI 上的表現的確不錯,特別是在 deploy 部分,搭配 OpenVINO 能夠表現出很有性價比的表現。但是在 PyTorch 開發端,由於 XPU 的支援仍不夠完整,仍有可以進步的空間。而從 2.4 版開始直接讓 PyTorch 支援 Intel Arc 裝置使的 Intel GPU 與 AI 開發的距離大幅縮短,市面上的 AI 服務,至少多數都能夠運行了,這點對於我長期接觸 AI 的開發者來說相當友好。

所以逆襲之路到哪了?我覺得對於消費者或是小公司,至少到一半了吧!今天以不到 1 萬的價格就能有一塊 12GB 的 GPU 能夠運行 AI,在入門市場已經很有競爭力。但如果 Intel 要真的獲得一些關注和市場占比,仍是要拿出一些超值的內容才能讓我們想要從 NVIDIA 轉到 Intel,我覺得這個超值內容可以是 GPU 的記憶體。雖然 RTX 5090 有 32GB,4090 有 24GB,但一張 5 萬起的價格對於許多人或是公司來說仍是一個巨大的負擔。如果能夠在低於 2 萬的價位帶端出 1 張 24GB,或甚至 32GB 的 GPU,就算算力不高,不能做有規模的模型訓練。光是能夠跑多數模型這件事應該就能讓不少人願意掏錢出來了。不然,Mac mini 近期也不會獲得那麼多的關注,而最近的確也有相關 24GB 版的 GPU rumor。只希望 Intel 到時能夠補上 PyTorch scaled_dot_product_attention 這函式的硬體加速和 Flash Attention + Memory Efficient Attention 支援,畢竟在這個 Transformer 模型主宰的年代,沒有 Transformer 硬體加速實在是有些說不過去。