SGLang 架构与适用场景
一句话定位:面向结构化 / 多轮 / 带复杂控制流的 LLM 程序的执行引擎。它的洞察是——这类程序的请求之间前缀高度重复,于是用前缀树把 KV Cache 复用做到极致。
1. 面向的问题:LLM 程序而非单次调用
现实中的 LLM 应用往往不是”一问一答”,而是一段程序:多轮对话、思维链、工具调用循环、按 schema 抽取字段、并行分支再汇总。
这类工作负载的特征:
- 大量请求共享相同的前缀(同一 system prompt、同一 few-shot 示例、同一段上下文、同一对话历史);
- 存在分支与循环,调用之间有依赖关系。
2. 核心机制
2.1 RadixAttention:前缀树复用 KV Cache
- 用 Radix Tree(基数树/压缩前缀树) 组织所有请求的 KV Cache:树上的每条路径代表一段 token 前缀,其 KV 只存一份。
- 新请求到来时,在树上匹配最长公共前缀,直接复用已有 KV,只需为新增部分计算 K/V;
- 配合 LRU 策略淘汰冷前缀。
- 与 vLLM 的前缀共享(3.5)相比,RadixAttention 是自动、跨请求、可多级共享的通用机制,在前缀重复率高的场景收益极大(省下大量 Prefill 计算与显存)。
2.2 前端 DSL 编排
- 提供一套嵌入 Python 的 DSL(如
gen、select、fork/join 等原语)来描述多轮生成、分支与并行; - 前端把程序结构信息传给运行时,使调度器知道后续会用到哪些前缀,从而更好地做缓存复用与并行调度;
- 同时支持受约束解码(按 JSON schema / 正则约束输出),保障结构化结果可解析。
3. 适用场景
- Agent:多轮工具调用,system prompt 与历史反复复用;
- 批量结构化抽取:同一套 prompt 模板 + 大量不同输入,前缀完全一致;
- 思维链 / 自一致性采样(同一 prompt 多次采样)、多分支评估。
选型直觉:前缀重复率高、控制流复杂 → SGLang;通用高并发单轮服务 → vLLM;稳定配置追求极致性能 → TensorRT-LLM(3.8)。
参考:论文《SGLang: Efficient Execution of Structured Language Model Programs》;SGLang 官方文档