引擎架构 • 约 1480 字 • 预计阅读 6 分钟

SGLang 与 vLLM 架构对比:前缀缓存、结构化输出与评测方法

比较 SGLang RadixAttention 与 vLLM APC 的前缀复用机制、结构化输出和部署基线,并给出控制变量、冷暖缓存及延迟吞吐的可复现评测方法。

NOTE

核心速览 (TL;DR)

  • 架构流派抉择:SGLang 以 RadixAttention 树状前缀缓存与端到端编译为核心,在多轮对话与 Agent 场景具备极高的 Cache 命中率与吞吐;vLLM 则以广泛的生态适配与模块化插件见长。
  • 选型指标实测:在固定系统提示词(System Prompt 占比 >50%)的高并发负载下,SGLang 表现出更优异的 TTFT 与吞吐指标;在快速多硬件平台(AMD/Ascend/NVIDIA)迁移中 vLLM 兼容性更广。
  • 落地关联:建议结合 RadixAttention 源码解密 与 vLLM 生产级落地部署指南 综合规划技术栈。

vLLM 与 SGLang 应该比较什么?

两者都是持续演进的推理服务框架,都支持前缀缓存、连续批处理以及结构化输出。本文比较数据结构与评测方法,不提供本站集群实测排名;没有原始请求、日志、版本与复现脚本支撑的“8×H100 跑分”不能作为选型证据。

分页分配与前缀复用是不同层次

PagedAttention 将逻辑 KV 块映射到非连续物理存储,降低大块连续分配的浪费;前缀缓存决定已有 KV 能否在新请求中复用。RadixAttention 用基数树组织共享 Token 前缀,也可以配合分页存储。两者并非二选一的物理内存体系。

flowchart TD
    Request["请求的 Token 前缀"] --> Match{"共享前缀检索"}
    Match --> Hash["vLLM APC:带前缀链信息的块哈希"]
    Match --> Tree["SGLang:基数树组织前缀"]
    Hash --> Reuse["复用仍驻留的匹配 KV"]
    Tree --> Reuse
    Reuse --> Compute["计算未缓存后缀并继续生成"]

vLLM 的块哈希包含前面的前缀信息,不是只对孤立块做相等匹配。因此多轮历史发生分叉时,两个引擎都可能复用分叉前的共同前缀,不能断言只有树结构才能做到。命中范围还受块粒度、淘汰策略、路由、缓存盐与可用容量影响。

参考 vLLM 前缀缓存设计、SGLang 论文。更完整的背景见 前缀缓存与 RadixAttention。

结构化输出不是单方独有能力

现代 vLLM 与 SGLang 均可通过语法约束后端限制输出。JSON Schema 编译、Token mask 和确定性字符串跳步是不同优化,支持范围随引擎版本、tokenizer 与后端变化。不能沿用早期某个后端的 CPU 瓶颈,推导所有 vLLM 部署都比 SGLang 慢。

结构化输出应同时测量 schema 合法率、字段语义正确率、编译冷启动、首 Token 延迟与生成速度。合法 JSON 不代表业务事实正确。参考 vLLM 结构化输出、SGLang 结构化输出。

可复现的对比实验设计

场景控制变量重点记录
无共享前缀问答同一权重、精度、输入与输出长度输出吞吐、P50/P95/P99 TTFT 与 ITL
多轮 Agent固定共享 Token 序列与分叉位置冷/热缓存延迟、命中量、淘汰与路由
JSON 抽取同一 schema 集合与约束后端合法率、语义准确率、编译与生成耗时
压力与故障同一到达率、排队限制、超时预算SLO 内完成量、错误率、抢占与恢复

固定镜像 digest、GPU 型号、驱动、CUDA、模型 revision、量化方式、TP/DP 和缓存预算。使用同一请求回放集,记录输入/输出实际长度;分别运行冷缓存与预热后的测试,重复实验并保留原始输出。开放环到达率能揭示排队,固定并发闭环测试适合观察饱和吞吐,二者不能混为一组结果。

不要只报告总体 tokens/s:输出被截断、超时或 schema 不合法时,吞吐仍可能看起来很好。应优先比较满足业务 SLO 的成功请求量和整机成本。

最小启动配置

下面仅作通用 Qwen2.5-7B 基线,假设已安装兼容 GPU、驱动和框架,显存足够。它们不是大型 MoE 的硬件配方;依实际安装版本的 --help 确认参数。

BASH
vllm serve Qwen/Qwen2.5-7B-Instruct \
  --max-model-len 8192 \
  --enable-prefix-caching \
  --port 8000
BASH
python3 -m sglang.launch_server \
  --model-path Qwen/Qwen2.5-7B-Instruct \
  --context-length 8192 \
  --port 30000

不用旧的 --enable-flashinfer 开关;需要指定 attention backend 时按当前 SGLang 参数文档 中的 --attention-backend 选择受支持后端。vLLM 运维配置见 部署指南。

如何选型?

先排除不支持目标模型、量化格式或硬件的版本,再用自己的业务回放验证。现有监控、故障恢复、API 行为与运维经验也是成本;共享前缀较多或 JSON 较重只是增加测试这些能力的优先级,并不自动决定赢家。

常见问题 (FAQ)

Q1: SGLang 的前缀树一定比 vLLM APC 命中率高吗?

不一定。二者都可以复用分叉之前的历史前缀。粒度、淘汰、容量与路由决定实际命中率,需要同一工作负载验证。

Q2: 前缀缓存能让整个请求免费吗?

不能。它主要减少重复预填充,后续解码、KV 读取、缓存驻留与固定资源仍有成本。长输出场景总收益可能很有限。

Q3: 本文是否提供生产集群实测倍数?

没有。本文提供来源可核查的机制与实验设计;上线选择需要保留可复现日志的本地评测。

相关文章

优先推荐同标签内容,其次补充最新文章。

解密 DeepSeek 推理印钞机:DeepInfer 与 deepseek-recipe 从硅基地基到协议顶层的生产全栈拆解

从底层芯片与通信物理地基,到算子内核、PD 极致分离拓扑、DSpark 动态投机解码、SWA 边界重放,再到 deepseek-recipe 协议中间层与百万亿 Token 商业印钞机经济学,全景剖析 DeepSeek 最新开源生产推理全栈。

高并发批处理演进:从 Continuous Batching 到 Chunked Prefill 消除排头阻塞

为什么在消除显存碎片后,高并发大模型服务依然会遭遇严重的单字时延(TPOT)剧烈抖动?深度解构从传统静态批处理到 Orca 迭代级连续批处理的状态机演进,揭秘超长 Prefill 霸占 GPU 引发排头阻塞(HoL Blocking)的物理根源,以及 Sarathi-Serve 和 vLLM 借助 Chunked Prefill 实现算力与访存动态拼车(Piggybacking)的底层机制。

Attention 算子加速史:从 FlashAttention-1/2/3 的 SRAM Tiling 到 FlashInfer 统一异构核心

为什么标准自注意力计算会随序列长度呈平方级拖垮显存带宽?深度解析现代 Attention 算子加速史:从 FlashAttention-1 的 SRAM 分块分片(Tiling)与 Online Softmax 动态局部重规约,到 FlashAttention-2 循环重构与 Warp 零通信调度,再到 FlashAttention-3 独占 Hopper 架构的 TMA 硬件异步搬运与 WGMMA 异步流水线。最后全面剖析专为大模型在线服务而生的 FlashInfer,揭秘其如何凭借 Paged KV Cache 原生寻址与 Split-K 解码并行,终结长文本 Decode 算力饥饿。

← 上一篇 投机采样 (Speculative Decoding) 生产实操:从 Draft Model 到 EAGLE-3 动态推测树实现 3x~5x 无损加速 下一篇 → 突破 10 万 Star 的 Browser-use 架构深度剖析:DOM 树提纯、视觉定位与生产级网页 Agent 实战
← 返回文章列表