离线速查 / 2026-11-08
三框架源码对照
同一个问题,用三种系统规模回答。所有实现描述固定到本地vendor提交,不代表最新版。
| 问题 | nano-vllm bb823b3 | vLLM ef9339e | DeepInfer a679bb8 |
|---|---|---|---|
| 请求闭环 | LLMEngine.step → schedule/run/postprocess | EngineCore → Executor → Worker → Runner → output update | Python engine → pybind C++ Scheduler → Worker |
| 本轮组批 | 有prefill先返回;否则decode | running优先,按token预算追赶,可混chunk | NORMAL通过DP投票选择prompt/decode阶段 |
| 状态风险 | token IDs比cached常多1 | computed含乐观在途,拒绝draft须回退 | cache+inflight+q构成k长度;ZOS延后回填 |
| KV对象 | 一个标准布局,块表+hash链 | KV group、hash extras、块池与传输状态 | 模型专用缓存/状态;完整外部KV服务另需集成 |
| 执行 | Qwen3、FlashAttention;decode graph | 多backend;FULL能力取决于backend | 专用内核、Attention DP/CP、MoE EP/EPLB |
| 适合本机练习 | WSL单卡模型与指标改动 | 支持模型的单卡对照实验 | 固定支持矩阵不覆盖4070 Ti;读码与CPU算例 |
按问题找最短入口
- 输入张量怎么来:nano prepare_prefill → vLLM _prepare_inputs → DeepInfer metadata。
- 调度数如何纠正:nano postprocess → vLLM update → DeepInfer commit。
- 缓存生命周期:nano BlockManager → vLLM BlockPool。
- 模型特化:EPLB policy → MTPVarlen。
读代码时的四问
- 这个量描述已知token、已调度工作、已完成KV,还是已经提交的输出?
- 数组索引是请求、逻辑token、物理slot、query head,还是KV head?
- 这一步改变哪个对象的所有权?谁有权回收它?
- 这是当前代码、注释中的设计意图、部署说明,还是教学简化?