SGLang 基本原理

SGLang 和 vLLM 都是高性能 LLM 推理框架;SGLang 最有代表性的设计是利用 RadixAttention,更主动地复用不同请求之间相同前缀的 KV Cache。


RadixAttention

SGLang 与 vLLM 最显著的区别在于 SGLang 的 RadixAttention。

假设有两个请求:

1
2
请求 A:你是一名 Kubernetes 专家,请解释 Pod
请求 B:你是一名 Kubernetes 专家,请解释 Service

两个请求都有相同的前缀:

1
你是一名 Kubernetes 专家,请解释

SGLang 会使用 Radix Tree 记录这些 Token 及其 KV Cache:

1
2
3
你是一名 Kubernetes 专家,请解释
├── Pod
└── Service

处理请求 B 时,共同前缀的 KV Cache 可以直接复用,只需要计算后面的 Service。

因此 RadixAttention 适合:

  • 多轮对话。
  • 相同 System Prompt。
  • RAG 中重复查询同一篇长文档。
  • Agent 反复携带相同工具描述。
  • 一个 Prompt 生成多个分支。

与 vLLM PagedAttention 的区别

两者解决的问题不同:vLLM 的 PagedAttention 解决 KV Cache 在显存里怎么存的问题,SGLang 的 RadixAttention 解决不同请求之间哪些 KV Cache 可以复用的问题。


Cache-aware Scheduling

SGLang 的调度器在选择下一个请求时,会考虑它能复用多少 KV Cache。

思路是:

1
2
3
4
5
6
7
前缀匹配

找到可复用 KV Cache

只计算未命中的 Token

加入动态 Batch

RadixAttention 负责找到缓存,调度器负责利用缓存。


与普通调度器的区别

假设当前 GPU 保存了下面这段 Prompt 的 KV Cache:

1
2
你是一名 Kubernetes 专家,请根据下面的文档回答问题:
[一篇很长的文档,共 8000 Token]

此时等待队列里有两个请求:

1
2
3
4
5
6
7
请求 A:
你是一名 Kubernetes 专家,请根据下面的文档回答问题:
[相同文档]
Pod 是什么?

请求 B:
请写一篇关于 Kubernetes 的文章。

假设:

  • 请求 A 总长度是 8020 Token。
  • 其中 8000 Token 已经存在于缓存。
  • 请求 B 长度是 2000 Token,没有缓存。

实际需要计算的 Token 数是:

1
2
请求 A:只需计算 20 Token
请求 B:需要计算 2000 Token

虽然请求 A 看起来更长,但因为命中了大量 KV Cache,处理成本反而更低。

对于普通调度器

普通的先来先服务调度器主要看请求到达顺序:

1
2
请求 B 先到 → 先处理 B
请求 A 后到 → 后处理 A

不关心哪个请求可以复用缓存。

对于 Cache-aware Scheduling

Cache-aware Scheduling 会先检查:

1
2
请求 A:缓存命中 8000 Token
请求 B:缓存命中 0 Token

因此可能优先处理请求 A:

1
2
先处理 A:只计算 20 Token
再处理 B:计算 2000 Token

这样可以减少 GPU 计算,提高整体吞吐量。


PD 分离

在 SGLang 中,普通 GPU 环境的 PD 分离主要使用 Mooncake 和 NIXL;昇腾 NPU 使用 Ascend backend。


Mooncake

Mooncake 是 SGLang 的默认 PD 分离方案。

1
2
3
4
5
6
Prefill

│ Mooncake Transfer Engine
│ RDMA / NVLink / TCP

Decode

特点:

  • 专门为大规模 Tensor、KV Cache 传输设计。
  • 支持 RDMA、GPUDirect RDMA、NVLink、TCP 等方式。
  • 可以让数据直接在 GPU 显存之间传输,减少 CPU 拷贝。
  • 与 SGLang 的 PD、HiCache、分层 KV Cache 集成较深。
  • 支持多网卡并行传输。

NIXL

NIXL 是可插拔的统一数据传输抽象。

1
2
3
4
5
SGLang

NIXL 统一接口

UCX / RDMA / GDS / 其他插件

特点:

  • NIXL 自己更像一层统一接口。
  • 底层可以使用 UCX、GPUDirect Storage 等插件。
  • 不只面向 GPU 显存,也可以抽象 CPU 内存和存储设备。
  • 与 NVIDIA Dynamo 等基础设施生态结合较好。

Ascend backend

为华为昇腾 NPU 的专用方案。

特点:

  • 面向 Ascend A2、A3 等 NPU。
  • 使用 Ascend 对应的内存传输基础设施。

SGLang 与 vLLM 的简化对比

方面 vLLM SGLang
主要目标 高吞吐通用推理服务 高吞吐、低延迟及高效前缀复用
KV Cache 存储 分页管理 分页管理
连续批处理 支持 支持
前缀缓存 使用 Block Hash 查找相同前缀 使用 Radix Tree 组织相同前缀
代表性技术 PagedAttention RadixAttention
PD 分离 支持 支持
投机解码 支持 支持
API OpenAI-compatible API OpenAI-compatible API
适合场景 通用模型部署 通用部署,尤其适合大量共享前缀的请求

vLLM 通过分页解决 KV Cache 如何高效存储,SGLang 在分页基础上进一步强调不同请求的 KV Cache 如何高效复用。

Author

Warner Chen

Posted on

2026-08-06

Updated on

2026-08-14

Licensed under