vLLM vs SGLang 深入对比与优化¶
更新日期:2026-04-14
一、架构对比¶
飞书 add-on(待手动转 mermaid / 图)
component: blk_631fefbbae02400430b8f9f4
| 维度 | vLLM | SGLang | 为什么存在差异 |
|---|---|---|---|
| 核心创新 | PagedAttention (Kwon et al., 2023):将 KV Cache 按固定大小 block 分页存储,消除显存碎片 | RadixAttention (Zheng et al., 2024):用 Radix Tree 索引所有已缓存 KV 前缀,实现自动共享与 LRU 淘汰 | vLLM 出发点是解决显存碎片问题(碎片率曾高达 60-80%),SGLang 出发点是解决多请求间前缀重复计算问题 |
| KV Cache 管理 | 分页机制:固定 block_size(默认 16 tokens/block),通过 block table 映射 logical→physical block,支持 copy-on-write 共享 | 基数树:以 token 序列为 key 构建 trie,每个节点存储对应 KV 张量指针,天然支持最长前缀匹配(LPM) | 分页关注单请求内的显存效率;基数树关注多请求间的计算复用,两者优化目标不同 |
| Prefix Caching | 基于 hash(token_block) 的 block 级缓存,需要 prefix 恰好对齐 block 边界才能命中;自动检测依赖 hash 碰撞检查 | 基数树插入/查找复杂度 O(prefix_len),任意前缀自动共享,无需对齐 block 边界,支持部分前缀命中 | SGLang 的树结构天然表达层级前缀关系(system→doc→query),而 vLLM 的 hash 方案无法表达前缀间的包含关系 |
| PD 分离 | 通过外部项目 llm-d(Kubernetes operator)实验性支持,需要额外部署 KV transfer 组件,尚未稳定 | 原生内置 --disaggregation-mode prefill/decode,支持 NCCL/RDMA/TCP 多种 KV 传输后端,支持 layer-level pipelining |
SGLang 从设计初期就考虑 PD 分离场景(受 DistServe 启发),vLLM 的架构需要通过外部编排层补充此能力 |
| 结构化输出 | 依赖第三方 outlines 库,通过 logits masking 实现 JSON Schema 约束,每步需要 Python 侧计算合法 token 集合 | 原生 FSM/CFG 引擎(压缩有限状态机),预编译 grammar 为跳转表,decode 时直接查表 mask logits,无 Python 开销 | SGLang 将 structured generation 视为一等功能内建优化,而 vLLM 采用插件式集成导致额外的进程间通信开销 |
| 支持的模型 | 最广:覆盖 HuggingFace 上几乎所有架构(LLaMA, Mistral, Qwen, Falcon, MPT, GPT-NeoX 等 50+ 架构) | 广:覆盖主流架构(LLaMA, Mistral, Qwen, DeepSeek, Gemma 等 30+ 架构),MoE 模型支持尤其完善 | vLLM 社区更大、贡献者更多,模型适配 PR 提交量是 SGLang 的 2-3 倍 |
| 社区规模 | 最大(35K+ stars, 800+ contributors),Red Hat / IBM / Meta 等企业深度参与 | 增长快(15K+ stars, 300+ contributors),由 LMSYS 团队主导,学术界贡献活跃 | vLLM 发布更早(2023.06),先发优势积累了更大社区;SGLang 以性能领先快速追赶 |
| 生产用户 | Meta(内部推理平台)、LinkedIn、Mistral(API 服务)、HuggingFace(Inference Endpoints) | DeepSeek(全量线上推理)、Moonshot、百川智能等中国 AI 公司 | DeepSeek 选择 SGLang 因其对 MoE + PD 分离的原生支持;Meta 选择 vLLM 因其与 PyTorch 生态的深度集成 |
| 维度 | vLLM | SGLang | 为什么存在差异 |
|---|---|---|---|
| 开发语言 | Python 调度层 + C++/CUDA 算子(FlashAttention、PagedAttention kernel)、部分用 Triton | Python 调度层 + C++/CUDA 算子(FlashInfer 后端)、Triton kernel 用于自定义 attention | 两者都采用 Python 做上层编排(灵活)+ C++/CUDA 做底层计算(高性能),是 LLM 推理框架的标准分层模式 |
二、性能对比¶
2.1 基准测试数据(2026)¶
2.2 为什么 SGLang 在 prefix-heavy 场景快 6.4x¶
vLLM Prefix Caching 需要精确匹配完整的 prefix token 序列,实现方式是 hash(prefix_tokens) → cached KV。
SGLang RadixAttention 用 Radix Tree(基数树)管理所有请求的 KV Cache,能自动发现任意两个请求间的共享前缀。
RAG 场景示例:
- 请求 1: [system_prompt(2K)] + [doc_A(4K)] + [question_1(100)]
- 请求 2: [system_prompt(2K)] + [doc_A(4K)] + [question_2(150)]
- 请求 3: [system_prompt(2K)] + [doc_B(3K)] + [question_3(200)]
- vLLM:需要手动管理 prefix caching,或者等待自动检测
-
SGLang:Radix Tree 自动发现共享结构:
-
root → [system_prompt(2K)] → [doc_A(4K)] → [question_1]或→ [question_2] -
root → [system_prompt(2K)] → [doc_B(3K)] → [question_3] -
system_prompt只计算一次,被所有请求共享;doc_A只计算一次,被请求 1 和 2 共享
三、PD 分离(Prefill-Decode Disaggregation)¶
3.1 为什么要分离¶
Prefill 和 Decode 的硬件需求完全不同。混在一起 = GPU 两头都做不好。参考 DistServe (Zhong et al., 2024)。
3.2 SGLang PD 分离实现¶
SGLang 的 PD 分离架构包含三个组件: 处理流程:
-
新请求 → Router → Prefill Worker
-
Prefill Worker 处理完 → 传输 KV Cache → Decode Worker
-
Decode Worker 逐 token 生成
-
生成完毕 → 释放 Decode Worker 的 KV Cache
KV Cache 传输通过 NCCL / RDMA / TCP 完成。关键在于传输需要在 prefill 完成后、decode 开始前完成。SGLang 使用 pipelining 优化:传输 layer_i 的 KV 的同时计算 layer_i+1。
3.3 PD 分离的收益¶
四、优化 vLLM/SGLang 性能¶
4.1 通用优化¶
4.2 vLLM 特定优化¶
# vLLM 关键配置参数
vllm_args = {
'--tensor-parallel-size': 4,
'--max-model-len': 32768,
'--gpu-memory-utilization': 0.92, # 默认 0.9, 可以调高
'--enable-prefix-caching': True, # 开启 prefix caching
'--enable-chunked-prefill': True, # 分块 prefill
'--max-num-seqs': 256, # 最大并发请求数
'--speculative-model': 'draft-7b', # 投机解码 draft 模型
'--num-speculative-tokens': 5,
'--quantization': 'awq', # 量化
}
4.3 SGLang 特定优化¶
# SGLang 关键配置
sglang_args = {
'--tp': 4,
'--max-total-tokens': 100000, # KV Cache 总 token 数
'--schedule-policy': 'lpm', # Longest Prefix Match (利用 RadixAttention)
'--enable-dp-attention': True, # 数据并行注意力
'--chunked-prefill-size': 8192,
'--mem-fraction-static': 0.88,
# PD 分离
'--disaggregation-mode': 'prefill', # 或 'decode'
}
五、选型决策¶
选型建议:
参考文献¶
-
[1] Kwon et al. Efficient Memory Management for LLM Serving with PagedAttention (vLLM). SOSP 2023. 论文
-
[2] Zheng et al. SGLang: Efficient Execution of Structured Language Model Programs. 2024. 论文
-
[3] Zhong et al. DistServe: Disaggregating Prefill and Decoding. OSDI 2024. 论文
↑ 上级 · G. 推理与部署