Skip to content

SGLang 框架概览

SGLang 是一个面向大语言模型(LLM)与视觉语言模型(VLM)的快速服务框架。它通过共同设计后端运行时与前端语言,使模型交互更快速、更可控。

1. 核心能力

  • 高效后端运行时:提供 RadixAttention 前缀缓存、压缩有限状态机约束解码、连续批处理、Token Attention(PagedAttention)、张量并行、FlashInfer 内核、分块预填充以及 INT4 / FP8 / AWQ / GPTQ 量化等优化。
  • 灵活前端语言:提供嵌入 Python 的 DSL,支持链式生成调用、高级提示、控制流、多模态输入、并行性与外部交互。

2. 从单轮对话到 LM Programs

传统上,LLM 服务主要面向简单的单轮对话:输入 Prompt,经过 Prefill + Decode 后输出结果。然而,随着大模型应用深入,LLM 越来越多地参与多轮规划、推理、工具调用与外部环境交互。这些场景通常不是简单单轮对话,而是:

  • 一个 Prompt 输出多个结果;
  • 生成内容受 JSON 格式、关键词或正则表达式约束;
  • 多个 LLM 调用之间穿插控制流。

这种趋势标志着 LLM 使用方式从聊天向程序化使用转变,即通过类似编程语言的方式控制生成过程,称为 LM Programs。LM Programs 通常具有两个特征:

  1. 包含多个 LLM 调用,并穿插控制流;
  2. 接收结构化输入并产生结构化输出,便于组合与集成。

SGLang 正是为 LM Programs 设计的框架。

3. 编译器式设计

当输入与输出之间是多对多关系时,存在大量延迟调度优化空间,这自然映射到编译器式的前后端设计。

3.1 前端 DSL

前端是一种嵌入 Python 的 DSL。以下示例展示了一个使用“分支-解决-合并”提示方法评估论文与图像相关性的 LLM Program:

python
import sglang as sgl

@sgl.function
def multi_dimensional_judge(s, image_path, essay):
    s += sgl.image(image_path) + essay
    s += "Is the essay related to the image?"
    s += sgl.select(sgl.S("related"), choices=["Yes", "No"])

    if s["related"] == "Yes":
        forks = s.fork(3)
        for i, f in enumerate(forks):
            f += f"Evaluate dimension {i}: "
            f += sgl.gen(f"judgment_{i}")
        s.join(forks)

    s += "Summarize and score the paper ABCD."
    s += sgl.gen("summary", regex=r"\{.*\}")

SGLang 后端执行时极大地简化了此类程序:相比使用 OpenAI 风格 API 编写等效程序,代码量可减少约 2.1 倍。

4. 后端三大核心优化

4.1 RadixAttention:高效复用 KV Cache

在 LM Programs 中,多个生成调用常通过 fork 创建并行副本,且不同程序实例通常共享系统提示等公共前缀。SGLang V1 提出的 RadixAttention 在运行时自动、系统化地复用 KV Cache:

  • 将 Prompt 与生成结果的 KV Cache 保留在 Radix Tree 中;
  • 支持高效的前缀搜索、复用、插入与驱逐;
  • 结合 LRU 驱逐策略与缓存感知调度,提高命中率。

RadixAttention 很快被 MoonCake、MemServe 等新型推理引擎采用,成为跨请求前缀共享的通用设计。

4.2 压缩有限状态机约束解码

LM Programs 常要求模型输出遵循特定格式(如 JSON Schema)。传统方法将正则表达式转换为有限状态机(FSM),逐 Token 检查并屏蔽无效 Token。当 FSM 中存在确定性的多 Token 转移路径时,逐 Token 处理效率低下。

SGLang 通过压缩 FSM 优化:将相邻的单一转换边压缩为单一边,从而识别可一次性解码的多个 Token,在一次前向传递中完成常量序列生成。

4.3 API 推测执行

对于 OpenAI 等黑盒 API,SGLang 通过推测执行(Speculative Execution) 降低多调用程序的延迟与成本。例如程序中连续调用 gen("name")gen("job") 时,SGLang 可在第一次调用时忽略停止条件继续生成若干 Token,并在后续原语中匹配复用这些额外输出,从而节省一次 API 调用。

5. 性能与生态

SGLang V2 在不启用 RadixAttention 与约束解码的情况下,相比 vLLM 已展现出明显加速,部分场景甚至接近或超过 TRT-LLM。其性能优势主要源于更高效的工程实现、重叠调度(Overlap Scheduling)以及对 PD 分离、大规模 EP 等前沿技术的成功集成。

SGLang 的核心优势可概括为:

  • 高性能实现:从 RadixAttention 到 Overlap Scheduling、PD 分离、专家并行,提供主流模型的 SOTA 部署支持。
  • 易于二次开发:代码结构清晰,社区活跃,便于定制与扩展。

总结

SGLang 不仅是一个推理引擎,更是一个面向 LLM Programs 的编程与执行框架。它通过前端 DSL 与后端运行时的协同设计,以及 RadixAttention、约束解码、API 推测执行等优化,为复杂大模型应用提供了高性能、可控制的解决方案。

参考

Maintained by Robin