vLLM V1¶
V1 现在已默认启用,适用于所有支持的用例;我们将逐步将其推广到计划支持的每个用例。请在 GitHub 或 vLLM 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 缓存 | |
推测解码 | |
带前缀缓存的 Prompt Logprobs | |
结构化输出替代后端 | |
嵌入模型 | |
Mamba 模型 | |
编码器-解码器模型 | |
请求级结构化输出后端 | |
best_of | |
逐请求 Logits 处理器 | |
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
)。
有关支持的模型的完整列表,请参阅支持的模型列表。