关键要点
- 免费且以 Apache 2.0 许可开源,源自与加州大学伯克利分校、斯坦福大学和 LMSYS 相关的研究
- RadixAttention 使用基数树而非按请求隔离缓存,自动在共享前缀的请求间复用 KV 缓存条目
- 结构化输出——JSON 模式和正则表达式约束——通过压缩有限状态机在解码期间强制执行,而非作为后处理过滤器
- 提供嵌入 Python 的前端 DSL(
sgl.gen、sgl.select、sgl.fork),用于编写多调用 LLM 程序 - 内置兼容 OpenAI 的 API 服务器,通过
python -m sglang.launch_server启动 - 支持连续批处理、张量并行,以及包括 FP8、INT4、AWQ 和 GPTQ 在内的量化格式
- 主要且支持最完善的硬件是 NVIDIA GPU;该项目也记录了 AMD、Intel 等其他加速器后端,但实际覆盖范围较窄
- 不是单用户桌面应用——没有图形安装程序,也不像 llama.cpp 和 Ollama 那样围绕纯 CPU 或 Apple Silicon 硬件构建
📍 简单一句话
SGLang 是一个源自与加州大学伯克利分校、斯坦福大学和 LMSYS 相关研究的免费、Apache 2.0 许可服务框架,面向 LLM 和视觉语言模型,通过 RadixAttention 在共享共同前缀的请求间自动复用 KV 缓存状态,并在解码循环内强制执行结构化输出。
💬 简单来说
SGLang 不是桌面聊天应用,而是服务器软件,同时做两件事:高效地处理大量并发请求——特别是那些重复系统提示词或对话历史的请求——并确保模型的输出真正符合你指定的 JSON 模式或模式。
📌注: 本文基于 SGLang 官方 GitHub 仓库及其公开文档,而非独立基准测试。SGLang 自身的资料在特定版本基准测试中引用了 RadixAttention 和 JSON 解码的具体加速倍数;本文不将这些数字作为普遍适用的常量重复引用,因为它们高度依赖于工作负载、硬件和测试版本,而且 SGLang 和 vLLM 都发布了对自身有利的基准测试。
SGLang 是什么?
SGLang 是一个面向大语言模型和视觉语言模型的免费、Apache 2.0 许可服务框架。它源自与加州大学伯克利分校、斯坦福大学以及 LMSYS 组织相关的研究——正是运营 Chatbot Arena 的同一社区——如今在 GitHub 的 sgl-project 组织下开发。与主要为单个用户在本地与模型聊天而构建的工具不同,SGLang 针对两个相互重叠的问题:高效地处理大量并发请求,以及确保模型输出符合 JSON 等结构化格式,这对函数调用、智能体流水线以及其他机器消费的输出而言至关重要。
- 源自与加州大学伯克利分校、斯坦福大学和 LMSYS 相关的研究;如今在开源组织
sgl-project下开发 - 采用 Apache 2.0 许可:源代码根据许可条款公开可用于使用、修改和再分发
- 将用于编写 LLM 程序的嵌入 Python 前端 DSL 与一个共同设计的后端运行时(SGLang Runtime,常缩写为 SRT)相结合
- 加载与 Hugging Face Transformers 兼容的模型检查点,涵盖 Llama、Qwen、Mistral 和 DeepSeek 等模型家族,大多数模型无需单独的转换步骤
- 记录了每天生成大量 token 的生产环境部署,并在其自身资料中列举了多家企业和研究机构作为采用者
RadixAttention 是什么,为什么重要?
RadixAttention 是 SGLang 最广为人知的内存管理技术。许多真实的 LLM 工作负载会发出多次共享共同前缀的生成调用——每个请求都使用相同的系统提示词、相同的少样本示例,或是正在进行的对话中较早的轮次。在每次调用时都重新计算这个共享前缀的注意力键值(KV)缓存会浪费 GPU 计算和内存。RadixAttention 转而将已完成和正在进行的请求的 KV 缓存条目都存储在一棵基数树中——这是一种按 token 序列索引的树形结构——使新请求能够自动找到并复用它与先前请求共享的任何前缀的缓存,而无需开发者手动跟踪或管理这种复用。
- 使用基数树数据结构,自动匹配并复用共享 token 序列前缀的请求间的 KV 缓存条目
- 覆盖来自重复系统提示词、共享少样本示例和多轮对话历史的前缀——不仅仅是逐字重复的同一请求
- 对基数树应用最近最少使用(LRU)的淘汰策略,使缓存内存能够随着树的增长而回收和复用
- 与连续批处理及分页、按块分配的 KV 缓存协同工作,使 SGLang 能够随着请求的到达和完成,在运行中的批次中添加和移除请求
前端 DSL 和结构化输出到底做什么?
除了核心服务功能外,SGLang 还提供两个相关但独立的能力:一种用于编写 LLM 程序的嵌入 Python 前端语言,以及在引擎层面强制执行结构化输出格式。
SGLang 需要什么硬件?
SGLang 的主要且支持最完善的目标是 NVIDIA GPU,项目自身资料中描述的大多数生产部署都运行在 NVIDIA 硬件上。该项目也记录了其他后端,尽管覆盖范围和实际采用程度并不均等。
NVIDIA GPU(CUDA)
- 详情:
- 主要且最成熟的目标,涵盖从数据中心 GPU 到最新的消费级/工作站显卡。跨多个 NVIDIA GPU 的张量并行服务有充分的文档记录。
AMD GPU(ROCm)
- 详情:
- 记录为通过 ROCm 支持 AMD Instinct 系列加速器的后端,但实际采用和社区覆盖范围比 CUDA 路径更窄。
Intel Xeon CPU 和 Gaudi 加速器
- 详情:
- 项目为 Intel 硬件记录的附加后端;应将其视为比 NVIDIA GPU 更小、经过较少验证的部署路径。
Google TPU 和昇腾(Ascend)NPU
- 详情:
- 面向已在 Google Cloud TPU 或华为昇腾基础设施上运行的团队所记录的后端。
Apple Silicon(Mac)
- 详情:
- 不是官方维护的一流路径。SGLang 是围绕依赖 GPU 的数据中心和工作站硬件构建的,而不是为单台 Mac 上的本地使用而设计。
如果你的目标是在单台 Mac 或纯 CPU 机器上运行模型,SGLang 不是为此而生的工具——llama.cpp以及基于它构建的工具(如 Ollama 和 LM Studio)直接针对 CPU 和 Apple Silicon 硬件,更适合这种场景。
SGLang 支持哪些量化格式?
SGLang 支持以降低的数值精度提供模型服务,以降低内存使用并在许多情况下提高吞吐量,记录了几种成熟的量化格式。
FP8
- 详情:
- 8 位浮点精度,在具有硬件 FP8 支持的 NVIDIA GPU 代际上受支持,以略微降低精度为代价换取比 FP16/BF16 更低的内存使用和更快的执行速度。
FP4
- 详情:
- 一种更新、精度更低的浮点格式,该项目为支持它的最新一代 NVIDIA 硬件记录了这一格式。
AWQ
- 详情:
- Activation-aware Weight Quantization(激活感知权重量化),一种广泛使用的 4 位权重量化方法,社区在 Hugging Face 上发布了预量化模型。
GPTQ
- 详情:
- 一种训练后量化方法,通常以预量化检查点的形式分发,同样典型地以 4 位精度运行。
INT4
- 详情:
- 该项目与 AWQ 和 GPTQ 一并记录的精度更低的整数量化路径,用于进一步降低内存占用。
本文不包含针对每种格式独立测量的质量损失数字——这些数字因模型架构和任务而异,因此在你自己的提示词上比较几种格式的输出,是判断该权衡是否适合你的工作负载的最可靠方法。
SGLang 兼容 OpenAI 的服务器提供什么?
运行 python -m sglang.launch_server 会启动一个实现 OpenAI API 协议的 HTTP 服务器,因此已经针对 OpenAI API 构建的应用程序和 SDK 通常只需更改基础 URL 和模型名称,即可指向自托管的 SGLang 实例。
- 兼容 OpenAI 的聊天补全和补全端点,可直接替代基于 OpenAI API 的客户端代码
- 可配置的主机和端口(项目自身示例中常用
http://localhost:30000) - 通过 API 暴露的、用于 JSON 模式或正则表达式约束生成的请求级结构化输出参数
- 在服务器启动时设置的、用于张量并行大小、内存分配和量化格式的引擎标志
- 支持在单个已加载的基础模型上服务多个 LoRA 适配器
如何安装和运行 SGLang?
SGLang 以 Python 包的形式分发,通常安装在配备 NVIDIA GPU 和兼容 CUDA 驱动的 Python 环境中。
- 1确认你拥有一块受支持的 NVIDIA GPU 并已安装最新的 CUDA 驱动(如果你的目标是 AMD/Intel/TPU 后端之一,请查阅项目文档以获取相应的安装说明)。
- 2创建一个 Python 虚拟环境,然后安装 SGLang,例如:`pip install "sglang[all]"`。
- 3使用来自 Hugging Face 的模型启动兼容 OpenAI 的服务器,例如:
python -m sglang.launch_server --model-path meta-llama/Llama-3.1-8B-Instruct --host 127.0.0.1 --port 30000。 - 4使用任何兼容 OpenAI API 的客户端发送基本聊天请求,例如指向
base_url="http://127.0.0.1:30000/v1"的 Pythonopenai包。 - 5要获得受 JSON 约束的响应,请在请求的结构化输出参数中传入一个 JSON 模式,这样服务器会在解码期间强制执行该模式,而不仅仅是在提示词中要求生成 JSON。
- 6对于多 GPU 服务,添加一个张量并行标志,例如
--tp-size 2将模型拆分到两块 GPU 上。 - 7仅更改基础 URL 和模型名称,将现有的 OpenAI API 客户端代码指向你自托管的服务器。
运行 SGLang 需要 GPU 吗?
除了测试用途外,是需要的——SGLang 的主要且支持最完善的目标是 NVIDIA GPU。该项目记录了其他加速器后端,但它们不是主要的部署路径。
我能从 SGLang 获得有保证的 JSON 输出吗?
可以——在你请求的结构化输出参数中传入一个 JSON 模式,SGLang 会在解码期间通过屏蔽会违反该模式的 token 来强制执行,而不仅仅是在提示词中要求模型生成 JSON。
SGLang 与 vLLM 相比如何?
SGLang 和 vLLM 是被讨论最多的两个开源、依赖 GPU 的 LLM 服务引擎,两者都以 Apache 2.0 许可发布,都面向生产环境的多用户服务,而非单用户桌面聊天。两个项目都发布了对自己有利的基准测试;本文不对这一比较作出裁决,而是描述每个项目自身记录的设计和主张。
核心缓存技术
- SGLang:
- RadixAttention——基于基数树,在共享任意前缀的请求间自动复用 KV 缓存。
- vLLM:
- PagedAttention——按页大小、非连续的 KV 缓存块,减少因过度预留分配而造成的内存浪费。
结构化输出
- SGLang:
- 引擎层的 JSON 模式和正则表达式强制执行是一项核心且有充分文档记录的功能,建立在压缩有限状态机之上。
- vLLM:
- 也通过集成的语法后端支持结构化/引导式解码,但文档将其记录为更广泛功能集的一部分,而非核心功能。
编程模型
- SGLang:
- 除 API 服务器外,还提供一种嵌入 Python 的前端 DSL(
sgl.gen、sgl.select、sgl.fork),用于多调用 LLM 程序。 - vLLM:
- 主要以 API 服务器或 Python 库调用的形式访问;未提供类似的程序编写 DSL。
起源
- SGLang:
- 与加州大学伯克利分校、斯坦福大学以及运营 Chatbot Arena 的 LMSYS 组织相关的研究。
- vLLM:
- 诞生于加州大学伯克利分校的 Sky Computing Lab。
吞吐量声明
- SGLang:
- 发布版本基准测试,引用特定工作负载下 RadixAttention 和 JSON 解码的倍数。
- vLLM:
- 发布自己的版本基准测试;描述 PagedAttention 的内存效率原理,而非单一的普遍速度数字。
两个引擎中任何一方的营销基准测试都不应被视为中立裁决——两者都是由取得更有利结果的项目自身进行的,且使用的是该项目选择的工作负载。如果吞吐量对你的决策至关重要,用你自己的模型、硬件和流量模式测试这两个引擎,比包括本文在内的任何单篇文章的数字都更可靠。
SGLang 与 llama.cpp、TensorRT-LLM 相比如何?
SGLang、llama.cpp 和 TensorRT-LLM 在硬件灵活性与极致优化的谱系上处于不同的位置。
SGLang
- 详情:
- 以 Apache 2.0 许可发布,基于 Python,围绕 RadixAttention 和引擎层结构化输出构建。直接加载与 Hugging Face Transformers 兼容的模型;NVIDIA GPU 是主要目标,并记录了其他后端。
llama.cpp
- 详情:
- 以 MIT 许可发布的 C/C++ 推理引擎,围绕 GGUF 模型格式构建,可在 CPU、Apple Silicon 和 GPU 上运行。面向单机和边缘部署,而非多 GPU 生产集群。
TensorRT-LLM
- 详情:
- NVIDIA 专为其 GPU 构建的引擎。模型会预先编译为针对目标 GPU 优化的 TensorRT 引擎,这可以在特定硬件上带来强劲性能,但代价是需要一个编译步骤,且跨硬件的灵活性低于 SGLang。
本文没有对这三种引擎进行独立的相互基准测试,也不主张任何一个普遍更快——吞吐量在很大程度上取决于模型、硬件、批处理特性以及每个引擎的版本。有关同时涵盖 vLLM、TGI 和 NVIDIA NIM 的面向部署的比较,请参见企业级 LLM 推理服务器指南。
SGLang 适合谁?
SGLang 适合在 GPU 基础设施上为大量并发用户或应用程序提供模型服务的团队——尤其是那些具有重复提示词前缀或对结构化输出有硬性要求的工作负载——而不适合那些只是想在自己电脑上用最快方式与模型聊天的人。
SGLang 与其他方案一览
这些工具在单用户与生产服务的谱系上,以及吞吐量与结构化输出侧重的谱系上,处于不同的位置。
SGLang
- 接口与配置:
- Python 包;通过
python -m sglang.launch_server启动兼容 OpenAI 的 API 服务器。大多数部署需要 NVIDIA GPU 和 CUDA。 - 最适合:
- 前缀复用密集,和/或对结构化(JSON/正则表达式)输出有硬性要求的高并发 GPU 服务。
vLLM
- 接口与配置:
- Python 包;通过
vllm serve启动兼容 OpenAI 的 API 服务器。大多数部署需要 NVIDIA GPU 和 CUDA。 - 最适合:
- 生产环境中面向广泛场景的高吞吐量多用户 GPU 服务,没有以结构化输出为首要设计重点。
Ollama
- 接口与配置:
- CLI 和 REST API,在大多数平台上通常以 llama.cpp 作为后端运行。一条命令即可安装;一条命令即可拉取并运行模型。
- 最适合:
- 为单个用户提供运行本地模型的最快途径,无需构建步骤或 GPU。
llama.cpp
- 接口与配置:
- CLI、内置 Web UI,以及通过 llama-server 提供的兼容 OpenAI API。可从源码构建或使用预构建的二进制文件;可在 CPU 或 GPU 上运行。
- 最适合:
- 引擎层面的直接控制、嵌入式/边缘部署,以及 CPU 或 Apple Silicon 硬件。
本文没有独立测试这些工具之间的速度或输出质量,也不主张其中任何一个在技术上更优——上表仅涵盖已记录的架构、配置和访问模式方面的事实。有关这三者之间吞吐量和配置复杂度的专门比较,请参见llama.cpp vs. Ollama vs. vLLM 对比;有关 vLLM、TGI 和 NVIDIA NIM 的部署导向视角,请参见企业级 LLM 推理服务器指南。
本文未涵盖哪些内容?
这是一篇基于 SGLang 公开文档和代码仓库撰写的解释性文章,而不是一份实际的基准测试报告。
- 没有针对 SGLang 或其对比对象独立测量的吞吐量、延迟或每秒请求数数字——这些高度依赖于 GPU、模型、批处理组成和版本
- 没有对 SGLang 自身宣称的 RadixAttention 或 JSON 解码加速倍数进行独立核实——这些数字来自项目自身的版本基准测试,而非第三方测量
- 没有对 SGLang 代码库进行逐行安全审计——它是开源的,采用 Apache 2.0 许可,因此代码本身可供审查
- 没有完整涵盖每一个受支持的硬件后端、引擎标志或部署编排选项(Kubernetes、特定云配置)——本文聚焦于大多数团队最先评估的概念和标志
- 不涵盖商业支持安排或托管的 SGLang 托管服务,因为 SGLang 本身是一个社区开源项目,而不是带有支持合同的供应商产品
尝试 SGLang 时的常见错误
使用 SGLang 时的大多数摩擦来自把它当作单用户桌面工具来对待,或者期望 RadixAttention 能帮助一个实际上并不共享前缀的工作负载。
常见问题
SGLang 是什么?
SGLang 是一个面向大语言模型和视觉语言模型的免费、Apache 2.0 许可服务框架,源自与加州大学伯克利分校、斯坦福大学以及运营 Chatbot Arena 的 LMSYS 组织相关的研究。它最广为人知的是 RadixAttention,一种在共享共同前缀的请求间自动复用 KV 缓存的技术。
SGLang 是免费的吗?
是的。SGLang 是根据 Apache 2.0 许可发布的免费开源软件,自行运行无需订阅或账号。
RadixAttention 是什么?
RadixAttention 是 SGLang 用于将已完成和正在进行的请求的注意力 KV 缓存存储在一棵基数树中的技术,使共享 token 序列前缀(系统提示词、少样本示例或较早的对话轮次)的新请求能够自动复用匹配的缓存,而不是重新计算。
SGLang 能保证有效的 JSON 输出吗?
当请求在 SGLang 的结构化输出参数中包含 JSON 模式时,引擎会在每个解码步骤屏蔽会违反该模式的 token,这样的设计使输出从构造上就符合该模式,而不是依靠事后验证。仅在提示词文本中要求 JSON 而不使用这些参数,并不能获得这种保证。
SGLang 需要 GPU 吗?
对于任何实际工作负载,都需要——SGLang 的主要且支持最完善的目标是 NVIDIA GPU。该项目记录了 AMD、Intel 及其他加速器后端,但它们不是主要的部署路径,也没有一流的 Apple Silicon 支持。
SGLang 支持哪些量化格式?
SGLang 支持多种格式,包括 FP8、面向较新硬件的 FP4、AWQ、GPTQ 和 INT4,这些格式的许多预量化模型已发布在 Hugging Face 上。
SGLang 比 vLLM 更好吗?
这两个项目各自的基准测试都不能算作对此的中立裁决——两者都发布了对自身有利的结果。SGLang 将 RadixAttention 基于前缀的缓存复用和引擎层结构化输出作为其核心功能加以强调;vLLM 则强调 PagedAttention 的内存效率。哪一个更合适取决于你工作负载的前缀共享模式,以及结构化输出是否是硬性要求——请参见上方的对比表。
SGLang 有兼容 OpenAI 的 API 吗?
有。运行 python -m sglang.launch_server 会启动一个实现 OpenAI API 协议的服务器,因此许多为 OpenAI API 构建的应用程序只需更改基础 URL 和模型名称,就可以指向自托管的 SGLang 实例。
SGLang 的前端 DSL 有什么用?
它是一组 Python 原语——包括 sgl.gen、sgl.select 和 sgl.fork——用于将多步骤 LLM 程序(例如分支为多个并行子生成并合并结果)编写为普通的 Python 代码,而不是手动编排各个独立的 API 调用。
SGLang是谁创建的?RadixArk是什么?
SGLang源自连接加州大学伯克利分校、斯坦福大学以及Chatbot Arena背后的LMSYS组织的研究。 2026年,SGLang联合创建者Ying Sheng和Banghua Zhu创立了AI基础设施公司RadixArk,在Accel领投下获得1亿美元种子轮融资,用于围绕SGLang商业化服务,同时继续其开源开发——核心框架仍保持Apache 2.0许可且免费。
