mini-infer

psmarterMIT更新放缓

从零手写的 LLM 推理引擎,实现分页 KV 缓存、连续批处理、投机解码和 CUDA 图等优化,并提供 OpenAI 兼容服务接口。

LLM inference engine from scratch — paged KV cache, continuous batching, chunked prefill, prefix caching, speculative decoding, CUDA graph, tensor parallelism, OpenAI-compatible serving

v0.22.0发布于 2026-03-28 03:19 UTC220star11fork同步于 2026-11-07 07:30 UTC

怎么上手

由 README 提炼,执行前请确认
pip install -e ".[serve,dev]"
mini-infer-serve --dry-run --port 8000
硬件要求按 README 说明

README 标注环境为 CUDA 12.1 与 RTX 4090;benchmark 数据基于 Qwen2.5-7B 单卡 RTX 4090。未给出具体显存数值,也未说明 CPU 推理支持。

需要 CUDA多卡 / 张量并行
下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

从零实现的 LLM 推理引擎,带 PagedAttention 与 OpenAI 兼容服务,适合学习与机制验证

从零手写的 LLM 推理引擎,实现分页 KV 缓存、连续批处理、投机解码和 CUDA 图等优化,并提供 OpenAI 兼容服务接口。

核心能力

  • 用 flash_attn block_table 实现真 PagedAttention
  • 四队列调度器支持 continuous batching 与 chunked prefill
  • block 级哈希加 LRU 做前缀缓存降低 TTFT
  • 提供 OpenAI 兼容 HTTP 接口与 /healthz 健康检查
  • 支持 --dry-run 无模型权重启动验证接口

容易踩的坑

真实模型需自行准备 Qwen2.5-7B-Instruct 权重并传 --model 路径;flash-attn 2.5.9.post1 要求 block_size 为 256 的倍数;speculative decoding、CUDA Graph、TP 等为独立 benchmark,未接入默认 serving 路径。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

2 个版本v0.22.0
  1. v0.22.0v0.22.0 — HTTP serving benchmark最新正式版2026-03-28 · 2026-03-28 03:19 UTC

    v0.22.0

    • 新增 HTTP 服务基准测试:并发吞吐量从 55.7 提升至 219.1 tok/s(1→8 个客户端,Qwen2.5-7B,RTX 4090)

    • 新增包含实际测量数据的 benchmarks/results/server_benchmark.json 文件

    • 修复 mini_infer/ 目录下的所有 ruff lint 错误(CI 测试已通过)

    • 为 mini-infer-serve CLI 添加 --use-cuda-graph 和 --quant-mode 标志

    • 为 HTTP 服务器添加 /healthz 端点

    • 添加 Dockerfile 和 .github/workflows/lint.yml 文件

    • 重构 README:英文版简洁明了,采用三级能力分类,并添加“如何阅读”导航

  2. v0.21.0pre-release2026-03-28 · 2026-03-28 03:02 UTC
    查看更新说明

    首个版本发布。实现了分页键值缓存、连续批处理、

    分块预填充、前缀缓存、推测性解码、CUDA 图、

    张量并行、MoE 专家并行以及与 OpenAI 兼容的 HTTP 服务。

    每项机制均已独立地与 HuggingFace Transformer 进行基准测试。

    Full Changelog: https://github.com/psmarter/mini-infer/compare/v0.21.0...v0.21.0

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    mini-infer

    LLM inference engine built from scratch — paged KV cache, continuous batching, chunked prefill, prefix caching, speculative decoding, CUDA graph, tensor parallelism, and OpenAI-compatible HTTP serving. Each mechanism has a dedicated benchmark with quantitative results. Core serving path reaches 100% of HF baseline throughput at batch=8; concurrent HTTP throughput scales 3.9× (1→8 clients, 55.7→219.1 tok/s). Ships with dry-run mode (no model weights needed), /healthz, Docker, and CI.

    从零实现的 LLM 推理引擎。核心 serving 路径(PagedAttention + Continuous Batching + OpenAI HTTP API)在 Qwen2.5-7B 达到 HF Transformers 100% 吞吐,支持 --dry-run 无权重启动验证。

    CI lint Python PyTorch CUDA License

    demo


    立即验证(无需模型权重)

    pip install -e ".[serve,dev]"
    mini-infer-serve --dry-run --port 8000
    curl http://localhost:8000/healthz   # → {"status":"ok","model":"dry",...}
    

    核心成果

    主 serving 路径(mini-infer-serve 默认启动)

    技术关键数据
    Continuous Batching HTTP API(AsyncEngine + OpenAI 兼容)并发 1→8 吞吐 55.7→219.1 tok/s(3.9×,Qwen2.5-7B,RTX 4090)
    True PagedAttention(flash_attn block_table)batch=8 吞吐达到 HF Transformers 100%(406 tok/s)
    Chunked Prefill混合 serving 场景 ITL spike 降低 57%–67%
    Prefix Caching(block-level hash + LRU)共享前缀 TTFT −22%

    独立 benchmark 实验(功能完整,未接入默认 serving 路径)

    技术关键数据
    Speculative Decoding(0.5B draft + 7B target)acceptance rate 55.85%
    CUDA Graph(decode_batch 静态捕获)1.5B bs=1 decode 延迟 −28.9%
    Flash Decoding(Triton split-K)seq=4096 延迟 3.31× vs 标准 Triton,SM 利用率 9%→103%
    Tensor Parallelism(NCCL all-reduce,Megatron-LM 风格)TP=2 greedy 输出与单卡完全一致(见注 ¹)
    PD 解耦(同机双进程)TTFT 三段分解:prefill 12.3ms / transfer ≈14.7ms / decode 519ms

    原型实现(correctness-first,有明确边界限制)

    完整 benchmark 数据与复现命令见 docs/benchmarks.md。

    主线吞吐演进Chunked Prefill ITL
    throughputchunked_prefill
    Flash Decoding(seq_len sweep)CUDA Graph decode 延迟
    flash_decodecuda_graph

    ¹ TP 说明:1.5B 模型规模下,2 卡 NCCL all-reduce 通信开销超过计算节省,吞吐未提升;当前验收结论为 greedy 输出与单卡完全一致(正确性已验证)。TP 适用于单卡显存不足时的大模型横向扩展。


    快速开始

    git clone https://github.com/psmarter/mini-infer && cd mini-infer
    pip install -e ".[serve,dev]"
    
    # 无需模型权重,立即验证服务接口
    mini-infer-serve --dry-run --port 8000
    
    # 真实模型(需要 Qwen2.5-7B-Instruct)
    mini-infer-serve --model /path/to/Qwen2.5-7B --port 8000
    
    # 开启 CUDA Graph
    mini-infer-serve --model /path/to/Qwen2.5-7B --use-cuda-graph  --port 8000
    
    curl http://localhost:8000/v1/chat/completions \
      -H "Content-Type: application/json" \
      -d '{"model":"mini-infer","messages":[{"role":"user","content":"Hello"}],"stream":false}'
    

    Python 完整示例(streaming / 多轮对话)见 examples/openai_client.py。


    目录结构

    mini_infer/
    ├─ core/        # EngineConfig、Request、SamplingParams
    ├─ runtime/     # LLMEngine、Scheduler、AsyncEngine、SpecEngine、PDEngine
    ├─ cache/       # KVCacheManager(BlockTable + Prefix Cache)
    ├─ modeling/    # ModelRunner
    ├─ kernels/     # PagedAttention、Triton decode、Flash Decoding
    ├─ parallel/    # TP、Replica、PP
    └─ serving/     # FastAPI server、OpenAI schema
    
    benchmarks/     # 每项能力对应一个 benchmark 脚本(21 个)
    tests/          # 287 collected items(含参数化展开),大多数支持 dry_run,不依赖模型权重
    

    make test-fast 跑 CPU dry-run 全量测试(约 10s);make test 含 GPU 专项。


    文档

    文档内容
    docs/architecture.md包结构、模块说明、请求生命周期
    docs/benchmarks.md所有能力的 benchmark 数据与复现命令
    docs/faq.md常见问题:安装、环境、CUDA Graph
    docs/roadmap.md后续扩展方向与已知 gap

    与 vLLM 的区别

    维度mini-infervLLM
    目标从零实现并测量关键推理机制生产级:高吞吐、多模型、SLO 保障
    PagedAttention与 vLLM 同路线(flash_attn block_table)相同路线,更成熟
    模型覆盖Qwen2.5 / DeepSeek-V2数十种架构,自动适配
    调度器手工实现,四队列 + chunked prefill完整 SLO、KV 共享感知
    部署单机原型K8s、多机 RDMA、完整监控

    环境

    依赖版本
    Python3.10+
    PyTorch2.1.2+cu121
    transformers4.43.4
    flash-attn2.5.9.post1(block_size 须为 256 的倍数)
    CUDA12.1 / RTX 4090

    License

    MIT