Vllm

Vllm

vLLM 引擎解剖

vLLM 引擎解剖 vLLM 是部署最广泛的开源大语言模型推理引擎,它的核心思想几乎被后来所有的 serving 框架默默借鉴。本文从内到外拆解这个引擎:预填充/解码的执行模型及其时延指标、分页式 KV 缓存(PagedAttention)、当前 V1 引擎的统一调度器、抢占与前缀缓存,以及 vLLM 为生产监控暴露的 Prometheus 指标。最后讨论它与邻近系统——FlashAttention、SGLang 与分离式预填充——的边界,并给出在单块 TITAN RTX 上如实复现本文内容的指南。 文中一切内容均引自一手来源(PagedAttention 论文、vLLM 官方文档与仓库,以及相邻系统的原始论文),信息截至 2026-08-09;文末附有带日期的版本说明。本文作者没有运行任何基准测试:文中每个性能数字都引自测量它的原始来源。 预填充、解码与三个时延指标 Transformer 的文本生成是自回归的:模型一次只产出一个词元,每个新词元都要与之前的所有词元做注意力计算。serving 系统把这一过程切成两个形态截然不同的阶段: 预填充(prefill)处理提示词。长度为 $P$ 的提示词在一次(或少数几次)前向传播中并行跑完整个模型,每个提示词元组的键(key)和值(value)都被计算出来并写入 KV 缓存。预填充是计算密集型的,每一层都要全量计算。 解码(decode)逐个生成输出词元。每一步只对最新词元跑一次模型,此前所有词元的键/值直接从 KV 缓存读取。解码是内存带宽密集型的:每一步几乎不重复计算注意力状态,但必须把整份 KV 缓存流过 GPU。 这两个阶段对应着所有 serving 基准测试都会引用的三个时延数字: TTFT——首词元时延(time to first token):从请求提交(vLLM 从被调度算起)到返回第一个生成词元。它由预填充主导。 ITL——词元间隔时延(inter-token latency):解码阶段相邻输出词元之间的时间,即解码阶段每步的时延。 TPOT——每输出词元耗时(time per output token):解码阶段产出一个输出词元的平均时间。vLLM 官方的参考 Grafana 面板把 vllm:inter_token_latency_seconds 指标当作 TPOT 使用,因此实践中两者经常混用。 图 1 把它们放在一条时间线上。TTFT 期间请求是不可交互的,所以交互型用户最关心 TTFT;吞吐型负载关心的是 ITL/TPOT,以及有多少请求在并发解码。 请求到达 首词元 末词元 | | | |<------- 预填充 -------->|<---- 解码(每步一个词元)---->| |<------- TTFT --------->| |<-- ITL -->|<-- ITL -->|<-- ITL -->| |<--------- 生成时间 --------->| |<---------------------- 端到端请求时延 -------------------->| 图 1 —— TTFT、ITL 与 TPOT 在请求时间线上的位置。TTFT 覆盖预填充;ITL/TPOT 描述解码阶段。定义遵循 vLLM 的 per-request 指标文档。

字体
阴影
滤镜
圆角
主题色