SGLang:从前端 DSL 到 SRT 服务运行时
SGLang:从前端 DSL 到 SRT 服务运行时 SGLang 是一个面向大语言模型与多模态模型的开源服务框架,由 LMSYS 组织下的 sgl-project/sglang 仓库以 Apache-2.0 许可证发布。截至 2026-08-09,该仓库约有 31.6k 星标,最新发布版本为 v0.5.17(2026-08-08)。在所有这些数字之前,有一句话更能说明问题:SGLang 实际上是两个系统——一个内嵌于 Python、用于编写”LLM 程序”的前端语言,以及一个最初被称为 SRT(SGLang Runtime)的服务运行时。理解两者之间的边界,就能同时看懂这个项目的历史和它在推理引擎中的当前位置。 本文是一次概念层面的巡览:前端与运行时、RadixAttention 与前缀复用、缓存感知调度、结构化生成、并行能力,以及今天与 vLLM 的比较边界在哪里。文中的性能数字均引自一手来源(NeurIPS 2024 论文、官方发布博客与官方文档),并标注了日期、硬件与基准版本;我们没有在本地复现任何一项。 两张面孔:前端语言与运行时 论文 SGLang: Efficient Execution of Structured Language Model Programs(arXiv:2312.07104,2023-12-12 首次发布,2024-06-06 修订,作为海报论文在 NeurIPS 2024 上报告)开篇即给出了一个至今仍然成立的设计拆分: 前端——一种内嵌于 Python 的领域特定语言(DSL),用于表达带生成调用、分支与并行的提示词程序; 运行时(SRT)——一个调度器、一个基数树 KV 缓存管理器与一个模型执行器,负责执行这些程序(或普通的服务请求)。 论文明确指出两部分可以独立工作:前端可以对接远程 API 模型,运行时也可以完全不涉及 DSL 地服务普通请求。这种独立性是解读 SGLang 演进的关键——运行时成长为通用的服务引擎,而前端成为该项目(可选的)另一张面孔。 前端:内嵌于 Python 的 DSL 前端语言就是普通的 Python,加上 @function 装饰器。在函数内部,通过追加消息块(s += user(...)、s += assistant(...)、s += system(...))和生成调用来构建一个 State 对象。依据论文与当前官方文档中的前端教程,核心原语包括: