vLLM AMD ROCm 注意力後端最佳化
vLLM 為 AMD ROCm 實作了一系列最佳化的注意力後端,已超越單純移植,進入架構共同設計階段。透過將 vLLM 的協調層與 AMD 的 AITER 原語結合,系統在 AMD Instinct MI300X、MI325X 與 MI355X GPU 上,對 Multi-Head Attention (MHA) 與 Multi-Head Latent Attention (MLA) 工作負載達成 1.2‑4.4 倍的吞吐量提升(TPS)。
混合推論工作負載的挑戰
生產環境的 LLM 服務需要持續批次處理,同時處理 prefill、extend 與 decode 令牌。每個階段都有不同的效能瓶頸:
- 預填:計算受限;需要大型 tile 大小與最大 ALU 使用率以處理新提示。
- 延伸:混合工作負載;為具有部分 KV 快取的請求處理額外的提示端令牌。
- 解碼:記憶體受限;一次產生一個令牌,需要合併的記憶體存取與最小化快取抓取。
由於針對某一階段調校的核心在其他階段常表現不佳,vLLM 採用明確的路由機制,將每種請求類型導向專門的核心。
ROCM_AITER_FA:MHA 的三路協調
ROCM_AITER_FA 是一個複雜的協調層,將請求透過三條專門路徑導向,以在 CDNA 架構上最大化硬體利用率。
技術創新
- 三路路由:請求會動態分類為 預填(使用
flash_attn_varlen_func於矩陣核心)、延伸(使用分塊注意力與 LSE 合併處理 10 萬以上的上下文)、以及 解碼(使用 AITER 高度最佳化的記憶體頻寬核心)。 - 批次重新排序:vLLM Model Runner 會將請求重新排序為
[decode:extend:prefill]序列。此舉確保連續的記憶體存取,並消除多餘的 KV 快取抓取。 - 硬體最佳化的 KV 快取布局:預先洗牌的 KV 快取布局使記憶體存取模式與 AMD 的 CDNA 架構對齊。這使得解碼路徑能以零布局轉換開銷呼叫 AITER 的
pa_fwd_asm核心,提升解碼吞吐量 15‑20%。 - 分塊上下文處理:長序列以固定的每次迭代令牌預算(約 32K 令牌)處理,使用基於 Log-Sum-Exp (LSE) 的合併以維持數值穩定性。
MHA 後端比較
除了 ROCM_AITER_FA,vLLM 還提供其他 MHA 後端:
- 統一後端(
TRITON_ATTN、ROCM_AITER_UNIFIED_ATTN):透過單一核心路徑處理所有令牌。 - 傳統雙路(
ROCM_ATTN):為 prefill(Triton)與 decode(HIP 分頁注意力)使用不同核心。此後端支援 Radeon GPU,但對於不支援的 KV 頭尺寸可能退回較慢的 Triton decode 核心。
AITER MLA 後端:為 DeepSeek 最佳化
Multi-Head Latent Attention(MLA)在 DeepSeek 與 Kimi 中使用,將 KV 快取壓縮至 576 維,改變了效能瓶頸。vLLM 提供專門的基於 AITER 的 MLA 後端,以處理此壓縮。
混合處理策略
MLA 後端根據處理階段採用分割策略:
- 預填/延伸(未吸收):注意力使用標準 MHA 核心在未壓縮的表示上計算。
- 解碼(已吸收):專門的 MLA 核心直接在壓縮的 576 維潛在空間上運作。
來自組合語的效能提升
ROCM_AITER_MLA 與 ROCM_AITER_TRITON_MLA 的主要效能提升來自 mla_decode_fwd 組合語核心。此手工調校的核心最大化 HBM3 頻寬,較 TRITON_MLA 基線快 1.2‑1.6 倍的每輸出令牌時間(TPOT)。
效能基準測試
基準測試使用 ROCm 7.0.0 在 Qwen3-235B(MHA)與 DeepSeek-R1(MLA)模型上執行。
MHA 結果(Qwen3-235B)
ROCM_AITER_FA 在所有測試硬體上於輸出吞吐量(TPS)方面顯著優於傳統後端:
| 硬體 | ROCM_AITER_FA | ROCM_AITER_UNIFIED_ATTN | TRITON_ATTN | ROCM_ATTN |
|---|---|---|---|---|
| MI300X (64 req) | 1.00x | 1.05x | 1.30x | 3.82x |
| MI325X (64 req) | 1.00x | 1.02x | 1.19x | 4.36x |
| MI355X (64 req) | 1.00x | 0.95x | 1.08x | 3.61x |
ROCM_AITER_FA 在此模型上比 ROCM_ATTN 提升 2.7‑4.4 倍的吞吐量,部分原因是 ROCM_ATTN 會因不支援的頭尺寸退回至 Triton decode 核心。
MLA 結果(DeepSeek-R1)
AITER MLA 後端提供最高 1.5 倍於 TRITON_MLA 的吞吐量提升:
| 硬體 | ROCM_AITER_MLA | ROCM_AITER_TRITON_MLA | TRITON_MLA |
|---|---|---|---|
| MI300X (64 req) | 1.00x | 0.98x | 1.33x |
| MI325X (64 req) | 1.00x | 0.98x | 1.41x |
| MI355X (64 req) | 1.00x | 1.03x | 1.52x |
建議將 ROCM_AITER_MLA 設為 MLA 工作負載的預設,尤其在 MI355X 上可取得最佳的首令牌時間(TTFT)。
實作與部署
若要啟用最佳化的 AITER 後端,使用者應設定以下環境變數:
export VLLM_ROCM_USE_AITER=1
設定後,vLLM 會自動為 MHA 模型(例如 Llama、Qwen、Mistral)選擇 ROCM_AITER_FA,為 MLA 模型(例如 DeepSeek、Kimi)選擇 ROCM_AITER_MLA。
硬體支援矩陣
| GPU | 記憶體 | 架構 |
|---|---|---|
| MI300X | 192GB HBM3 | gfx942 |
| MI325X | 256GB HBM3e | gfx942 |
| MI355X | 288GB HBM3e | gfx950 |