推理模型做 decode,GPU 只有 3% 在干活——SparseSpec 把稀疏 Attention 变成了 2.1× 加速
推理模型做 decode,GPU 只有 3% 在干活——SparseSpec 把稀疏 Attention 变成了 2.1× 加速
原文:Accelerating Large-Scale Reasoning Model Inference with Sparse Self-Speculative Decoding
一张 H100,跑 Qwen3-8B 做推理解码,attention 阶段的 GPU 计算利用率只有 3%。
内存带宽跑满了 85%,计算单元闲着 97%。

这张图是整篇论文的核心前提。在这个基础上,才能理解为什么”减少 FLOPs”这个直觉在推理模型场景下完全打不中要害,也才能理解 SparseSpec 的设计逻辑。
1. 推理模型和普通 LLM 的 decode 不是一回事
普通 LLM 生成一段对话,200 个 token,KV cache 很小,attention 很快。推理模型不一样——DeepSeek-R1、Qwen3 这类模型,做一道数学题要先想几千步,CoT 动辄 3000-8000 个 token,KV cache 巨大。
KV cache 越大,每个 decode step 要搬运的数据就越多。而 GPU 的计算峰值(FLOPs)和内存带宽(GB/s)是两个独立的天花板——一旦 decode 落入 memory-bandwidth bound 的区域,堆计算完全没用,瓶颈在搬数据的速度。
这就是上面那张图的意思:97% 的计算白白浪费了,GPU 的时间全花在等 KV cache 从显存搬过来。
现有的加速方案有两大类:一是 KV cache 压缩(量化、逐出、稀疏 attention),二是推测解码(用小模型快速生成草稿,大模型并行验证)。这篇论文选了第二条路,但做法有本质区别。
2. 推理模型的 Attention 天然是稀疏的
做稀疏 attention 的前提是:大部分 attention score 接近零,只有少数”关键 token”真正重要。这个直觉在推理模型上被验证得特别彻底。

Qwen3-8B 在 AIME 数学题上的 attention 热力图——矩阵的绝大部分是接近零的蓝色,只有极少数位置(红色)有高分值。两个不同的 head 都是这个模式。
问题是:稀疏 attention 和推测解码怎么结合?
3. 之前的方案为什么没做到理论加速上限
先看一个有意思的对比图:

横轴是 acceptance rate,纵轴是 speedup。蓝线是理论上限——如果 acceptance rate 是 0.6,理论上应该能拿到接近 2.0× 的加速。
但实际上:
- MagicDec(稀疏 attention + 标准推测解码):acceptance rate 0.6,只拿到 1.47×,比理论低了 36%
- Oracle Top-K Attn(用 oracle 完美稀疏 attention):acceptance rate 0.88,也只有 2.39×,低于理论峰值
差距从哪来?批处理。
标准推测解码为单请求设计:草稿阶段串行生成 d 个 token,验证阶段一次 batch 前向。单请求效率很高。但在实际推理服务里,同时有几十上百个请求,草稿和验证不得不交替执行——草稿阶段只处理部分请求,GPU 利用率低;验证阶段又切换回来。两边都低效,加速折扣大。
SparseSpec 要解的核心问题就是:在大 batch 在线服务场景下,让稀疏 self-speculative decoding 做到接近理论的加速比。
4. SparseSpec 的三个设计
4.1 PillarAttn:用验证阶段的结果指导草稿阶段的稀疏 pattern
Self-speculative decoding 的 draft 阶段和 verify 阶段用同一套参数——draft 跑稀疏 attention,verify 跑完整 attention。但草稿阶段该忽略哪些 token?
SparseSpec 的做法是:在验证阶段识别出关键 token,在下一轮草稿阶段只 attend 这些 token。

每行是一个 decode step,红色格子是被选出的关键 token(critical tokens),蓝色是 attention 权重高的位置,灰色是跳过的位置。验证阶段(底部高亮框)做完整 attention,同时记录哪些 token 的 attention score 高;下一轮草稿阶段(Drafting 框)就只看这些关键 token,跳过其余大部分。
名字叫 “PillarAttn” 是因为关键 token 在 attention 矩阵里形成了一列列”柱子”的形状。
4.2 Unified Batching:草稿和验证混进同一个 batch
解决批处理效率问题的关键设计。
传统做法是”所有请求先全部草稿,再全部验证”,这样草稿和验证交替执行,GPU 在切换时利用率骤降。SparseSpec 把草稿和验证请求混进同一个 batch,同时处理:

Unified Batch Scheduler 负责分配每个请求在这一轮做草稿还是验证,然后整批一起推理。对模型来说就是一次正常的 batch forward——有些请求用稀疏 attention(draft),有些用完整 attention(verify),结构统一。
附带的一个收益是 GEMM 效率。推测解码的一个经典问题是:草稿阶段 batch size 小,GEMM 算子远未打满 GPU——下图左边是 Naive 方案的 GEMM batch size,剧烈抖动;右边是 Unified Batching 之后,batch size 稳定在 GPU 饱和点附近。

4.3 异步 CPU-GPU 执行:把验证的 CPU 开销藏起来
Self-speculative decoding 的验证阶段有一步 CPU 计算:对比 draft token 和 verify token 的概率分布,决定接受还是拒绝。在同步执行模式下,这步 CPU 计算会卡住 GPU:

(a) 同步模式:每轮验证完要等 CPU 跑完接受/拒绝逻辑,GPU 空转。(b) 异步模式:把 CPU 计算延迟一步,和下一轮 GPU 执行重叠,GPU 不再空转。
代价是”延迟验证”——接受/拒绝的结果晚一步才能用,相当于有一轮 draft 可能白跑。但实验数据表明这个代价远小于消除 GPU idle 的收益。
5. 数字说话
端到端吞吐量
在 Qwen3 系列(1.7B/8B/14B)的三个推理 benchmark(AIME、LiveCodeBench、OlympiadBench)上对比 vLLM、vLLM-ngram、MagicDec、TriForce:

SparseSpec 全面领先,对 vLLM baseline 的加速比在不同配置下:
- Qwen3-1.7B AIME:2.13×
- Qwen3-8B AIME:1.79×
- Qwen3-14B AIME:1.51×(模型越大,TP degree 越高,通信 overhead 越重,加速有所压缩)
不需要额外 draft 模型,还能超过 EAGLE-3
EAGLE-3 是目前最强的 draft-model 推测解码方案之一,需要专门 fine-tune 一个草稿模型,参数量通常是目标模型的 1/7 左右,还要占额外显存。
SparseSpec 用同一套模型参数,不需要 fine-tune 任何额外模型:

三个模型上,SparseSpec 都略高于或持平 EAGLE-3,最大优势在 Qwen3-1.7B(4632 vs 4043 tokens/s)。
为什么同一个模型的稀疏版本能接受这么多 token?对比接受 token 数:

Eagle-3 = 1.1,N-gram = 1.6,StreamingLLM = 4.8,SparseSpec = 6.1。
原因在于:稀疏 attention 保留了完整的模型语义,draft 分布和 verify 分布非常接近,接受率自然高。相比之下,独立 draft 模型在长 CoT 场景下分布偏差更大,在 batched setting 里接受率反而低。
消融实验:每个设计贡献多少

从 Naive Spec 到最终 SparseSpec:
- +Unified Batch:1.23×
- +KV Cache Offload:1.61×(内存管理优化,让更多请求能同时服务)
- +Async CPU(最终方案):4722 tokens/s,2.21× over Naive Spec
每个设计都有实质贡献,不是凑数的。
6. 一点个人 take
这篇论文让我觉得有意思的地方在于它的出发点——从系统瓶颈倒推算法设计,而不是从算法的优雅性出发。GPU 利用率只有 3% 这个观察是可测量的,”所以要减少 attention 的数据搬运”是直接推出来的结论,不是先有稀疏 attention 再找理由。
PillarAttn 的设计也体现了这个思路:不是离线算好一个静态的稀疏 pattern(那需要 profiling),而是用 verify 阶段已经算过的 attention score 来动态指导下一轮 draft——信息复用,零额外开销。
有几个局限值得说:
一是依赖 attention 天然稀疏。推理模型(Qwen3、DeepSeek-R1 这类)的长 CoT 场景,这个假设成立很好。但在短输出场景(比如简单对话、分类任务),attention 未必足够稀疏,稀疏 draft 的接受率可能大幅下降,整套机制就没那么有吸引力了。
二是系统工程复杂度。Unified Batching + Async CPU + Dynamic KV Cache 三个模块组合,和标准 vLLM 架构差异很大,维护成本不低。论文是在自己的框架上实现的,想集成进 vLLM 主线还有不少工作量。
三是加速比随模型变大而缩小(从 2.13× 降到 1.51×)。原因是大模型需要更多 GPU 做 tensor parallel,TP 通信本身就成了新瓶颈,稀疏 attention 省下来的时间被通信抵消了一部分。这是 TP + speculative decoding 的通用矛盾,不是 SparseSpec 特有的问题,但确实限制了在超大模型上的收益空间。
推理模型是 2025 年之后 LLM 推理优化最有意思的方向之一——长 CoT 的特殊性质(稀疏 attention、memory-bandwidth bound、对延迟不那么敏感)和普通对话模型差异很大,很多老结论都要重新验证。这篇论文把这个特殊性利用得比较彻底。
如果这篇文章涉及的 LLM 推理效率优化和稀疏推理你想系统深入,可以看看我之前出版的《动手学 AutoML:从 NAS 到大语言模型优化实战》,书里有专章讲 LLM 推理效率(量化、蒸馏、推理框架),和本文的工程优化思路有直接关联。
