vLLM V1 使用者指南#

V1 現在已預設啟用,適用於所有支援的用例,我們將逐步為計劃支援的每個用例啟用它。請在 GitHubvLLM Slack 中分享任何反饋。

要停用 V1,請設定環境變數為:VLLM_USE_V1=0,並向我們傳送 GitHub issue 分享原因!

為何選擇 vLLM V1?#

vLLM V0 成功支援了廣泛的模型和硬體,但隨著新特性的獨立開發,系統變得越來越複雜。這種複雜性使得整合新功能變得更加困難,並引入了技術債務,揭示了對更精簡和統一設計的需求。

在 V0 成功的基礎上,vLLM V1 保留了 V0 中穩定且經過驗證的元件(例如模型、GPU 核心和實用程式)。與此同時,它對核心系統進行了重大架構重構,涵蓋了排程器、KV 快取管理器、worker、取樣器和 API 伺服器,以提供一個有凝聚力、可維護的框架,更好地適應持續增長和創新。

具體來說,V1 旨在

  • 提供一個簡單、模組化且易於 hack 的程式碼庫

  • 確保高效能,接近零 CPU 開銷。

  • 將關鍵最佳化整合到一個統一的架構中。

  • 透過預設啟用特性/最佳化,實現 零配置

我們看到升級到 V1 核心引擎帶來了顯著的效能提升,尤其是在長上下文場景中。請參閱效能基準(待新增)。

有關更多詳細資訊,請檢視 vLLM V1 部落格文章 vLLM V1:vLLM 核心架構的重大升級(釋出於 2025 年 1 月 27 日)。

這份活生生的使用者指南概述了 vLLM V1 引入的一些已知的重要更改和限制。團隊一直在積極工作,使 V1 成為預設引擎,因此本指南將隨著更多特性在 vLLM V1 上得到支援而不斷更新。

支援概覽#

硬體#

硬體

狀態

NVIDIA

🚀 原生支援

AMD

🚧 開發中

TPU

🚧 開發中

特性 / 模型#

特性 / 模型

狀態

字首快取

🚀 已最佳化

分塊預填充

🚀 已最佳化

Logprobs 計算

🟢 功能正常

LoRA

🟢 功能正常 (PR #13096)

多模態模型

🟢 功能正常

FP8 KV 快取

🟢 在 Hopper 裝置上功能正常 (PR #15191)

推測解碼

🚧 開發中 (PR #13933)

帶字首快取的 Prompt Logprobs

🟡 計劃中 (RFC #13414)

結構化輸出備用後端

🟡 計劃中

嵌入模型

🟡 計劃中 (RFC #12249)

Mamba 模型

🟡 計劃中

編碼器-解碼器模型

🟡 計劃中

請求級結構化輸出後端

🔴 已棄用

best_of

🔴 已棄用 (RFC #13361)

按請求 Logits 處理器

🔴 已棄用 (RFC #13360)

GPU <> CPU KV 快取交換

🔴 已棄用

  • 🚀 已最佳化:接近完全最佳化,目前沒有進一步工作計劃。

  • 🟢 功能正常:功能齊全,正在進行最佳化。

  • 🚧 開發中:正在積極開發中。

  • 🟡 計劃中:計劃在未來實施(有些可能已開啟 PR/RFC)。

  • 🔴 已棄用:除非有強烈需求,否則不計劃在 v1 中支援。

注意:vLLM V1 的統一排程器透過使用簡單的字典(例如,{request_id: num_tokens})動態分配每個請求的固定令牌預算,從而以相同的方式處理 prompt 和輸出令牌,從而實現分塊預填充、字首快取和推測解碼等功能,而無需嚴格區分預填充和解碼階段。

語義更改和已棄用特性#

Logprobs#

vLLM V1 支援 logprobs 和 prompt logprobs。但是,與 V0 相比,存在一些重要的語義差異

Logprobs 計算

V1 中的 Logprobs 現在在從模型的原始輸出計算出來後立即返回(即,在應用任何 logits 後處理(例如溫度縮放或懲罰調整)之前)。因此,返回的 logprobs 不反映取樣期間使用的最終調整後的機率。

對帶有後取樣調整的 logprobs 的支援正在進行中,將在未來的更新中新增。

帶字首快取的 Prompt Logprobs

目前,僅當透過 --no-enable-prefix-caching 關閉字首快取時,才支援 prompt logprobs。在未來的版本中,prompt logprobs 將與字首快取相容,但即使在字首快取命中時,也會觸發重新計算以恢復完整的 prompt logprobs。有關詳細資訊,請參閱 RFC #13414

已棄用特性#

作為 vLLM V1 中主要架構重構的一部分,幾個舊版特性已被棄用。

取樣特性

  • best_of:此特性由於使用有限已被棄用。有關詳細資訊,請參閱 RFC #13361

  • 按請求 Logits 處理器:在 V0 中,使用者可以傳遞自定義處理函式以按請求調整 logits。在 vLLM V1 中,此特性已被棄用。相反,設計正在轉向支援全域性 logits 處理器,團隊正在積極為此特性進行未來的釋出。有關詳細資訊,請參閱 RFC #13360

KV 快取特性

  • GPU <> CPU KV 快取交換:藉助新的簡化核心架構,vLLM V1 不再需要 KV 快取交換來處理請求搶佔。

結構化輸出特性

  • 請求級結構化輸出後端:已棄用,帶有回退的備用後端(outlines、guidance)正在開發中。

正在進行的特性和模型支援#

儘管我們已經在 vLLM V1 中重新實現並部分優化了 V0 中的許多特性和模型,但某些特性的最佳化工作仍在進行中,其他特性仍不受支援。

待最佳化的特性#

這些特性已在 vLLM V1 中支援,但其最佳化仍在進行中。

  • LoRA:LoRA 在 vLLM V1 上功能正常,但其效能不如 V0。團隊正在積極努力提高其效能(例如,請參閱 PR #13096)。

  • 推測解碼:目前,V1 中僅支援基於 ngram 的推測解碼。後續將進行工作以支援其他型別的推測解碼(例如,請參閱 PR #13933)。我們將優先支援 Eagle、MTP,而不是基於草稿模型的推測解碼。

  • 多模態模型:V1 幾乎完全相容 V0,只是尚不支援交錯模態輸入。有關即將推出的特性和最佳化狀態,請參閱此處

待支援的特性#

  • 結構化輸出備用後端:計劃支援結構化輸出備用後端(outlines、guidance)。V1 目前僅支援 xgrammar:no_fallback 模式,這意味著如果 xgrammar 不支援輸出模式,則會報錯。有關結構化輸出的詳細資訊,請訪問此處

待支援的模型#

vLLM V1 目前排除了具有 SupportsV0Only 協議的模型架構,並且大多數屬於以下類別。最終將新增對這些模型的 V1 支援。

嵌入模型
不再使用單獨的模型執行器、隱藏狀態處理器 RFC #12249,而是提出了基於全域性 logits 處理器 RFC #13360 的方案,以在 V1 中使用相同的引擎例項同時進行生成和嵌入。它仍處於計劃階段。

Mamba 模型
尚不支援使用選擇性狀態空間機制(而不是標準 Transformer 注意力機制)的模型(例如,MambaForCausalLM, JambaForCausalLM)。

編碼器-解碼器模型
vLLM V1 目前針對僅解碼器 Transformer 進行了最佳化。尚不支援需要在單獨的編碼器和解碼器之間進行交叉注意力的模型(例如,BartForConditionalGeneration, MllamaForConditionalGeneration)。

有關支援模型的完整列表,請參閱支援的模型列表