SMALL ENGINE. BIG IDEAS.
让推理,
变得看得见。
一次读入,一步续写。
从一行数学,到一台推理引擎。
先亲手算出注意力,再追踪 token、调度与显存。十个逐步实验,把底层数学、真实 Qwen3 与 nano-vLLM 源码连成一条线。
一条路线,十个可停靠的实验。
01—03 数学与模型 · 04—06 请求与记忆 · 07—10 系统与验证
点击选幕,再用「下一步」逐帧看。播放不会自动开始;参数改变时,数字会立即重算。
从 prompt 到第一个新 token
先理解上下文,再逐步生成。
UNDER THE HOOD
一轮推理,四个角色。
动画里的动作,可以沿着这条路径
回到源码里找到。
谁上场?
Scheduler.schedule()选择本轮序列与阶段,决定处理多少个 token。
02 ↗放在哪里?
BlockManager分配、映射与共享 KV 块,管理引用计数。
03 ↗计算什么?
ModelRunner.run()组织输入、执行模型,得到 logits 并采样。
04 ↗接着做什么?
Scheduler.postprocess()更新缓存与序列,追加输出;结束时释放引用。
这是职责示意,不是严格的四个独立时间段:块管理会在调度与后处理阶段被调用。
THE IMPORTANT DETAILS
再往里看一层。
四个容易混淆,但值得分清的概念。
01KV Cache 究竟缓存了什么?+
Transformer 的每一层都会从当前隐藏状态投影出 Q、K、V。新 token 的 Q 与可见历史的 K 做注意力,再加权历史的 V。自回归生成时,旧 token 对应的 K / V 可以复用,因此不用每轮重新计算整个前缀。
这里省略缩放、softmax、位置编码、head 与 layer 维度。KV Cache 不缓存 Q;它也不是完整的隐藏状态、logits 或最终答案。
对应源码:layers/attention.py ↗02为什么需要块表,而不只是一个大数组?+
每条序列拥有一张逻辑块到物理块的映射表。序列看起来连续,物理块却不必连续;新增长度可以增配块,相同前缀可以共享块。这是分页式 KV 管理的核心直觉。
源码会先预留整个 KV 池;“分配 / 释放块”是改变请求对池内块的占用,不是每轮向 CUDA 申请 / 归还显存。固定块也有尾部未用槽位。它减少对连续大内存的依赖,但不意味着零碎片、无限显存或免费计算。显存不足时,源码还可能抢占序列、释放其引用并放回等待队列,之后重新 Prefill。第04幕调度实验假设显存充足;第06幕则用源码CPU trace单独追踪真实抢占过程。
对应源码:engine/block_manager.py ↗03FlashAttention、Paged KV、CUDA Graph 是一回事吗?+
不是。Paged KV 管理缓存的布局与共享;FlashAttention 是注意力计算的高效实现,能够利用 KV 缓存等输入;CUDA Graph 则把适用的 GPU 操作序列捕获下来以便重放,降低重复发射的开销。
这版 runner 在 Decode 的适用路径使用 CUDA Graph,而 Prefill 走 eager 路径。重放执行图仍会读取新输入、计算新结果,不是“重放旧答案”。本页动画没有模拟真实内核耗时,也不提供加速倍数。
对应源码:engine/model_runner.py ↗04nano-vLLM 与生产级 vLLM 的边界在哪里?+
这里讲的是 GeeeekExplorer/nano-vllm 的冻结实现,而不是把完整 vLLM 的所有行为缩成一张图。这版代码包含轻量推理引擎、Qwen3 模型实现、KV 块管理、前缀缓存、连续批处理和张量并行等机制。
尤其别把“支持 chunked prefill”读成任意混合调度:本页对应版本仅允许当轮首序列切块,Prefill 优先,单轮不会混合 Prefill 与 Decode。生产系统的功能与性能应另外对照所用版本实测。
查看冻结版本与 README ↗ACCURACY & SCOPE
哪些是真实机制,
哪些是教学简化?
形象,不以牺牲边界为代价。
当前已是自包含离线版。所有交互与实验附件均内置。
输入 token 写 KV 后再采样;Prefill 未完成不追加输出;每轮阶段一致;仅首序列可切块;完整前缀共享、末块不复用;引用计数归零后缓存可暂留;抢占保留token、必要时重新Prefill;Q/KV头的TP整除约束。
每块 4 个 token、最多 3 条序列、6 / 8 / 12 的 Prefill 预算,仅为看清过程。源码默认块大小为 256,且要求为 256 的倍数。字符与词块不是实际tokenizer结果。数学toy不是训练权重,性能假想结构不是Qwen3配置。
不加载模型、不运行GPU;token旅程与调度演示的输出为预设,数学幕用手工矩阵计算;动画时长不对应真实耗时。KV图跨层抽象,真实维度另列;CPU trace不代表GPU执行。按最新要求取消真实浏览器与登录验收,仅验证静态、数学、源码和模拟交互。
核验于 2026-10-21,冻结提交 bb823b3e0698 ↗(2026-04-26)。上方源码入口固定到同一提交。未来版本可能改变行为。