Skip to content

SGLang 源码解读:从一个请求到一次生成 ​

本系列把 SGLang(sgl-project/sglang)当作一个真实的推理服务系统来解剖:沿「HTTP 请求 → 分词 → 调度 → KV 内存 → 模型执行 → 采样 → 反分词 → 流式响应」这条主执行链,用源码证据解释它为什么这样工作。

版本快照 ​

字段内容
仓库https://github.com/sgl-project/sglang
分支main
快照 commit65824258549671404188450748b90ab7cacab2ae
核对日期2026-09-28
分析范围以 python/sglang(SRT 运行时)为主线,兼及 Rust 网关 sgl-model-gateway

正文所有代码引用均锚定在该 commit 上,写作格式为 srt/xxx.py:行号(即 python/sglang/srt/xxx.py)。行号以固定快照为准;上游 main 持续演进,阅读最新代码时请以符号名为锚点重新定位。

这一卷回答什么 ​

  • SGLang 服务端一次生成请求,​从 socket 到 socket 经过了哪些进程、哪些状态容器、哪些关键分支?
  • 调度器如何决定「下一个 batch 是 prefill 还是 decode」,chunked prefill 与 retract 各自解决什么问题?
  • RadixCache 前缀缓存如何与 KV 内存池、锁引用、淘汰策略协同?
  • 重叠调度(overlap scheduling)用怎样的代价换取 CPU 调度与 GPU 计算的重叠?
  • 多进程、多机、PD 分离、Rust 路由网关这些「跑得起来之后」的工程问题如何组织?

目录 ​

第一部分 宏观 ​

第二部分 进程与入口 ​

第三部分 调度与执行 ​

第四部分 集群与生态 ​

附录 ​