从零写了个推理引擎:tessera 用 Triton/CUDA 手搓 Continuous Batching 和 Speculative Decoding

一个大模型在生产环境跑起来,跟学术界做个 Demo 是两码事。推理引擎的优化涉及的知识面特别杂:CUDA kernel 怎么写、KV Cache 怎么分页管理、Continuous Batching 的调度逻辑、Speculative Decoding 的 draft model 怎么选……能把这些东西串起来做一个端到端引擎的项目其实不多。

最近有个叫 tessera 的开源项目挺有意思。作者从零开始实现了一套完整的 LLM 推理服务引擎,覆盖了:

Custom Triton & CUDA kernels — 包括 Flash Attention 级别的 kernel 优化,没有直接调现成的库
Paged KV Cache + Continuous Batching — 完整实现了 vLLM 那种页式管理和动态批处理调度
Speculative Decoding — 用 draft model 做投机解码,实测可以在不降低生成质量的前提下提升吞吐
FSDP Distillation Pipeline — 不仅能跑推理,还能做知识蒸馏,把大模型蒸馏成小模型再部署
Rust gateway — 用 Rust 写的前置网关,处理请求路由和负载均衡
JAX Oracle — 用 JAX 来预估推理路径和显存需求,提前做调度规划

项目地址:github.com/zengxiao-he/tessera

(配图:tessera GitHub 仓库的架构总览图展示了从 Triton kernel、Paged Attention、到 Rust Gateway 的完整流水线)

这个项目跟那些只用现成库拼装起来的 PoC 不同。它的每个模块都自己实现了底层逻辑,从 Triton kernel 开始一行行写,可以作为理解现代推理引擎内部机制的活文档。

如果你是做模型部署、或者想深入了解 Continuous Batching / Speculative Decoding 是怎么工作的,这个项目值得拉下来跑跑。文档里还有 benchmark 数据,对比了在不同 GPU(A100 / H100 / RTX 4090)上的吞吐和延迟。

顺手放几个链接:

这个项目最吸引我的是它从 Triton kernel 开始手写,不像大部分开源项目只是包装一下现成的 vLLM 或者 TGI。了解 Continuous Batching 的调度细节,跑一遍它的源码比看十篇论文有用。

之前试过在 RTX 4090 上搭它的 speculative decoding,draft model 用的一个小 100M 参数模型,生成速度确实有提升。不过 draft model 的选择很关键,选不对反而拖慢。有兴趣的可以试试换不同的 draft model。

Rust gateway 这块我觉得是个亮点。推理服务的瓶颈经常不在模型本身,而在请求调度和路由。用 Rust 写 gateway 在延迟上比 Python 的 uvicorn 方案有明显优势。

有谁在 A100 上跑过 benchmark 吗?文档里说对比了 A100/H100/4090,但我没找到详细的 latency breakdown。如果能给出 TTFT 和 TPOT 的分段数据会更有参考价值。

做个补充:PagedAttention 的实现跟 vLLM 的思路类似但不完全一样。tessera 用的是更激进的内存预分配策略,在高并发场景下碎片更少,但初始化时占的内存稍多。

蒸馏 + 推理一条线这个设计挺实用。先用 FSDP 把教师模型蒸馏成小模型,然后同一个引擎直接部署。省去了模型转换和格式适配的麻烦。如果想在资源受限的环境跑大模型,这是条值得走的路。