跳过内容

vLLM V1

V1 现在已默认启用,适用于所有支持的用例;我们将逐步将其推广到计划支持的每个用例。请在 GitHubvLLM Slack 中分享任何反馈。

要禁用 V1,请设置环境变量:VLLM_USE_V1=0,并通过 GitHub issue 告诉我们原因!

为何选择 vLLM V1?

vLLM V0 成功支持了广泛的模型和硬件,但随着新功能独立开发,系统变得越来越复杂。这种复杂性增加了集成新功能的难度并引入了技术债务,表明需要一种更精简和统一的设计。

vLLM V1 在 V0 成功的基础上,保留了 V0 中稳定且经过验证的组件(例如模型、GPU 内核和工具)。同时,它对核心系统进行了重大重构,涵盖调度器、KV 缓存管理器、工作器、采样器和 API 服务器,以提供一个更具内聚性、更易维护的框架,从而更好地适应持续增长和创新。

具体来说,V1 旨在实现

  • 提供一个简单、模块化且易于修改的代码库
  • 确保高性能,且 CPU 开销接近于零。
  • 关键优化整合到一个统一的架构中。
  • 通过默认启用功能/优化,实现零配置

升级到 V1 核心引擎后,我们看到了显著的性能提升,特别是在长上下文场景下。请参阅性能基准(待添加)。

有关更多详细信息,请查阅 vLLM V1 博客文章 vLLM V1:vLLM 核心架构的重大升级(发布于 2025 年 1 月 27 日)。

本持续更新的用户指南概述了 vLLM V1 引入的一些重要的已知变更和限制。团队一直在积极努力将 V1 作为默认引擎,因此本指南将随着 vLLM V1 支持更多功能而不断更新。

支持概览

硬件

硬件 状态
NVIDIA 🚀 原生支持
AMD 🚧 进行中
TPU 🚧 进行中
#### 功能 / 模型
功能 / 模型 状态
前缀缓存 🚀 已优化
分块预填充 🚀 已优化
LoRA 🚀 已优化
Logprobs 计算 🟢 可用
多模态模型 🟢 可用
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})来为每个请求动态分配固定的 token 预算,从而以相同的方式处理 prompt 和输出 token,这使得分块预填充、前缀缓存和推测解码等功能得以实现,而无需严格区分预填充和解码阶段。

语义变更与已弃用功能

Logprobs

vLLM V1 支持 logprobs 和 prompt logprobs。然而,与 V0 相比,存在一些重要的语义差异

Logprobs 计算

V1 中的 Logprobs 现在在从模型的原始输出计算出来后立即返回(即在应用温度缩放或惩罚调整等任何 logits 后处理之前)。因此,返回的 logprobs 不反映采样期间使用的最终调整后的概率。

支持带有采样后调整的 logprobs 功能正在开发中,将在未来的更新中添加。

带前缀缓存的 Prompt Logprobs

目前,prompt logprobs 仅在前缀缓存通过 --no-enable-prefix-caching 关闭时才支持。在未来的版本中,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 中支持,但其优化工作仍在进行中。

  • 推测解码:目前,V1 中仅支持基于 n-gram 的推测解码。后续将进行工作以支持其他类型的推测解码(例如,参见 PR #13933)。我们将优先支持 Eagle、MTP,而不是基于草稿模型的推测解码。

  • 多模态模型:V1 几乎与 V0 完全兼容,只是目前不支持交错模态输入。有关即将推出的功能和优化的状态,请参阅此处

待支持功能

  • 结构化输出替代后端:计划支持结构化输出替代后端(outlines, guidance)。V1 目前仅支持 xgrammar:no_fallback 模式,这意味着如果输出 schema 不被 xgrammar 支持,则会报错。结构化输出的详细信息可以在此处找到。

待支持模型

vLLM V1 目前排除了带有 SupportsV0Only 协议的模型架构,并且大多数模型属于以下类别。最终将添加对这些模型的 V1 支持。

嵌入模型
V1 中已提出隐藏状态处理器(RFC #12249,基于全局 logits 处理器 RFC #13360)来取代单独的模型运行器,以实现在同一引擎实例中同时进行生成和嵌入。这仍处于计划阶段。

Mamba 模型
尚不支持使用选择性状态空间机制(而非标准 Transformer 注意力)的模型(例如 MambaForCausalLM, JambaForCausalLM)。

编码器-解码器模型
vLLM V1 目前针对仅解码器 Transformer 进行了优化。尚不支持需要在单独的编码器和解码器之间进行交叉注意力的模型(例如 BartForConditionalGeneration, MllamaForConditionalGeneration)。

有关支持的模型的完整列表,请参阅支持的模型列表