推理与部署

vLLM 为什么快?PagedAttention 解决了什么问题?

91学AI·2026/7/26·6 阅读

考察点

vLLM 已经是推理框架事实标准,这道题考的是你是否理解它快的根本原因,而不是"因为它做了分页"这种名词复述。面试官想听清三件事:传统 KV Cache 显存管理浪费在哪、PagedAttention 怎么借操作系统的虚拟内存思想解决、以及 PagedAttention 之外 vLLM 还有哪些提速手段。追问常落在 block 大小取舍、prefix caching、和 TensorRT-LLM/SGLang 的对比。

参考答案

先看清问题:显存浪费比算力更致命

在 vLLM 之前,以 FasterTransformers 为代表的框架对 KV Cache 采用按最大长度连续预分配:一个请求进来,不管实际生成多少,先按 max_seq_len 切一整块连续显存。这造成两种浪费。一是预留浪费:请求实际生成长度远小于上限时,尾部空间白占着,论文里统计只有 20%-40% 的槽位真正存了 KV;二是碎片浪费:请求长短不一,分配释放后留下大小不一的洞,连续分配要求导致这些洞拼不起来(外部碎片)。结果就是 KV Cache 名义上占了大半显存,真正利用率很低——而 KV Cache 空间直接决定能同时跑多少请求(batch size),浪费显存就是直接砍吞吐。

PagedAttention:把虚拟内存搬进 KV Cache

PagedAttention 的做法几乎是操作系统虚拟内存的翻版:

  • 把 KV Cache 切成固定大小的 block(默认一个 block 存 16 个 token 的 KV),物理显存里 block 可以离散分布,不要求连续。
  • 每个请求维护一张 block table(类似页表),记录逻辑上第几个 block 对应物理显存里的哪个 block;请求增长时按需逐个申请 block,不再预分配最大长度。
  • 注意力 kernel 改写成按 block 索引去读 KV,逻辑连续、物理离散。

效果:预留浪费没了(按需分配),外部碎片没了(块大小统一),只剩最后一个 block 没填满的内部碎片,平均浪费不到 4%。省出来的显存全部可以拿去开大 batch,吞吐直接上一个量级——论文报告相对 FasterTransformers 有 2-4 倍吞吐提升, Orca 类基线对比更高。

分页还顺手带来两个红利。Copy-on-write 共享:beam search、parallel sampling 里多个序列共享前缀,对应 block 记引用计数,只有分叉时才复制,前缀部分零拷贝。Prefix caching:system prompt 这类跨请求公共前缀的 KV block 可以缓存复用(后来演进成 RadixAttention 式的 radix tree 管理,APC 功能),多轮对话和少样本场景 prefill 算力省得明显。

PagedAttention 之外,vLLM 还做了什么

  • Continuous batching:迭代级调度,一个请求生成完立刻换新的进来,不等整批结束,GPU 不空转。这是吞吐提升的另一支柱,单独是道面试题。
  • 调度器与抢占:显存不够时支持换出(swap 到 CPU 内存)或重计算(recompute)策略,保证高优先级请求。
  • CUDA graph:decode 阶段 batch 形状相对固定,用 CUDA graph 消掉 kernel launch 的 CPU 开销,小 batch 下延迟收益明显。
  • 生态:OpenAI 兼容 API、tensor parallel、量化(GPTQ/AWQ/FP8)、投机采样、多 LoRA 都集成了,工程完备性是它胜出的重要原因。

面试时把逻辑串成一句话最有力:LLM 推理的瓶颈是显存容量和带宽而不是算力,vLLM 用分页把显存利用率打满,用 continuous batching 把空转消灭,所以快。

一个常被问的细节:block 大小怎么选

block 大,页表小、kernel 访存连续性好,但内部碎片和共享粒度变差;block 小则相反。16 是经验折中,一般不用动,但被问到要知道这是碎片和访存效率的权衡。

可能的追问

  • PagedAttention 会不会引入额外开销? 会,block table 查表和非连续访存让 kernel 略复杂,但相比省下的显存换到的大 batch,净收益巨大;这也是 kernel 实现(FlashAttention 融合分页读取)不断优化的原因。
  • vLLM 和 TensorRT-LLM 怎么选? TRT-LLM 在固定模型固定硬件上做图优化和 kernel 调优,极限性能更好但工程门槛高;vLLM 迭代快、模型覆盖广、API 友好,多数业务先 vLLM,榨到极限再考虑 TRT-LLM。
  • 显存满了 vLLM 怎么处理新请求? 排队等调度;运行中显存不足时触发抢占,低优先级请求 KV 换出到 CPU 或丢弃重算,恢复后继续。

评论 (0)

暂无评论,快来抢沙发吧!

91学AI

© 2026 91学AI · 按岗位学 AI 与大数据. All rights reserved.