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

相關