推测解码:实现2-3倍LLM推理加速
更新于2025年12月11日
2025年12月更新: 推测解码正从研究阶段走向生产标准。NVIDIA在H200 GPU上展示了3.6倍的吞吐量提升。vLLM和TensorRT-LLM均已包含原生支持。草稿模型并行提议5-8个token进行验证——充分利用单token生成时未被充分使用的GPU容量。输出质量不变,延迟降低2-3倍。
大语言模型逐token生成文本,每个token都需要对数十亿参数进行完整的前向传播。这种顺序瓶颈导致用户等待响应时产生延迟,即使GPU在计算过程中处于部分空闲状态。推测解码通过使用小型快速的草稿模型提议多个token,再由大型目标模型并行验证,打破了这一瓶颈,在不改变输出质量的情况下实现2-3倍加速。¹
该技术已从2025年的研究新奇发展为生产标准。vLLM和TensorRT-LLM都包含了原生推测解码支持,NVIDIA在H200 GPU上展示了3.6倍的吞吐量提升。²了解推测解码何时有效、如何选择草稿模型以及哪些框架提供最佳实现,能够帮助组织大幅降低推理成本和延迟。
推测解码的工作原理
传统的自回归生成按顺序产生token:
- 模型接收提示词,生成下一个token的logits
- 从分布中采样token
- 将token追加到上下文,重复前向传播
- 继续直到完成
每一步都需要完整模型的计算,但GPU的容量远超单token生成所能利用的程度。推测解码利用了这些未使用的容量:
草稿阶段: 一个小型快速模型快速生成K个推测token。在目标模型生成一个token的时间内,草稿模型可能产生5-8个候选续写。
验证阶段: 目标模型在单次并行前向传播中处理所有K个token,同时计算每个位置的概率。GPU并行性使得验证K个token的成本与生成一个token相近。
接受/拒绝: 在每个位置比较草稿和目标的分布。分布一致时接受token;分布不一致时拒绝并重新采样。该算法保证输出与目标模型独立生成的结果完全一致。³
加速来自于每次目标模型前向传播接受多个token。如果草稿模型的平均接受率为60%且提议8个token,每次验证传播大约产生5个token,而不使用推测时只有1个。
性能基准测试
生产部署在各模型系列中展示了显著的加速效果:
Llama模型在vLLM上的表现:⁴ - Llama 3.1-70B配合1B草稿:2.31倍加速 - Llama 3.1-8B在单个A100上:1.8倍延迟降低 - Llama 3.1-70B在低请求率下:1.6倍延迟降低
TensorRT-LLM在H200上的表现:⁵ - Llama 3.1-405B配合不同草稿模型:>3倍吞吐量 - 结合FP8量化:总计3.6倍提升
SGLang配合SpecForge:⁶ - Llama 4 Maverick:在MT-Bench上2.18倍加速 - Llama 4 Scout:2.0倍加速
EAGLE方法(最佳表现):⁷ - 约0.8的草稿准确率(80%接受率) - 典型加速2.5-2.8倍 - 在Spec-Bench排行榜上达到最先进水平
加速效果因工作负载特性而显著不同。同步、延迟敏感的用例获益最大。高吞吐量批处理获益较少,因为GPU计算成为瓶颈而非顺序生成。
框架实现
vLLM推测解码
vLLM支持多种推测解码方法,包括草稿模型、ngram匹配和EAGLE:
# 启用草稿模型推测
vllm serve meta-llama/Llama-3.1-70B-Instruct \
--speculative-model meta-llama/Llama-3.2-1B-Instruct \
--num-speculative-tokens 5 \
--speculative-draft-tensor-parallel-size 1
EAGLE集成(推荐):
# EAGLE实现更高的接受率
vllm serve meta-llama/Llama-3.1-70B-Instruct \
--speculative-model yuhuili/EAGLE-LLaMA3.1-Instruct-70B \
--speculative-method eagle \
--num-speculative-tokens 8
vLLM的Eagle 3集成在各种场景下可实现高达2.5倍的加速。⁸该框架自动处理token验证和拒绝采样,保持输出与非推测生成等效。
TensorRT-LLM推测解码
TensorRT-LLM为NVIDIA硬件提供更深层的优化:
# 构建带推测解码的引擎
trtllm-build \
--speculative_decoding_mode draft_tokens_external \
--max_draft_len 8 \
--checkpoint_dir $TARGET_CHECKPOINT \
--output_dir $ENGINE_DIR
草稿模型配置:
# 使用独立引擎的草稿模型
trtllm-build \
--checkpoint_dir $DRAFT_CHECKPOINT \
--output_dir $DRAFT_ENGINE \
--max_batch_size 256
TensorRT-LLM的自定义内核优化了草稿生成和验证阶段,从Tensor Core和内存带宽中提取最大性能。
Triton Inference Server集成
NVIDIA Triton Inference Server通过vLLM后端支持推测解码:⁹
model_repository/
└── speculative_llm/
├── config.pbtxt
└── 1/
└── model.py
Triton集成支持生产规模部署,具备请求批处理、指标收集和Kubernetes原生扩展功能,同时保持推测解码的优势。
草稿模型选择
草稿模型的质量决定推测解码的效果。质量差的草稿模型会在被目标模型拒绝的提议上浪费计算资源。
选择标准
架构对齐: 与目标模型同系列的草稿模型能实现更高的接受率。Llama 3.2-1B为Llama 3.1-70B提供草稿的效果优于通用小型模型,因为训练数据和分词方式是对齐的。¹⁰
大小比例: 草稿模型通常是目标模型大小的1/10到1/50。更小的草稿生成更快但可能接受率较低。测试多种大小以找到适合您工作负载的最佳比例。
接受率阈值: 目标接受率60%以上。低于50%时,验证开销可能抵消推测带来的收益。使用性能分析来测量您特定提示词的实际接受率。
微调草稿模型
开箱即用的草稿模型在领域特定任务上往往表现不佳。微调能显著提高接受率:¹¹
# 在目标分布上微调草稿模型
from transformers import Trainer, TrainingArguments
# 通过从目标模型采样生成训练数据
# 微调草稿以匹配目标的输出分布
training_args = TrainingArguments(
output_dir="./draft_finetuned",
per_device_train_batch_size=8,
num_train_epochs=3,
learning_rate=2e-5,
)
trainer = Trainer(
model=draft_model,
args=training_args,
train_dataset=target_samples,
)
trainer.train()
组织报告称,领域特定的草稿微调可将接受率提高20-40%。这项投资对高容量推理工作负载带来可观回报。
SGLang的SpecForge
SpecForge为训练草稿模型提供专门构建的生态系统:¹²
- 原生SGLang集成
- 针对Llama 4变体的优化训练配方
- 常见模型的预训练推测器
Red Hat的Speculators项目通过统一的Hugging Face格式和vLLM集成来标准化推测解码,简化了草稿模型的发现和部署。¹³
高级技术
自推测解码(SWIFT)
SWIFT通过自适应跳过目标LLM的中间层来消除对独立草稿模型的需求:¹⁴
- 无需辅助模型
- 无需额外训练
- 在保持输出分布的同时实现1.3x-1.6x加速
该技术通过根据token置信度预测哪些层可以跳过来工作。简单的续写跳过更多层;复杂的推理使用完整模型深度。
# SWIFT概念配置
config = SwiftConfig(
skip_threshold=0.8, # 置信度>0.8时跳过层
min_layers=16, # 始终至少使用16层
adaptive=True # 每个token动态调整
)
SWIFT适合那些维护独立草稿模型会增加不必要复杂性的场景。
Ngram推测
对于结构化输出或可预测模式,ngram匹配可在不使用神经网络的情况下提供推测:
# vLLM ngram推测
vllm serve meta-llama/Llama-3.1-70B-Instruct \
--speculative-model "[ngram]" \
--ngram-prompt-lookup-max 4 \
--num-speculative-tokens 4
Ngram推测识别提示词或生成历史中的重复模式,基于观察到的序列提议token。这种方法对代码生成、结构化数据和重复性内容效果良好。
Medusa头
Medusa在目标模型上附加额外的预测头,并行生成多个候选token:
# Medusa需要修改模型
model = load_medusa_model("path/to/medusa_llama_70b")
# 额外的头预测位置+1、+2、+3等处的token
Medusa完全消除了草稿模型,但需要修改模型和重新训练。拥有自定义模型部署的组织可能会发现Medusa值得尝试,尽管集成复杂度较高。
推测解码何时有效
推测解码在特定条件下回报最高:
有利场景: - 优先考虑延迟的交互式聊天应用 - GPU利用率不足较高的单用户推理 - 长文本生成(故事、文档、代码) - 具有可预测token模式的工作负载
不太有利的场景: - 已使GPU饱和的高吞吐量批处理 - 非常短的响应(很少的token可供推测) - 接受率低的高度创意/随机生成 - 内存受限、草稿模型无法装入的部署
决策框架:
IF (生成过程中GPU利用率< 50%)
AND (平均响应长度> 100 token)
AND (草稿模型可装入内存)
→ 启用推测解码
IF (GPU利用率> 80%)
OR (内存压力高)
→ 改为专注于批处理优化
基础设施考虑
推测解码引入了特定的基础设施需求:
内存开销: 草稿模型消耗额外的GPU内存。确保足够的余量: - 草稿模型权重:根据大小约1-8GB - 草稿token的额外KV缓存 - 验证张量分配
计算模式: 验证阶段产生的突发计算模式与稳定的自回归生成不同。监控GPU利用率变化并相应调整批量大小。
草稿模型服务: 选项包括: - 共置:草稿与目标在同一GPU上运行 - 分离:专用GPU用于草稿生成 - CPU卸载:小型草稿可在CPU上运行以节省内存
大规模部署推测解码的组织可以利用Introl的GPU基础设施专业知识来优化硬件配置和容量规划。
生产部署检查清单
在生产环境启用推测解码前:
1. 基线测量 - 测量当前延迟和吞吐量 - 分析生成过程中的GPU利用率 - 识别瓶颈(内存、计算、通信)
2. 草稿模型选择 - 使用代表性提示词测试多种草稿大小 - 测量您特定分布的接受率 - 如果接受率低于60%考虑微调
3. 配置调优 - 实验num_speculative_tokens(通常4-8) - 平衡接受率与草稿开销 - 使用目标批量大小分析内存使用
**4. 推出