vLLM Qwen3.5 效能優化
vLLM 在 GB200 NVL72 系統上服務 Qwen3.5 時,每 GPU 已達到超過 25,000 tokens per second (TPS) 的總吞吐量。這一效能里程碑是透過優化 Qwen3.5 混合注意力架構的解耦服務路徑 (disaggregated serving path) 來實現的,特別是針對 Gated Delta Network (GDN) 計算以及 prefill 與 decode worker 之間的狀態傳輸挑戰進行了優化。
Qwen3.5 的技術優化
Qwen3.5 利用結合了全注意力層 (full-attention layers) 與 Gated Delta Network (GDN) 層的混合架構。為了最大化吞吐量,vLLM 實作了三項主要的技術增強:
1. Blackwell 優化的 GDN Prefill
vLLM 整合了來自 FlashInfer 的新 GDN prefill kernel (PR #3001),取代了先前的 FLA/Triton 實作。在運行 Qwen3.5-397B-A17B-NVFP4 的 8×B200 系統上,此整合帶來了以下結果:
- GDN Kernel 效能: 在微基準測試 (microbenchmarks) 中效能提升高達 5.92×。
- Prefill 吞吐量: 對於僅 prefill 的工作負載 (ISL/OSL = 8192/1),端到端 prefill 吞吐量提升了 1.13×。
- 延遲: 在相同的工作負載下,平均首字延遲 (Time to First Token, TTFT) 降低了 12%。
使用者可以透過將 GDN backend 設定為 auto 或明確使用 --gdn-prefill-backend flashinfer 來啟用此路徑。
2. 混合快取與 GDN 狀態傳輸
以解耦模式服務混合 SSM-attention 模型需要同時傳輸全注意力 KV cache 與 Mamba 風格的 SSM 狀態。vLLM 實作了幾項關鍵變更以支援此功能:
- 實體記憶體映射 (Physical Memory Mapping): PR #35758 將 HMA 邏輯區塊映射到實體記憶體區域,將傳輸的描述符 (descriptors) 從 4,284 減少到 1,650,並在小型規模的 H100 設定中將吞吐量提升了約 7%。
- 雙重描述符視圖 (Dual Descriptor Views): PR #36687 引入了雙重描述符視圖與同質-TP 支援,允許 prefill 與 decode worker 透過 NIXL 傳輸異質狀態。
- GDN 擴展: PR #41869 特別針對 Qwen3.5 擴展了此解耦路徑以支援 GDN 層。
3. 無競態非同步排程 (Race-Free Async Scheduling)
非同步排程被確定為突破 25K tok/s/GPU 門檻的關鍵功能。vLLM 解決了 KV block 傳輸中的兩個關鍵競態條件 (race conditions) (PR #48481 與 PR #45357),這些問題先前在啟用非同步排程時會導致準確度驟降至零。
效能基準測試
環境與設定
效能測試是使用以下配置進行測量的:
- 硬體: 透過 NVLink72 連接的 GB200 集群。
- 模型: Qwen3.5-397B-A17B-NVFP4。
- 工作負載: ISL/OSL = 8192/1024,使用
random_range_ratio=0.8的隨機資料集。 - 拓撲結構: 固定 decode 端使用一個端點並搭配 DEP8 (Data Parallel + Expert Parallel 跨 8 個 GPU),prefill 端配置範圍從 4 到 8 個端點 (每個使用 DEP2)。
結果
準確度已透過 GSM8K 基準測試進行驗證,所有五種測試配置均維持在 88% 的準確度,與 Qwen3.5 聚合運行結果一致。
每 GPU 的總 TPS 達到 25,000 tokens per second,併隨併發量 (concurrency) 從 64 掃描至 5,120。5,120 的併發量限制是由於 decode 端側的 KV cache 容量限制;增加此數值將需要 decode 端點上額外的 GPU。
部署建議與最佳實踐
為了達成這些結果,vLLM 建議使用以下設定:
- 狀態佈局 (State Layout): 在解耦服務中,
VLLM_SSM_CONV_STATE_LAYOUT=DS是強制性的,用於 conv-state 傳輸。 - 排程: 使用
--async-scheduling以最大化吞吐量。 - 快取優化: 使用
--mamba-ssm-cache-dtype bfloat16以增加 decode 端點上有效的 KV cache 容量。 - 模型模式: 對於文本工作負載,使用
--language-model-only以停用多模態輸入並解鎖 attention 層中的 fused QK-norm + RoPE + gate 路徑。 - Prefill Batching: 在 prefill 端設定
--max-num-batched-tokens 16384(2× ISL) 以防止 prefill 成為瓶頸,這在高併發量下為每 GPU 的總 TPS 提供了約 +8% 的增長。 - 前端開銷 (Frontend Overhead): 設定
--stream-interval 100以減少高併發量下的前端開銷,儘管這會增加單個 token 的延遲。 - 監控: 使用
--api-server-count 1以啟用預設的統計數據日誌,用於識別瓶頸並監控 KV cache 利用率。
Sources
相關
- Dispatch
- Dispatch
- Dispatch
- Dispatch
- Dispatch