vLLM 在 Arm CPU 上的最佳化

vLLM 與 PyTorch、oneDNN 以及 KleidiAI 合作,針對基於 Arm Neoverse 的伺服器優化其服務堆疊。這些更新大幅提升可用性、功能覆蓋與效能,降低在 CPU 基礎設施上部署大型語言模型(LLM)的成本與複雜度。

部署與功能啟用

vLLM 在 Arm CPU 上現在具備改進的即插即用可用性與更廣泛的模型支援。主要的功能啟用更新包括:

  • 簡化安裝:提供預建的 wheel 與 Docker 映像。
  • 擴充模型支援:支援 GPT-OSS、Whisper 與 Qwen 3.5 / 3.6。
  • 新功能:支援分段預填(chunked prefill)、前綴快取(prefix caching),以及 INT8 W8A8 與 INT8 W4A8 推論。
  • 穩定性:修復導致崩潰、精度、執行緒與 CPU 使用率的錯誤,並加強與 PyTorch 與 UXL 生態系的整合。

核心效能最佳化

效能提升是透過解決整個推論堆疊的瓶頸,而非僅聚焦於 GEMM 核心取得的。

使用 mimalloc 的記憶體配置

PyTorch 預設使用 glibc malloc,在 KV 快取管理與排程所需的重複張量配置過程中導致大量頁面錯誤與爭用。vLLM 現在在 Arm 架構的 CPU 上的 PyTorch 中將 mimalloc 設為預設配置器。此快取配置器在多執行緒壓力下具備更佳的擴展性,使 Llama 3.1 8B 離線吞吐量提升 2.3 倍,且在低併發服務情境下可達到最高 7 倍的增益。

同步與 Arm LSE 原子操作

在高核心數量下,效能先前因 OpenMP 動態排程的爭用而退化。效能分析顯示 gomp_iter_dynamic_next 依賴載入鏈接/條件儲存的重試迴圈,導致在高執行緒爭用時頻繁失敗。

vLLM 透過在 PyTorch 中建置使用 Arm Large System Extensions (LSE) 的 libgomp 執行時環境來解決此問題。藉由使用 LDADDAL 等硬體原子指令,系統消除低效的重試迴圈,使 Llama 3.1 8B 離線吞吐量提升 9%,且在低併發情境下將每輸出標記時間(TPOT)延遲降低 15%。

密集層權重預打包

為了消除每次呼叫時將權重從框架布局轉換為適合核心的格式所產生的開銷,vLLM 啟用了由 Compute Library for Arm Architecture 加速的快速 oneDNN 路徑。此方式允許在模型熱身階段將 BF16 權重打包,並在推論時重複使用,將 TPOT 延遲降低 60%,且在低併發情境下使 Llama 3.1 8B 離線吞吐量提升 16%。

最佳化分頁注意力

先前,CPU 分頁注意力核心依賴參考實作來執行 QK 與 PV 矩陣乘法以及 softmax 指數運算。vLLM 針對這些路徑進行最佳化,使用:

  • BFMMLA 進階 SIMD 指令:用於 QK 與 PV 路徑。
  • 向量化三次多項式近似:用於 softmax 指數運算。

這些最佳化使分頁注意力提升至最高 4 倍的速度,並使 Llama 3.1 8B 離線吞吐量提升 12%,同時在 Arm CPU 上開啟分段預填與前綴快取的支援。

量化效能

INT8 W8A8(8 位元權重與激活)

使用在 SVE128 與 SVE256 上利用 SMMLA(有號 INT8 矩陣乘加)指令的 oneDNN JIT 核心,vLLM 現在支援高效的 W8A8 量化。相較於最佳化的 BF16 基線,W8A8 可提供最高 88% 的吞吐量提升、45% 較低的 TPOT 與 54% 較低的 TTFT。

INT8 W4A8(4 位元權重,8 位元激活)

透過 KleidiAI INT4 微核心加速,W4A8 進一步降低記憶體頻寬壓力,於低併發、受記憶體限制的情境中特別有效。相較於 W8A8 基線,W4A8 可提供最高 29% 的吞吐量提升、26% 較低的 TPOT 與 18% 較低的 TTFT。

效能提升總結

與 2025 年 10 月的 BF16 基線相比,這些最佳化的累積影響相當顯著:

配置 最大吞吐量提升 最大 TPOT 加速 最大 TTFT 加速
Optimized BF16 2.7× - -
INT8 W8A8 4.8× 5.7× -
INT8 W4A8 6.2× 7.8× 2.6×

這些改進使 vLLM 成為適用於 Arm Neoverse 伺服器的可投入生產的推論堆疊,透過優化從記憶體配置與執行時同步到核心層級執行的完整路徑。

Sources