Skip to content

12 · 综合项目:做一次可验证的推理引擎改造

12 · 综合项目:做一次可验证的推理引擎改造

最终目标不是“读完”,而是能提出并验证一个改动

选择一个足够小、能测量的课题:

  1. 可观察性:为每轮 Scheduler 输出结构化 trace。
  2. 调度实验:调整 Prefill / Decode 优先级或 token 预算策略。
  3. 缓存实验:统计 Prefix Cache hit blocks 与节省 token 数。
  4. 采样扩展:加入 top-k,并写概率单元测试。
  5. 文档贡献:为一个核心模块补充架构图、形状表和最小示例。

推荐的实验闭环

text
问题 → 假设 → 最小改动 → 正确性测试 → 性能测量 → 结论 → 回滚条件

不要从“我要让它更快”开始。一个可验证假设应该像:

在共享长 system prompt 的工作负载中,记录 Prefix Cache 命中率后,我预计 Prefill token 工作量会下降;但若请求前缀高度离散,维护缓存索引不会带来明显收益。

Benchmark 最低要求

  • 固定 commit、模型、权重精度和硬件。
  • 记录 Python、PyTorch、CUDA、Triton、FlashAttention 版本。
  • 明确输入长度、输出长度与并发分布。
  • 先 warmup,再多次测量。
  • 同时报吞吐和延迟,不只挑最好的一次。
  • 修改前后使用同一测试脚本。

上游 README 的示例 benchmark 使用 Qwen3-0.6B、256 条序列,并报告 Nano-vLLM 与 vLLM 的总输出 token、耗时和吞吐。这个数字只代表特定硬件与配置,不应直接推广到其他机器。

推荐项目:Scheduler Trace Viewer

schedule()postprocess() 增加可选事件输出:

json
{
  "step": 12,
  "phase": "decode",
  "waiting": 3,
  "running": 16,
  "scheduled_seq_ids": [1, 4, 8],
  "batched_tokens": 3,
  "free_blocks": 120
}

然后做一个本地 HTML 页面读取 JSONL,把 waiting、running、token budget 和 block 使用率画成时间线。它不会改变核心算法,却能证明你已经理解跨模块数据流,也是非常适合作品集与上游 PR 的贡献。

完成定义

  • [ ] 能解释一次请求的完整生命周期。
  • [ ] 能区分 Prefill 与 Decode 的性能特征。
  • [ ] 能手算 block table 到 slot mapping。
  • [ ] 能指出 Prefix Cache 的命中边界。
  • [ ] 能在 Eager 模式定位问题。
  • [ ] 能设计公平的 benchmark。
  • [ ] 能提交一份包含证据的 README 或 PR。
HTML INTERACTIVE LAB12 · 综合项目:做一次可验证的推理引擎改造
单独打开 ↗
课后习题等待完成

一个可信的性能优化结论至少应包含什么?

动手任务

选择“Scheduler Trace Viewer”或其他一个小课题,填写问题、假设、指标、修改点、测试方法与回滚条件,形成一页实验计划。

社区教程,与 nano-vLLM 上游项目无官方隶属关系。