Skip to main content
QUICK REVIEW

[论文解读] SGLang: Efficient Execution of Structured Language Model Programs

Lianmin Zheng, Liangsheng Yin|arXiv (Cornell University)|Dec 12, 2023
Topic Modeling被引用 7
一句话总结

SGLang 是一种嵌入在 Python 中的领域特定语言(DSL),通过控制流、并行性和生成的结构化原语,实现了对大语言模型(LLM)的高效编程。它集成了编译器、解释器以及一种名为 RadixAttention 的新型运行时优化技术,该技术利用基数树缓存并共享多个 LLM 推理请求之间的键值(KV)状态,实现高达 5 倍的执行速度提升,同时降低代码复杂度,并增强对复杂、多调用 LLM 应用的控制能力。

ABSTRACT

Large language models (LLMs) are increasingly used for complex tasks that require multiple generation calls, advanced prompting techniques, control flow, and structured inputs/outputs. However, efficient systems are lacking for programming and executing these applications. We introduce SGLang, a system for efficient execution of complex language model programs. SGLang consists of a frontend language and a runtime. The frontend simplifies programming with primitives for generation and parallelism control. The runtime accelerates execution with novel optimizations like RadixAttention for KV cache reuse and compressed finite state machines for faster structured output decoding. Experiments show that SGLang achieves up to 6.4x higher throughput compared to state-of-the-art inference systems on various large language and multi-modal models on tasks including agent control, logical reasoning, few-shot learning benchmarks, JSON decoding, retrieval-augmented generation pipelines, and multi-turn chat. The code is publicly available at https://github.com/sgl-project/sglang

研究动机与目标

  • 解决需要控制流、并行性和外部交互的复杂多调用 LLM 应用在执行中存在性能差距的问题。
  • 协同设计一种高层编程语言与高性能运行时,以支持批处理、缓存和并行性等自动优化。
  • 在保持与现有模型和框架兼容的前提下,降低 LLM 编程的代码复杂度。
  • 通过一种新颖的运行时技术,实现在多个请求之间高效重用注意力键值(KV)缓存。

提出的方法

  • SGLang 实现为嵌入在 Python 中的领域特定语言(DSL),提供 `fork`、`gen`、`join`、`choices` 和 `run` 等原语,用于结构化控制 LLM 的控制流与生成。
  • 系统包含一个用于动态执行的解释器,以及一个将程序追踪为计算图以实现激进优化的编译器。
  • 引入了 RadixAttention 技术,该技术使用基数树数据结构维护键值状态的最近最少使用(LRU)缓存,从而实现在多个推理请求之间自动重用。
  • 编译器应用经典优化技术,如代码移动和预取注解,以提升执行效率。
  • 运行时系统支持并行处理、批处理以及在多个请求和程序之间共享 KV 缓存,且基数树维护带来的开销极低。
  • 该系统设计为与开源和专有 LLM 兼容,支持在 OpenAI 和 Anthropic 等模型上实现可移植部署。

实验结果

研究问题

  • RQ1如何协同设计一种高层编程语言与高性能运行时,以优化多调用 LLM 工作负载?
  • RQ2在多个 LLM 生成调用之间自动重用 KV 缓存在多大程度上能提升推理效率?
  • RQ3具有结构化原语的领域特定语言是否能在降低代码复杂度的同时,支持 LLM 应用中的高级控制流与并行性?
  • RQ4使用基数树数据结构维护动态共享 KV 缓存的运行时开销是多少?
  • RQ5不同的输入共享模式(例如共享前缀、每份文档多个问题)如何影响 RadixAttention 的性能增益?

主要发现

  • 与基线系统相比,SGLang 在常见 LLM 工作负载中实现了高达 5 倍的执行时间加速,显著提升了性能。
  • RadixAttention 技术显著提升了吞吐量,尤其当可共享输入的长度较长时,性能增益随共享前缀长度的增加而提升。
  • 当每个共享输入的请求数量增加时(如每份文档多个问题),吞吐量提升最为明显,因为缓存重用的机会更多。
  • 维护基数树的运行时开销可忽略不计——最坏情况下仅占 0.5%,使其在生产环境中具有实用性。
  • 该系统通过支持结构化、可组合的 LLM 程序,原生使用 Python 控制流和可重用函数抽象,显著降低了代码复杂度。
  • 编译器与追踪流水线支持激进优化,如代码移动和预取,进一步提升了性能,超越基础执行水平。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。