SGLang¶
SGLang 的特色是“前缀复用 + 结构化生成”:用 RadixAttention 把共享前缀的 KV 复用到极致,再用前端 DSL 描述生成流程。
核心设计¶
- RadixAttention:用 radix tree(前缀树)管理 KV Cache,树节点对应一段共享的 token 前缀。
- 多轮对话、系统提示词、few-shot 示例天然共享前缀,命中后直接复用节点,无需重算 prefill。
- 按序列管理 KV 的方式无法表达“跨请求共享”,这是它的主要差异点。
- Radix Tree 调度:调度器按树上可复用的前缀组织 batch,优先匹配命中,减少重复计算。
- 前缀缓存:命中粒度比 block 化方案更细,较短的共享前缀也能复用。
前端与结构化生成¶
- Frontend DSL:用 Python 语法描述“生成 → 分支 → 约束”的流程(类似可编程 prompt),把多步调用收敛成一段程序。
- Structured generation:用 compressed FSM(压缩有限状态机)在解码时约束输出,直接产出 JSON / 正则 / 语法合法的结果,而不是事后解析再重试。
- 这两点使它在“前端编排 + 强约束输出”的场景中比通用服务框架更顺手。
与 vLLM 的差异¶
- KV Cache 组织:radix tree 对比分页 block table。
- 强项场景:强前缀复用(多轮对话、Agent 反复携带长上下文)、结构化输出。
- 共同点:都做 continuous batching、都支持 PD 分离,并且都在吸收对方的能力。
相关¶
TODO
- 补一次 RadixAttention 命中 / 未命中的具体对比。
- 记录 compressed FSM 在复杂 schema 下的性能表现。