跳转至

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 分离架构包含三个组件: 处理流程:

  1. 新请求 → Router → Prefill Worker

  2. Prefill Worker 处理完 → 传输 KV Cache → Decode Worker

  3. Decode Worker 逐 token 生成

  4. 生成完毕 → 释放 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'
}

五、选型决策

选型建议:


参考文献


上级 · G. 推理与部署