系列:vLLM 与 SGLang 框架解码手记

(四)共同的前沿战场:同步停顿、投机解码、PD 分离与低比特量化

1. 一句话概括这个阶段

2026 年中,推理吞吐的前沿不再是”更快的 kernel”,而是”别让 GPU 空等主机喂数据”。

现代硬件的 matmul 已经接近饱和,paging、continuous batching、tree speculative decoding 这些机制都已成熟。剩下的吞吐藏在哪里?藏在加速器空等主机递活的那些缝隙里。

vLLM 从模型运行器端(MRv2)动手,SGLang 从投机解码调度器端(Spec V2)动手,两家从两端拆掉的是同一个同步卡点。

同一个卡点,两端夹击 vLLM · MRv2 从模型运行器端切入 async-first · 零 CPU-GPU 同步 step N 与 N+1 重叠 SGLang · Spec V2 从投机解码调度器端切入 draft-extend 整图捕获 砍 D2H / H2D 同步 Sync Stall GPU 空等主机的时间

省的是加速器空转,不是算力 → 低并发、时延敏感的 Agent 场景收益最大

vLLM 侧:MRv2 默认(#39337) · 删 PagedAttention(#47361) · 整步 CUDA Graph(300µs → 5µs) SGLang 侧:Spec V2 默认(+11% TPS) · #31468 DFlash 去每步 host 同步 · #31487 减 prefill graph 填充 · #31986/#31985 DSpark GEMM 堆叠

2. 投机解码:把 decode 的闲置算力榨干

2.1 为什么 decode 一定要投机

decode 是访存受限的:一次前向要把整个模型权重从 HBM 搬进 SM,却只算 1 个 token,算力单元大量闲置。

投机解码的本质就是:既然反正要搬一次权重,那就顺便多验证几个候选 token。搬运成本不变,产出翻几倍。

2.2 各家草稿方案对照

方案草稿来源特点落地
独立小模型同族的小尺寸模型通用但要额外显存、词表须一致两家都支持;vLLM #38174 支持异构词表
EAGLE / EAGLE-3轻量草稿头,复用目标模型隐状态接受率高、开销小,最主流两家一等支持
MTP(Multi-Token Prediction)模型自带的多 token 预测头训练时就学好,一步出 ~4 tokenDeepSeek / GLM / Step 系列自带
DFlash块扩散起草 + KV 注入一次并行出整块草稿SGLang #31468 去 host 同步;vLLM #48524 修层尺寸
DSpark半自回归起草 + 马尔可夫头 + 置信度调度按置信度动态决定草稿长度vLLM 原生支持 DeepSeek V4 Pro;SGLang #31986/#31985 优化
实测数字:DeepSeek V4 Pro + DSpark 在 8×B300 上约 250 tok/s,比 MTP 高 12–42%(vLLM 0.25 原生支持)。
DFlash 与 DSpark 的原理差异,可以看本站另一个系列:同台对比:DFlash 与 DSpark 到底差在哪。

2.3 值得关注的细节

3. PD 分离:正在成型的新范式

3.1 为什么要拆

第一篇讲过,prefill 和 decode 的计算特征完全相反。它们混在同一张卡上会互相伤害:

PD 分离(Prefill-Decode Disaggregation):把两个阶段部署到不同的 GPU 池,prefill 算完把 KV Cache 传给 decode 节点。

Router Rust / K8s / Planner Prefill 池 计算受限 · 决定 TTFT GPU GPU GPU TP + 上下文并行(PCP) 可用较低显存、较高算力卡 KV 传输 NIXL / Mooncake NVLink / RDMA Decode 池 访存受限 · 决定 TPOT GPU GPU GPU GPU 大 EP(专家并行)+ 大 batch 吃显存带宽与容量 分层 KV Cache 管理(4 层) GPU HBM(最快) NVLink 内存池 Host DRAM SSD / 对象存储(Mooncake)

图 2:PD 分离架构。两个阶段各自用最合适的并行策略与硬件,中间由 NIXL / Mooncake 传输 KV。 代表性数字: · NVIDIA Dynamo 1.0(含 Planner + 4 层 KV Manager):DeepSeek-R1 671B 复合提升 30×,Llama-70B Hopper 干净 2× · DeepSeek V3 全量分离栈 ~545 tok/s/GPU(北极星指标)· Together CPD 长上下文 B200 提 35–40% · Mooncake 覆盖 75% 真实请求

3.2 生态玩家

项目定位特点
NVIDIA Dynamo 1.0叠在 vLLM/SGLang 之上的编排层Planner + 4 层 KV Cache Manager;DeepSeek-R1 671B 复合 30×
llm-d(CNCF)K8s 原生 PD 编排云原生栈的标准路径
vLLM V1 Rust router引擎自带路由比 llm-d 高 25% RPS 且无 K8s 依赖
SGLang PD router引擎自带,多路由策略prefill 失败自动取消配对 decode
MooncakeKV 存储与传输后端多级缓存,覆盖 75% 真实请求
NIXL统一传输层两家都在收敛到它

3.3 几个有意思的变体

PD 分离不是免费午餐:它引入了 KV 网络传输(长上下文时可能是几个 GB)、跨节点调度复杂度、故障域扩大。只有在规模足够大、长 prompt 占比高、且有高速互联(NVLink / RDMA)时才划算。单机 8 卡跑中小模型,老老实实用混合部署即可。

4. 低比特量化:显存与带宽的直接解法

decode 是访存受限的,那把权重压小就是最直接的提速手段。

格式位宽说明状态
FP88Hopper 起原生支持,精度损失极小生产默认之一;vLLM #42569 让 FA4 在 SM100 支持 FP8 KV cache
INT4 / AWQ / GPTQ4经典权重量化成熟;注意 Step 系列的 Int4 权重 vLLM 暂不支持
NVFP44Blackwell 原生 4-bit 浮点,精度好于 INT42026 年主推;需 FlashInfer(vLLM 0.26 起)
MXFP44微缩放 4-bit,AMD 侧推进(SGLang #28291)扩张中
NVFP4_AWQ4NVFP4 + AWQ 校准(SGLang #31825)前沿组合

观察:SGLang 在 FP4 方向扩张明显更激进(NVFP4_AWQ、marlin_nvfp4 修复、per-token-group 量化内核统一 #30924),vLLM 则胜在格式覆盖全。

量化是 bug 高发区,几个真实案例:
· vLLM #48330:混合 dtype 融合核把 NVFP4 读成错误位模式 → 静默输出 !!!!!(0.25.1 修)
· vLLM #48816:GPTQ + 投机解码时 MTP 权重加载错误
· SGLang #31762:marlin_nvfp4 的 routed_scaling_factor 错误
结论:量化 + 投机解码 + 新硬件三者叠加时,务必跑完整正确性回归,不要只看吞吐数字。

5. 一条支线:要不要脱离 transformers

这是社区里一个持续的分歧。

一个观察:在 07-22 那个窗口,vLLM 侧完全没有”脱 transformers”的 PR,反而在做双后端收敛(#49292 让 Qwen3-VL 在 Transformers 后端也支持 M-RoPE、#47298 Ovis2_5 适配 transformers v5 special tokens)。方向是”原生 MRv2 + transformers v5 双轨对齐”,而不是二选一。

6. 小结:四条战线的关系

                 吞吐/延迟的四个来源
                          │
   ┌──────────┬───────────┼───────────┬──────────┐
   │          │           │           │          │
消灭同步    投机解码     PD 分离     低比特量化
   │          │           │           │
GPU 不空等  一次前向    两阶段互不   权重搬得
           出多 token   干扰、各自   更少
                        用最优并行
   │          │           │           │
 MRv2      EAGLE/MTP   Dynamo      FP8/NVFP4
 Spec V2   DFlash      NIXL         MXFP4
           DSpark      Mooncake     AWQ

它们互相叠加:MRv2 的零同步让投机解码能整图捕获;PD 分离让 decode 池能开更大 batch,而大 batch 又让投机解码的验证更划算;量化省下的显存可以拿去装更多 KV block。

下一篇把这些拼成时间线,看 2026 年 7 月那两轮版本到底改了什么、按什么顺序发生。

觉得有用?欢迎点赞、收藏,或请作者喝咖啡 ☕️

支付宝收款码

支付宝

微信收款码

微信

💬 留言

评论由 Giscus 驱动(基于 GitHub Discussions)。 当前仓库 NaphJohn/LLM-blog 尚未启用 Discussions:请在 GitHub 仓库 Settings → General → Features 勾选 Discussions 后刷新本页,评论区即自动显示。