vLLM Model Runner V2 版本說明 / 新功能

vLLM Model Runner V2 版本說明 / 新功能

vLLM 推出了 Model Runner V2(MRV2),這是一個從頭重新實作的模型執行器,透過 GPU 原生、async‑first 與模組化的架構提升吞吐量並降低延遲。

vLLM Model Runner V2 版本說明 / 新功能

vLLM 已宣布 Model Runner V2(MRV2),這是一個完整重新實作的 vLLM 模型執行器,旨在提升執行效率並減少技術負債。MRV2 引入模組化、GPU 原生、以及 async‑first 的核心,提升效能且不需要對現有面向使用者的 API 做任何變更。

GPU 原生輸入準備與持續批次處理

MRV2 透過將持續的請求狀態與每步的輸入張量解耦,並使用 Triton 核心將輸入準備直接移至 GPU,提升吞吐量。

在 vLLM V1 中,請求順序與區塊表布局緊密耦合,導致在新增或移除請求時需要複雜的重新排序。MRV2 用一個穩定的狀態表取代此機制,每個活躍請求在其生命週期內佔據固定的行。執行器接著使用 gather 操作為每一步產生正確排序的輸入區塊表。此設計消除像 CachedRequestState 這類冗餘備份狀態的需求,簡化了狀態管理。

透過將張量的建構(包括 input_idspositionsquery_start_locseq_lens)移至 GPU,MRV2 實現了:

  • 降低 CPU 開銷:最小化 Python 與 CPU 端的張量操作。
  • 簡化程式碼:移除 CPU 端操作所施加的限制。
  • 提升相容性:允許 GPU 常駐的準備直接消耗裝置端結果而無需同步,促進更好的 async 與推測解碼。

Async‑First 架構

MRV2 基於在所有支援的模型與功能中,CPU 與 GPU 之間零同步的假設構建。此 async‑first 設計透過允許排程器與工作者在 GPU 執行第 N 步時,同時準備第 N+1 步,最大化 GPU 的使用率。

此架構特別解決了先前在將 async 排程與推測解碼結合時的困難。因為輸入準備現在在裝置上進行,準備核心可以直接消耗 GPU 產生的拒絕抽樣結果。輸出透過獨立的 CUDA 串流非同步傳送至 CPU,完全將主要計算串流與主機端處理解耦。

Triton 原生抽樣改進

抽樣已使用最佳化的 Triton 核心重新實作,以提升記憶體效率與數值控制:

  • Gumbel-Max 抽樣:現在避免顯式的 softmax 具象化,並使用無狀態的核心內 RNG。
  • Top‑k logprobs:先辨識 top‑k logits,然後僅對選中的候選計算 logprobs,提升效率。
  • Prompt logprobs:透過更細粒度的分塊(包括單一提示內)降低記憶體使用量。
  • 推測解碼:在核心內使用 idx_mapping 間接層提升相容性,避免必須擴展請求狀態以匹配每個 logits 向量。

透過 ModelState 的模組化

為了支援多樣的模型架構而不讓共享執行路徑變得雜亂,MRV2 引入 ModelState 抽象。此介面定義了多模態嵌入、注意力元資料與 CUDA 圖形捕獲的模型特定邏輯,使主要執行器能專注於共通的執行路徑。

此模組化大幅降低了程式碼複雜度。原本超過 6,700 行的 gpu_model_runner.py 已拆分為多個較小的檔案,最大檔案現在不足 1,300 行。

效能基準測試

MRV2 帶來可觀的效能提升,特別是在主機端開銷成為瓶頸的情境下:

  • 吞吐量:在單一 GB200 GPU 上使用 Qwen3-0.6B 測試時,MRV2 達到每秒 25K 輸出 token,較 MRV1 的 16K 提升 56.2%
  • 延遲:在 4xGB200 GPU 上使用 GLM-4.7-FP8MTP=1 時,MRV2 由於在推測解碼期間消除 CPU‑GPU 同步點,使平均每 token 時間 (TPOT) 降低 6.3%

目前狀態與限制

截至 v0.18.0,MRV2 為實驗性功能,尚未完整支援所有特性。以下功能目前 不支援

  • 線性注意力模型(例如 Qwen3.5、Nemotron 3 Super)
  • 除 Eagle、Eagle3 與 MTP 之外的推測解碼方法
  • Logits 處理器、LoRA、EPLB 與 DBO

使用者可透過設定環境變數 export VLLM_USE_V2_MODEL_RUNNER=1 來啟用 MRV2。

Sources