Skip to content

SGLang 项目调研

调研日期:2026-09-17。本文先建立项目定位、核心概念与实验路线,依据官方资料整理;尚未在本机安装 SGLang、加载模型或进行性能测试。具体模型和硬件支持需以实际使用版本为准。

1. 项目定位

SGLang 是面向大语言模型和多模态模型的高性能推理服务框架,项目采用 Apache-2.0 许可证。调研时应重点关注请求如何调度、KV Cache 如何管理,以及模型执行如何适配不同硬件。官方仓库

官方文档列出的主要方向包括 RadixAttention、前缀缓存、多 GPU 并行以及兼容 OpenAI 风格的服务接口。能启动某个模型并不代表该模型在任意设备、量化方式及并行配置下都可用,实际部署需要核对组合条件。官方文档

与本站的 Faiss 调研 相比,两者处在应用的不同环节:Faiss 负责向量近邻检索,SGLang 负责模型推理服务。一个 RAG 应用可以先检索资料,再将资料组织成提示词交给推理服务生成答案。

2. 先理解请求生命周期

下面是便于理解的概念流程,不是某个版本的精确函数调用链:

客户端请求
  → 接口解析与分词
  → 请求排队和调度
  → 检查可复用的前缀缓存
  → Prefill:处理尚未计算的输入部分
  → Decode:逐步生成输出 token
  → 反分词与流式返回

阅读推理系统时,可以先区分两类工作:Prefill 处理输入序列并建立后续生成需要的状态,Decode 利用已有状态逐步生成。实际调度与计算可能交错进行,不能将图中的顺序理解为所有请求必须各自独占设备执行。

原始 SGLang 论文将系统分为前端语言和运行时:前端表达生成与控制流程,运行时优化执行。阅读早期文章时,要区分其中的编程接口与当前推理服务接口。SGLang 论文

3. 核心调研点:前缀复用

RadixAttention 的重要思路是组织并复用共享前缀的 KV Cache,减少重复计算。它复用的是模型计算状态,不能等同于直接缓存并返回整条回答。原始论文

例如,应用设计中可能存在以下提示词:

请求 A:[相同系统提示词][相同背景资料][问题 A]
请求 B:[相同系统提示词][相同背景资料][问题 B]

这类共享前缀值得做缓存收益实验,但实际命中受 token 序列、模型配置、缓存生命周期和调度影响。不能仅凭两段文本看起来相似就认定一定命中。

本文建议分别测量冷缓存与热缓存,并增加“完全不共享前缀”的对照组,避免将高复用场景的收益推广到所有请求。

4. 最小服务调用示例

以下仅作为阅读与后续复现入口,本次未执行。运行前应按目标硬件的官方安装说明配置独立环境,并准备模型权重和足够的设备内存。

启动本地服务:

python3 -m sglang.launch_server \
  --model-path Qwen/Qwen2.5-0.5B-Instruct \
  --host 127.0.0.1 \
  --port 30000

待模型加载完成后发送请求:

curl http://127.0.0.1:30000/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "Qwen/Qwen2.5-0.5B-Instruct",
    "messages": [
      {"role": "user", "content": "用三句话解释 KV Cache。"}
    ],
    "temperature": 0,
    "max_tokens": 128,
    "stream": false
  }'

这里的 30000 是模型服务端口,与本站 MkDocs 的 8000 端口不同。启动后可通过 http://127.0.0.1:30000/docs 查看该运行版本的接口定义。命令形式和聊天接口用法参考 官方请求教程

5. 后续源码阅读路线

建议围绕一个请求逐层追踪,而不是从目录名猜测所有模块的行为:

阶段 要回答的问题
服务入口 启动参数如何传递,HTTP 请求如何变成内部请求?
分词与请求管理 token 化在哪里发生,取消与超时如何处理?
调度 什么请求进入同一批次,如何处理资源不足?
KV Cache 缓存如何匹配、分配、引用和回收?
模型执行 Prefill 与 Decode 怎样进入模型和 attention 实现?
输出 采样、停止条件、反分词和流式响应如何衔接?

正式源码导读应先固定 release 或 commit,再记录具体路径、类和调用链。当前文章提供的是阅读问题清单,不声称已经核对上述模块的实现细节。

6. 实验计划

下面是建议的首轮实验,不是已有性能结论。

维度 建议控制项
模型 固定模型、权重版本、精度与 tokenizer
输入与输出 分别覆盖短输入、长输入及不同生成长度
并发 从单请求逐步增加,观察饱和点
缓存 无共享、共享前缀冷启动、共享前缀热启动
硬件 记录设备型号、数量、显存及软件版本
服务配置 固定并记录并行方式、调度和缓存相关选项

至少记录首 token 延迟(TTFT)、相邻输出 token 的时间间隔、请求总延迟、输出 token 吞吐、峰值内存、失败率和超时率。延迟同时看中位数与尾部,吞吐需要注明统计窗口和是否包含输入 token。

选型时建议比较“满足相同延迟目标时的吞吐”,并使用相同模型、请求分布与生成条件。官方特定环境的加速数据不能直接作为本机或业务场景的预期。

7. 下一步

源码阅读可继续看 SGLang 源码结构与 API 详细导读,其中固定 v0.5.2 梳理了目录、请求调用链、调度器和 KV Cache。

先确定目标模型、硬件和使用场景,再开展一次可复现的服务启动与请求验证;随后结合源码导读,补充调度器和 KV Cache 的运行跟踪专题。这样可以将项目概念、真实调用链和测量结果逐步对应起来。