跳到內容

vLLM V1

公告

我們已開始棄用 V0 版本。請參閱 RFC #18571 獲取更多詳情。

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

要停用 V1,請將環境變數設定為:VLLM_USE_V1=0,並透過 GitHub issue 告訴我們原因!

為何選擇 vLLM V1?

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

在 V0 成功的基礎上,vLLM V1 保留了 V0 中穩定且經過驗證的元件(例如模型、GPU 核心和實用程式)。同時,它顯著地重新架構了核心系統,包括排程器、KV 快取管理器、工作器、取樣器和 API 伺服器,以提供一個更具內聚性、可維護的框架,更好地適應持續的增長和創新。

具體而言,V1 旨在

  • 提供一個**簡單、模組化且易於修改的程式碼庫**。
  • 確保**高效能**,同時 CPU 開銷接近於零。
  • 將**關鍵最佳化**整合到統一架構中。
  • 透過預設啟用功能/最佳化,實現**零配置**。

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

欲瞭解更多詳情,請查閱 vLLM V1 部落格文章 《vLLM V1:vLLM 核心架構的重大升級》(釋出於 2025 年 1 月 27 日)。

本使用者指南概述了 vLLM V1 引入的一些已知**重要變更和限制**。團隊一直在積極努力將 V1 作為預設引擎,因此本指南將隨著 vLLM V1 支援更多功能而不斷更新。

當前狀態

對於每個專案,我們對 V1 支援的進展狀態分為以下幾類:

  • 🚀 **已最佳化**:接近完全最佳化,目前沒有進一步的工作計劃。
  • 🟢 **功能完備**:完全可操作,並持續進行最佳化。
  • 🚧 **WIP (開發中)**:正在積極開發中。
  • 🟡 **已計劃**:計劃未來實施(部分可能有已開放的 PR/RFC)。
  • 🟠 **已延遲**:在 V1 中暫時移除,但計劃稍後重新引入。
  • 🔴 **已棄用**:未計劃在 V1 中支援,除非有強烈需求。

注意

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

V1 排程器支援多種排程策略,包括先到先服務(FCFS)和基於優先順序的排程(請求根據分配的優先順序處理,FCFS 作為平局決勝者),可透過 `--scheduling-policy` 引數進行配置。

硬體

硬體 狀態
NVIDIA 🚀
AMD 🟢
TPU 🟢
CPU 🟢 (x86) 🟡 (MacOS)

注意

更多硬體平臺可能透過外掛支援,例如:

請檢視其相應的倉庫瞭解更多詳情。

模型

模型型別 狀態
僅解碼器模型 🚀 已最佳化
編碼器-解碼器模型 🟠 已延遲
嵌入模型 🟢 功能完備
Mamba 模型 🟢 (Mamba-2), 🟡 (Mamba-1)
多模態模型 🟢 功能完備

vLLM V1 目前排除了具有 SupportsV0Only 協議的模型架構。

提示

這對應於我們支援的模型列表中的 V1 列。

請參閱下文,瞭解尚未支援或在 V1 中有更多功能計劃的模型狀態。

嵌入模型

最初的基本支援現已可用。

隨後,我們將考慮使用基於 全域性 logits 處理器 隱藏狀態處理器,以實現在 V1 中使用相同引擎例項同時進行生成和嵌入。

Mamba 模型

使用選擇性狀態空間機制而非標準 Transformer 注意力機制的模型已部分支援。使用 Mamba-2 層(例如 Mamba2ForCausalLM)的模型已受支援,但使用較舊 Mamba-1 層(例如 MambaForCausalLMJambaForCausalLM)的模型尚未支援。請注意,這些模型目前在 V1 中需要停用字首快取。

結合了 Mamba-2 層和標準注意力層的模型也受支援(例如 BambaForCausalLMZamba2ForCausalLMNemotronHForCausalLMFalconH1ForCausalLMGraniteMoeHybridForCausalLM)。請注意,這些模型目前在 V1 中需要停用字首快取並使用 FlashInfer 注意力後端。

編碼器-解碼器模型

需要獨立編碼器和解碼器之間交叉注意力的模型(例如 BartForConditionalGenerationMllamaForConditionalGeneration)尚未支援。

功能

功能 狀態
字首快取 🚀 已最佳化
分塊預填充 🚀 已最佳化
LoRA 🚀 已最佳化
Logprobs 計算 🟢 功能完備
FP8 KV 快取 🟢 在 Hopper 裝置上功能完備 ( Pull Request #15191)
推測解碼 🚀 已最佳化
帶字首快取的提示 Logprobs 🟡 已計劃 ( RFC #13414)
結構化輸出備選後端 🟢 功能完備
請求級結構化輸出後端 🔴 已棄用
best_of 🔴 已棄用 ( RFC #13361)
按請求 Logits 處理器 🔴 已棄用 ( RFC #13360)
GPU <> CPU KV 快取交換 🔴 已棄用

注意

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

Logprobs 的語義變更

vLLM V1 支援 logprobs 和提示 logprobs。然而,與 V0 相比,存在一些重要的語義差異:

Logprobs 計算

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

支援帶取樣後調整的 logprobs 正在開發中,並將在未來更新中新增。

帶字首快取的提示 Logprobs

目前,提示 logprobs 僅在透過 --no-enable-prefix-caching 關閉字首快取時才受支援。在未來的版本中,提示 logprobs 將與字首快取相容,但即使命中字首快取,也會觸發重新計算以恢復完整的提示 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)。