vLLM 推理内核深度解析
深入 LLM 推理引擎的内核实现。
同样一张 A100,同样一个 7B 模型,为什么 vLLM 的吞吐能比朴素实现高一个数量级?答案不在模型里,在显存怎么切、请求怎么排、一拍里放多少 token 这三件事上。
本专栏基于 vLLM v0.8.x(V1 引擎架构) 源码,从一个推理请求的完整旅程出发,由外到内拆开这台引擎。
flowchart LR
REQ[请求] --> API[API Server]
API --> EC
subgraph EC [EngineCore · 三进程拓扑]
direction TB
SCH[Scheduler<br/>统一 token budget] --> KV[KV Cache Manager<br/>Block 分配 · 引用计数]
KV --> WK[Worker / Executor]
end
WK --> MR[Model Runner<br/>前向计算]
MR --> ATT[PagedAttention Kernel<br/>离散 Block 上算注意力]
MR --> SMP[Sampling]
SMP --> OUT[输出]
SCH -.复用.-> PC[Prefix Cache]
SCH -.拆分.-> CP[Chunked Prefill]
MR -.加速.-> SD[Speculative Decoding]
为什么是 V1。 V0 到 V1 有七个结构性变革,不是重构而是换骨架——调度器从"prefill 与 decode 分家"变成统一的 token budget,KV Cache 从整块变成引用计数共享。拿 V0 时代的理解去读今天的源码,读到的是两个系统。
读完你能做到什么
- 画出一个请求从进入到吐字的完整路径。 三进程拓扑为什么这样拆、五大子系统的边界在哪、四类跨边界 DTO 各自承载什么(第1章 架构总览、第2章 EngineCore)。
- 讲清 PagedAttention 到底解决了什么。 从 1961 年的分页思想讲到 Block Table 这本"地址簿",再到在离散 Block 上做 Online Softmax 的内核实现(第4章 PagedAttention)。
- 管理显存到字节。
KVCacheBlock的元数据、空闲队列一个结构三种角色、"共享满块不共享半块"的引用计数协议、显存预算怎么"试探"出来(第5章 KV Cache)。 - 调对 chunked prefill 和 prefix cache。
num_computed_tokens为什么是断点续传的唯一状态、被抢占后如何靠 prefix cache 找回、chunk_size的四条调优曲线,以及五种常见误区(第10章 前缀缓存、第11章 Chunked Prefill)。 - 判断投机解码和量化值不值得开。 各自吃掉什么、换回什么,以及它们与调度器的相互作用(第12章 投机解码、第13章 量化)。
- 把引擎铺开到多卡与多模态。 分布式执行、LoRA 多适配器、多模态输入路径(第14章 分布式、第15章 多模态、第16章 LoRA)。
这个专栏的讲法
先给地图,再钻细节。 第 1 章就把 vllm/ 根目录 29 个子系统列成账本、给出从 LLMEngine 到 Kernels 的架构全景图、17 章与架构的精确映射,还有"读源码的三个切入姿势"。你不会读到一半不知道自己在哪。
每个机制都落到源码符号上。 KVCacheBlock、FreeKVCacheBlockQueue、SpecializedManager、num_computed_tokens——讲的是这些东西怎么写的、为什么这么写,不是"vLLM 使用了分页机制"。
给可操作的调优结论。 chunk_size 的调优曲线、生产环境该测哪些指标、组合优化时谁和谁会打架。读完能上手调,不是只能点头。
适合谁读
- 推理优化 / AI Infra 工程师。 你要对吞吐和显存负责,需要知道每个旋钮背后连着什么。
- LLM 应用开发者。 你在选型或部署推理服务,想理解性能数字是怎么来的。
- 想读懂现代推理引擎源码的人。 vLLM 是这条线上最值得读的一份公开代码。
不适合:找 vLLM 部署教程或 API 用法的读者——那些官方文档写得很好,这里讲的是它内部为什么这样设计。
源码版本
本专栏的源码引用以 vllm-project/vllm 的 v0.8.5 为准。选这一支是因为 V1 引擎在 v0.8.x 正式成为默认架构——它代表了 vLLM 团队对「推理引擎该长什么样」这个问题的当时答案:
| 仓库 | 版本 | Git Commit |
|---|---|---|
| vllm-project/vllm | v0.8.5 | ba41cc9 |
git clone https://github.com/vllm-project/vllm.git
cd vllm && git checkout v0.8.5
vLLM 的迭代节奏很快,vllm/v1/ 目录在后续版本里持续重构;正文以模块职责和函数名为锚点,行号仅供定位。涉及 V0 与 V1 差异的地方,章内会分别标注。
目录
开篇
第一篇:全景
第二篇:引擎核心
第三篇:执行层
第四篇:性能优化
第五篇:分布式与工程
版权声明
本专栏内容为 杨艺韬 版权所有,保留一切权利。未经书面许可,不得全文或大段转载、改编、翻译,或用于任何商业用途(含以本专栏内容训练模型、生成衍生课程或商品)。
欢迎分享本专栏的链接。引用少量内容用于评论、教学或研究时,请署名 杨艺韬 并附上原文链接。