过去一周,开源推理基础设施最值得注意的变化,不是又多支持了几个模型,而是两个头部框架开始集中清理高速增长留下的架构包袱。
vLLM 在 v0.25 中正式删除早期 PagedAttention kernel;SGLang 一边发布 v0.5.15、继续优化推测解码和 DeepSeek V4,一边在主分支启动大规模 kernel 归并。两边做法不同,方向却很接近:让 kernel 与 runtime 解耦,把框架竞争力转向调度、内存管理和多后端组合能力。
本周结论
- vLLM v0.25:Model Runner V2 成为 dense model 默认路径,早期自研 PagedAttention kernel 正式退出代码库。
- SGLang v0.5.15:Speculative Decoding V2、IndexShare MTP 和 DeepSeek V4 是正式版本的主要性能更新。
- SGLang 主分支:约 280 个散落的 kernel 正在被归并到统一的
sglang.kernels命名空间。这部分发生在 v0.5.15 发布之后,不能全部算作 v0.5.15 已发布能力。
vLLM v0.25:删除的是旧 kernel,不是分页 KV Cache
vLLM 在 7 月 11 日发布 v0.25.0,7 月 14 日发布 v0.25.1。v0.25.0 包含 558 个提交,来自 232 位贡献者。
版本说明里最醒目的一句话是:PagedAttention has been removed。对应的 PR #47361 直接名为“Delete PagedAttention”。
但这里不能理解成“vLLM v0.25 才从 PagedAttention 切换到 FlashAttention”。V1 Engine 的主执行路径此前就已经通过 Attention Backend 抽象,使用 vLLM 维护或适配的 FlashAttention,以及 FlashInfer、FlashMLA、Triton、AITER 等实现。
v0.25 删除的是早期自研的 PagedAttention attention kernel 和遗留代码路径,不是分页管理 KV Cache 的机制。block table、prefix caching、KV offload,以及不同 backend 使用的 paged KV layout 仍然存在。
更准确的演进关系是:
早期 vLLM
├─ 自研 PagedAttention kernel
└─ 分页 KV Cache / block table
当前 V1 Engine
├─ Model Runner V2
├─ Attention Backend
│ ├─ vLLM 维护的 FlashAttention
│ ├─ FlashInfer / FlashMLA
│ └─ Triton / AITER 等实现
└─ 分页 KV Cache / block table
v0.25
└─ 删除早期 PagedAttention kernel 遗留代码
这更像一次架构迁移完成后的正式清场:PagedAttention 作为具体 kernel 退出,但它所代表的分页 KV 管理思想已经进入 runtime、backend 和 cache 系统之中。
Model Runner V2 成为默认路径
v0.25 的另一项核心变化,是 Model Runner V2 成为所有 dense model 的默认执行路径。新版执行器补齐了 Mamba hybrid prefix caching、多模态前缀双向 attention、可配合完整 CUDA Graph 的动态推测解码,以及更多量化模型能力。
与此同时,vLLM 继续增加 Hopper sparse MLA、MLA decode 的 DCP 与 FP8 KV Cache、XQA decode kernels,以及不同硬件平台的 attention backend。这些变化说明 vLLM 正从“维护一个标志性的自研 attention kernel”,转向“维护一套可以选择和调度不同最优 kernel 的推理运行时”。
升级时需要检查什么
标准 OpenAI API 和常规模型部署可以积极测试 v0.25,但以下场景需要完整回归:
- 自定义 attention backend;
- 直接调用旧 PagedAttention Python/C++ 接口;
- patch 过旧 Model Runner;
- 自定义 KV Cache block table;
- 较冷门的量化、ROCm 或 XPU 组合。
SGLang v0.5.15:推测解码与 DeepSeek V4
SGLang 在 7 月 10 日发布 v0.5.15,7 月 14 日发布 v0.5.15.post1。
正式版本的重点是 Speculative Decoding V2:通过可进入 CUDA Graph 的 DSA draft-extend、减少 D2H/H2D 同步并融合 metadata 操作,官方给出的端到端 TPS 提升约为 11%。
IndexShare MTP 会在不同 draft step 之间复用 indexer top-k,在长上下文下最多可将 draft-step 成本降低约 1.9 倍。TopK V2 则把 top-k selection 与 page-table transform 融合;Indexer prologue 从 12 个 kernel 合并为 4 个,官方数据是在 batch_size=1 decode 下约快 8%。
此外,Breakable CUDA Graph 成为默认 capture 路径,DeepSeek V4 的 sparse prefill、indexer、MTP 和状态池也得到集中优化。
SGLang 的另一条主线:统一 Kernel 入口
比单项性能数字更值得长期关注的,是 RFC #29630。SGLang 正在建立统一的 sglang.kernels 命名空间。
此前 kernel 分散在 sglang.jit_kernel、sgl_kernel、srt/**/triton_ops,以及 attention、MoE、量化和模型私有目录。同一个算子可能同时有 JIT CUDA、AOT CUDA/C++、Triton、CuTe DSL、TileLang、FlashInfer、DeepGEMM 和 PyTorch fallback,却缺少稳定的公共入口。
新的调用方式将逐渐统一为:
from sglang.kernels.ops.layernorm import rmsnorm
from sglang.kernels.ops.activation import silu_and_mul
from sglang.kernels.ops.kvcache import reshape_and_cache
7 月 14 日至 15 日,主分支连续合并多批迁移:
- PR #30787:迁移
srt/layers顶层散落的约 40 个 kernel; - PR #30789:迁移通用 attention、FlashMLA、NSA decode 和 DCP kernel;
- PR #30792:迁移 DeepSeek DSA/DSV4 的约 48 个 Triton kernel 和两套 TileLang suite;
- PR #30793:迁移 linear attention、MiniMax sparse attention 和 diffusion kernel;
- PR #30795:迁移 FLA 与 Mamba kernel 子树。
整个 Phase 2.5 计划拆成 7 个 PR,覆盖约 280 个此前仍散落在统一目录之外的 Triton kernel,以及部分 CuTe DSL、TileLang 和独立 CUDA kernel。
现阶段主要是“归并”,不是把这些 kernel 全部重写一遍。大多数提交采用 byte-identical relocation,只改目录、导入路径并登记 KernelSpec,尽量不改变性能参数和计算逻辑。它的长期意义是为统一测试、backend 选择、能力登记、自动调优和后续 kernel 开发建立稳定边界。
两个项目正在走向同一个终点
| 项目 | 本周标志性变化 | 工程含义 |
|---|---|---|
| vLLM | 删除早期 PagedAttention kernel,MRv2 成为默认路径 | 清理遗留实现,强化统一执行器与可插拔 attention backend |
| SGLang | 建立 sglang.kernels,集中迁移散落 kernel |
统一算子入口、登记、测试和后续选择机制 |
| 共同方向 | kernel 与 runtime 解耦 | 竞争焦点转向调度、内存管理和多后端组合能力 |
vLLM 删除了自己最有品牌辨识度的旧 kernel,SGLang 则开始收编高速发展过程中散落的数百个 kernel。表面上一个在删、一个在聚合,实质都是在降低 runtime 对历史实现的耦合。
是否值得升级
vLLM v0.25 值得在预发布环境跟进,但它是旧执行路径正式退场的版本,自定义 backend 和 KV Cache 相关改造必须回归。
SGLang v0.5.15 对 DeepSeek V4、推测解码和 Blackwell 用户更有直接价值。最新的 kernel 重构目前主要位于主分支,更适合跟踪和验证;生产环境可以等待它进入下一正式版本后再升级。