SGLang 上手:RadixAttention 与 vLLM 之外的推理引擎选择

站里已经写过 vLLM 与 PagedAttention(把显存当操作系统内存管)和 Ollama 实战(笔记本单机跑模型),这篇补上推理引擎版图里的另一块高频拼图:SGLang。它的招牌 RadixAttention 常与 PagedAttention 并称,但解决的问题并不相同——一个管「跨请求的前缀复用」,一个管「单请求内的显存分页」。本文讲清机制差异,给出可照抄的上手命令,并从负载形状出发谈选型。文中版本号与 benchmark 均截至 2026-10-07,可追溯来源列在文末。

SGLang 是什么

出身。SGLang 由 UC Berkeley 圈子的非营利组织 LMSYS 托管(就是做 Chatbot Arena 与 Vicuna 的那支团队),系统论文《SGLang: Efficient Execution of Structured Language Model Programs》(arXiv:2312.07104)2023 年 12 月提交、2024 年 6 月更新 v2,十二位作者来自 Stanford、UC Berkeley、上海交大与德州农工。

定位。高性能 LLM 与多模态推理服务引擎,对 agentic 负载、RL rollout(verl、slime 等后训练框架的采样后端)与大规模部署做了专门优化,Apache-2.0 协议。

社区现状(截至 2026-10-07):GitHub 36.8k star、9.3k fork、约 19.5k commits;对比 vLLM 的 93.3k star 小一档,但增速与活跃度可观。最新版本 v0.5.21(2026-10-02 发布),基本保持两周一个版本的节奏——仅这一个版本周期就合入 779 个 PR、227 位贡献者,连前缀缓存都换上了 Rust 内核实现(默认启用)。生态已溢出 Serving 范围:SGLang Diffusion(图像/视频生成)、SGLang Omni(TTS/ASR)、SpecForge(投机解码草稿模型训练)、HiCache(分层 KV Cache,对接 Mooncake/LMCache)。2025 年 10 月 NVIDIA 桌面级 DGX Spark 出货时,SGLang 首次随消费级硬件预装,LMSYS 宣称合作生态超 70 家伙伴。

RadixAttention:按前缀树复用 KV Cache

KV Cache 本身站内已有专文拆解(《一篇读懂 KV Cache》),这里直接讲复用机制。核心思想一句话:把所有请求的 KV Cache 按前缀组织进一棵 radix tree(基数树),相同前缀只算一次、存一份,后续请求按前缀匹配命中后直接复用;缓存按 LRU 淘汰,而不是用完即弃。

受益场景都是「前缀高度重合」的负载:

  • few-shot 提示:MMLU 5-shot 的示例段落跨请求共享;
  • 多轮对话:聊天历史每轮原样重复,第二轮起前缀全命中;
  • agent 与 Tree-of-Thought:系统提示、工具调用模板、多分支的公共前缀;
  • RAG:同一份长文档上下文被反复提问。

配合缓存感知调度(组批时按最长前缀匹配优先),论文测得命中率平均达理论最优的 96%,各负载实际命中率在 50%–99% 之间。

与 PagedAttention 的对照。PagedAttention 解决显存碎片:像操作系统分页那样把 KV Cache 切块按需分配,属于「管好内存」;RadixAttention 解决重复计算:同一前缀的 prefill 与缓存跨请求复用,属于「少干活」。两者并不对立——SGLang 的内存池同样分页管理,vLLM 后来也加入了自动前缀缓存。差别在设计重心:SGLang 把前缀复用做成一等公民(radix tree + 缓存感知调度 + 会话缓存),这决定了它的甜区。

数字。论文(v2)报告:对 vLLM、TGI 等当时最先进的系统,吞吐最高 6.4 倍、延迟最高降低 3.7 倍。细分很有信息量:few-shot、agent、JSON 解码收益大;多轮对话在短输出时收益明显,长输出时解码占主导、几乎无收益——前缀复用省的是 prefill,不是 decode。这个判断到 2026 年依然成立。2026 年的第三方对比则普遍反映:普通聊天负载两者接近,前缀密集场景 SGLang 常占优。

上手:从安装到第一条请求

NVIDIA GPU 路径需要 CUDA 13 与 Python 3.10+(CUDA 12 车道在 0.5.19 后随 PyTorch 2.14 升级退役)。官方推荐 uv 安装:

uv venv --python 3.12
source .venv/bin/activate
uv pip install --prerelease=allow sglang

--prerelease=allow 是官方明确要求:部分依赖只在 PyPI 发预发布版,缺了这个标志旧版 uv 会装到旧版本 SGLang。

起服务(官方 Quickstart 原样命令,示例模型 Qwen3-0.6B):

sglang serve Qwen/Qwen3-0.6B --host 0.0.0.0 --port 30000

等日志出现 The server is fired up and ready to roll!,另开终端走 OpenAI 兼容接口验证:

curl http://localhost:30000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model": "Qwen/Qwen3-0.6B", "messages": [{"role": "user", "content": "What is the capital of France?"}]}'

多卡张量并行加 --tp 2(等价别名 --tp-size/--tensor-parallel-size,并行策略原理见站内《分布式推理的并行策略》一文);显存吃紧调小 --mem-fraction-static(未设置时按显存自动计算的 KV Cache 池占比);数据并行用 --dp 配合官方 Model Gateway。传统入口 python -m sglang.launch_server --model-path ... 仍被官方文档大量使用,两个入口并存。容器路径是 docker pull lmsysorg/sglang:latest 后以 sglang serve 为容器命令。

本地验证说明:本机 macOS arm64(macOS 26.3)实测装不上当前版本——PyPI 的 0.5.21 只发 Linux wheel,uv pip install --prerelease=allow sglang 只能回落到旧版 0.5.2 且导入即缺依赖;官方 Apple Silicon 路径是 MLX 运行时(macOS 14+、sglang[srt_mps] extra、SGLANG_USE_MLX=1),本机未完整跑起服务。文中全部命令逐一对照官方 Quickstart、Server Arguments 文档与 main 分支源码核验(sglang serve/generate/version 三个子命令、--tp-size 别名、--mem-fraction-static、--grammar-backend 均在源码确认存在)。

特色能力

结构化输出。OpenAI 兼容的 response_format 直接收 JSON Schema、正则或 EBNF,解码用压缩有限状态机一次吐多个 token 加速;语法后端三选一:XGrammar(默认且官方推荐)、Outlines、llguidance,--grammar-backend 切换。配合 Pydantic 定义与校验:

from pydantic import BaseModel

class CapitalInfo(BaseModel):
    name: str
    population: int

resp = client.chat.completions.create(
    model="Qwen/Qwen3-0.6B",
    messages=[{"role": "user", "content": "给出法国首都的信息,JSON 格式"}],
    response_format={
        "type": "json_schema",
        "json_schema": {"name": "capital", "schema": CapitalInfo.model_json_schema()},
    },
)

多 LoRA。借鉴 S-LoRA 与 Punica 两篇论文的机制,单个 batch 内高效服务多个适配器;--lora-paths 挂载并支持启动后动态加载,max_loras_per_batch 默认 8,支持异步重叠加载与 Triton/CSGMV 内核后端,可与张量并行叠加。

投机解码。选项覆盖 EAGLE-2/EAGLE-3(官方推荐 EAGLE-3)、MTP、UNO、DFLASH、独立草稿模型,以及无需草稿模型的 NGRAM(仅 CUDA);草稿模型可用配套的 SpecForge 训练。官方定位是开源引擎里最快之列。

前端 DSL。论文最初的主角其实是前端语言:sgl.gen、fork、select 等原语把多次调用的 LLM 程序写成一段可并行执行的代码(源码 python/sglang/lang 至今保留)。2026 年的官方文档已不再把它作为主打,运行时加 OpenAI 兼容 API 成了常规用法;但理解它有助于理解调度设计——radix tree 正是为执行这类程序而生。

选型:什么时候选谁

  • 选 SGLang:前缀密集(多轮 agent、few-shot 流水线、共享长上下文的 RAG)、结构化输出吞吐敏感、要给 RL 训练做 rollout 引擎。这些是它相对 vLLM 的差异化甜区。
  • 选 vLLM:推理界的「默认选项」——模型覆盖最广、社区最大(93.3k star)、HuggingFace 集成最顺;普通聊天场景两者性能接近,默认选它不亏。机制见站内《vLLM 与 PagedAttention》专文。
  • 选 Ollama:单机单用户的桌面与开发场景,追求零配置而非高吞吐,见站内《Ollama 实战指南》。

两个头部引擎在互相吸收:vLLM 补了前缀缓存,SGLang 补了模型与硬件广度。差距在收窄,选型看负载形状,不看口号。

边界与提醒

硬件支持。NVIDIA 全线(A100 到 B300/GB300、RTX 30/40/50、DGX Spark、Jetson)、AMD Instinct MI300X/MI325X/MI350X/MI355X、Google TPU(SGL-JAX)、Intel Arc 与 Xeon、华为昇腾、摩尔线程均有官方支持页面;Apple Silicon 走 MLX 后端;AWS Trainium、寒武纪等在集成中。最常见的组合仍是 NVIDIA 与 AMD 两类。

迭代速度与稳定性。两周一个版本意味着能力新、变动也快:CUDA 12 支持说退役就退役(0.5.19 是最后一个有 CUDA 12 车道的版本),参数与行为在版本间有出入。生产环境建议固定具体版本、跟进安全更新,升级前读 release notes。第三方对比文的时效通常撑不过两个版本,采信前先核对当时用的版本号——这也是本文所有数字都标注来源与时点的原因。

参考资料

  1. SGLang GitHub 仓库(README、生态与硬件支持列表)
  2. SGLang 论文:Efficient Execution of Structured Language Model Programs(arXiv:2312.07104)
  3. SGLang 官方文档 Quickstart(安装与启动命令)
  4. SGLang 官方文档 Structured Outputs(XGrammar 等语法后端)
  5. SGLang 官方文档 Speculative Decoding(EAGLE-3/MTP/NGRAM)
  6. SGLang v0.5.21 Release Notes(2026-10-02)
← 返回资讯列表

读者留言

COMMENTS 暂无
仅本站原创文章开放留言 · 请勿留下手机号、邮箱等个人信息

还没有留言,来说第一句?