Speculative Decoding & eagle3
导言
Speculative Decoding & eagle3 是种推理时计算换带宽的方法。
投机推理¶
(Speculative Decoding)
在 vLLM 和大语言模型(LLM)推理优化领域,投机推理(Speculative Decoding) 是一项旨在打破“显存带宽瓶颈”并显著提升推理速度的核心技术。
以下是关于投机推理、EAGLE-3 的演进区别以及接受率概念的详细解析:
传统的 LLM 推理是自回归的:每生成一个字(Token),都要把几十 GB 的参数从显存搬到计算单元里跑一遍。这导致推理速度受限于显存带宽,而非计算能力。
投机推理的思路是“先尝试,后验证”:
- 草稿阶段 (Drafting): 先用一个又小又快的模型(草稿模型,Draft Model)快速预测接下来的 个 Token(例如预测 5 个词)。
- 验证阶段 (Verification): 把这 个 Token 一次性打包交给大模型(目标模型,Target Model)进行并行计算。
- 判定: 如果大模型认为这 5 个词是对的,就直接全收,原本要跑 5 次大模型的时间现在只需 1 次。如果错了一个,则从错的那位开始重新生成。
EAGLE-3¶
EAGLE(Extrapolation Algorithm for Greater Language-model Efficiency)是目前投机推理领域的 SOTA(业界领先)方案。EAGLE-3 则是该系列在 2025 年发布的最新一代。
它们的演进逻辑如下:
| 维度 | 传统投机推理 (Vanilla) | EAGLE (v1/v2) | EAGLE-3 (最新) |
|---|---|---|---|
| 预测对象 | 预测 Token ID(离散) | 预测特征向量 (Feature) | 预测 Token + 多层特征融合 |
| 核心机制 | 独立的小模型(如 Llama-68M) | 预测目标模型顶层的 Feature | 训练时测试 (Training-time Test) |
| 特征来源 | 无(仅词表输入) | 仅目标模型顶层特征 | 目标模型的底层、中层、顶层特征融合 |
| 效率 | 较低(小模型太弱) | 较高(利用了语义信息) | 极高(解决了分布偏移问题) |
EAGLE-3 的核心突破点:
- 多层特征融合: 它不只是看大模型的最后一层输出,而是提取了模型不同深度的特征。就像一个人不仅看结论,还参考了思考过程中的中间想法,预测更准。
- 训练时测试 (TTT): 解决了“训练和推理对不上”的问题。它让草稿头在训练阶段就模拟真实的推理环境,使得在高并发(Batch Size 大)的情况下依然能保持极高的预测准确度。
- 加速比: 在 vLLM 中,EAGLE-3 通常能带来 2x 到 3x 的实际吞吐提升。
接受率¶
接受率(Acceptance Rate) 是衡量投机推理效率最关键的指标。
- 定义: 草稿模型预测的 Token 中,被大模型判定为“正确”并予以保留的比例。
- 简单理解: 如果草稿模型猜了 100 个词,大模型验证后发现有 70 个词可以用,那么接受率就是 70%。
为什么它很重要?¶
- 性能正相关: 接受率越高,意味着大模型每次“验证”时能通过的 Token 越多,推理速度就越快。
- 任务敏感: * 代码/文学续写: 逻辑性强,接受率通常较高(可能 > 80%)。
-
数学/复杂逻辑推理: 容错率低,一步错步步错,接受率往往会下降(可能 < 50%)。
-
系统开销: 如果接受率过低(比如低于 20%),投机推理反而会变慢。因为验证失败后大模型还要重新计算,此时“验证”带来的开销超过了“猜”带来的收益。
总结与建议
- 投机推理是“以计算换时间”:利用显卡闲置的计算力去验证草稿,减少显存搬运次数。
- EAGLE-3 是目前 vLLM 支持的最强投机插件,它通过“多层特征融合”大幅拉高了接受率。
- 接受率是你的“天气预报”:如果你的业务场景接受率很低,建议调整草稿模型或关闭投机推理。
训练?投机推理¶
投机推理并非“任意两个模型”拿来就能直接跑,它对模型的匹配性和训练状态有特定要求。
根据实现方式的不同,可以分为以下三类情况:
1. 训练无关(Training-Free):任何模型都能用¶
这种方式最简单,不需要额外的模型,也不需要训练。vLLM 支持以下几种模式:
- Prompt Lookup Decoding(提示词查找): 假设答案就在你的输入提示词里(常见于摘要、文档问答任务)。它直接从 Prompt 里找重复的 个词来“猜”。
- N-gram Matching: 记录已经生成的词序列,如果发现当前生成的词之前出现过,就顺着之前的逻辑往后多猜几个词。
- 适用场景: 显存极其紧张、或者你完全不想折腾模型训练时使用。
2. 经典模式:需要“模型对儿”(Draft-Target Pair)¶
这是 DeepMind 最早提出的方式。
- 要求: 你需要一个大模型(Target)和一个小模型(Draft)。
- 限制: 这两个模型必须共享同一个词表(Tokenizer)。比如你不能拿 Llama 的小模型去给 Qwen 的大模型做投机,因为它们“语言不通”,对同一个编号(ID)的理解不一样。
- 是否需要训练: 通常不需要额外训练,只要在 HuggingFace 上找一个同系列的小模型即可(如
Llama-70B配Llama-68M)。
3. EAGLE-3 / Medusa 模式:需要特殊训练¶
这就是你关心的 EAGLE-3。它属于“外挂头”模式。
- 机制: 它不是一个独立的小模型,而是给大模型装了一个极其轻量的“预测头”(类似插件)。
- 是否需要训练? 是的,必须针对特定的大模型进行训练。
- 为什么: 因为 EAGLE-3 需要读取大模型内部的隐藏层特征(Hidden States)来做预测。每个模型“思考”的方式不同,插件必须针对该模型量身定做。
- 好消息: EAGLE-3 的这个插件非常小(通常只有大模型体积的 2%~5%),训练很快(通常 1-2 天即可完成)。
- 现状: 对于主流模型(如 Llama-3, Qwen-2.5, Mixtral),社区已经有训练好的 EAGLE 权重,你直接下载即用,不需要自己训练。
总结对比¶
| 方案 | 是否需要训练 | 性能提升 | 限制条件 |
|---|---|---|---|
| Prompt Lookup | 否 | 低(仅限特定任务) | 无 |
| 传统投机推理 | 否(需找现成小模型) | 中 | 必须同词表、同系列 |
| EAGLE-3 | 是(针对具体模型训练) | 极高 | 需适配特定版本的插件权重 |
给您的操作建议¶
- 如果你在用主流开源模型(如 Llama-3-8B):
不需要自己训练。去 HuggingFace 搜索
EAGLE-LLaMA3-8B类似的权重,直接在 vLLM 启动脚本中引用即可。 - 如果你在用自己微调过的私有模型:
- 如果微调没有改变模型结构,可以直接尝试用原版模型的 EAGLE 插件,接受率可能会略微下降。
- 如果模型改动很大,你需要使用
EAGLE-3提供的工具包,拿你的训练数据跑一下“外挂头”的训练。
多模态投机¶
确实,在日常讨论中,大家提到投机推理(Speculative Decoding)时,大多是在聊 Llama 3、Qwen 等纯文本模型,而在 VLM(多模态大模型,如 LLaVA、Qwen-VL) 领域,感知的确没那么强烈。
这主要有三个原因:瓶颈位置不同、草稿模型设计更难、以及生态适配较慢。
1. 多模态投机推理“存在感”低?¶
A. 瓶颈不仅在生成(Decode),还在预处理(Prefill)¶
纯文本模型的主要瓶颈是逐个词跳出的“生成阶段”。但多模态模型在生成第一个词之前,需要处理大量的视觉 Token:
- 一张图片可能会被切分成 576 个甚至上千个 Token。
- 大模型在处理这些图片 Token 时,计算量(FLOPs)非常大,显存占用也高。
- 投机推理只能加速“生成词”的阶段,无法加速“看图”的阶段。 如果一张图处理要 500ms,生成只花 200ms,那么优化生成部分的感知就不明显。
B. “视觉一致性”极难对齐¶
投机推理要求小模型(Draft Model)能猜准大模型的思路。
- 在纯文本中,小模型只要学会语法和常识就能猜得八九不离十。
- 在多模态中,小模型必须也具备理解图片的能力。如果小模型看不懂图片里的细节(比如看不清验证码里的数字),它猜出来的 Token 接受率会极低,不仅不加速,反而会拖慢速度。
2. 多模态投机推理¶
虽然感知弱,但学术界和工业界已经有方案了,主要分为两类:
方案一:图像特征压缩¶
(把图变小)
严格来说这不算投机推理,但目的相同。通过把 1000 个视觉 Token 压缩成 100 个,直接减轻大模型的负担。
方案二:多模态投机¶
(如 LLaVA-Spec, Look-ahead)
- 轻量级视觉支路: 专门训练一个超小型的多模态模型作为草稿模型。
- 视觉特征缓存: 大模型在验证时,不需要重新处理图片,而是复用已经提取好的视觉特征。
- EAGLE 架构移植: 最近研究者开始尝试把 EAGLE 的思想(预测隐层特征)用到 LLaVA 等模型上。因为 EAGLE 不需要独立的小模型,只需要一个外挂头,这避开了“再造一个小型多模态模型”的难题。
3. 多模态投机推理的现状¶
| 特性 | 文本模型 (LLM) | 多模态模型 (VLM) |
|---|---|---|
| 成熟度 | 工业级(vLLM 直接内置) | 实验阶段 / 刚起步 |
| 接受率 | 较高且稳定 (60%-80%) | 波动剧烈(受图像复杂度影响) |
| 开源支持 | 非常丰富 (EAGLE-3, Medusa) | 较少,通常需要手动魔改代码 |
4. 未来的趋势¶
随着视频大模型(Video-LLM)的普及,投机推理会变得极其重要。因为视频的 Token 量是图像的几十倍,不进行投机推理,推理成本将高得无法商业化。
总结一下: 你感知不到是因为目前多模态模型的性能瓶颈还有很大一部分在“图片编码”上,且能精准理解图像的“草稿模型”非常难做。
VLM加速特性¶
除了投机推理,多模态大模型(VLM)的加速方案目前主要集中在减少视觉 Token 冗余、推理框架底层优化、以及权重/特征压缩这三个方向。
由于 VLM 的“图像预处理(Prefill)”阶段压力远大于纯文本模型,以下是目前主流且有效的加速手段:
1. 视觉 Token 压缩(Visual Token Reduction)¶
这是 VLM 最核心的加速方式。一张高分辨率图片动辄产生 1000+ 个 Token,但其中大量背景区域(如白墙、蓝天)对理解语义是多余的。
- Token 剪枝(Pruning): 代表性方案如 FastV。它发现 VLM 在语言模型的前两层之后,对大部分视觉 Token 的注意力极低。通过剔除这些“无用”的视觉 Token,可以将计算量直接砍掉 50% 以上,且几乎不损失精度。
- Token 合并(Merging/Pooling): 将相似的视觉特征块合并为一个。例如 ToMe (Token Merging),利用聚类算法把图像中相似的像素块合成一个 Token,减少输入序列长度。
- 动态分辨率(Dynamic Resolution): 如 LLaVA-v1.6 (AnyRes)。它不强行把图缩放到固定大小,而是根据图片长宽比切分。加速方案则是针对简单图片使用低分辨率,复杂图片才启动高分辨率分片。
2. 框架层优化(Serving Frameworks)¶
选择合适的推理引擎能直接带来数倍的吞吐提升。
- SGLang (RadixAttention):
-
核心: SGLang 特有的 RadixAttention 机制对多模态极其友好。当你连续问关于同一张图的问题时,它能自动缓存这张图的视觉特征(KV Cache),下次提问直接秒回,跳过重复的图像编码过程。
-
vLLM V1 (Encoder Cache):
-
核心: vLLM 专门针对 VLM 引入了 Vision Encoder Cache。它将图像编码器的计算与语言模型的生成解耦,并对图像特征进行高效哈希缓存。在多图或长视频理解中,加速效果非常显著。
-
LMDeploy (TurboMind):
- 核心: 采用了纯 C++ 开发的后端,优化了多模态的 Tensor 并行(TP)策略,在 NVIDIA 显卡上拥有极高的执行效率。
3. 量化与低精度推理(Quantization)¶
减少显存占用并提升计算速度。
- 4-bit 量化 (AWQ/GPTQ): 针对 VLM 的核心语言模型(如 Qwen2-7B)进行量化。目前主流框架均支持对 VLM 进行 4-bit 量化,能将显存需求降低 50%-70%。
- 视觉编码器量化: 以往只量化 LLM 部分,现在也有方案对 CLIP / SigLIP 等视觉塔进行 8-bit 量化,加快图像特征提取速度。
- SVD 特征降维 (LoFi): 通过奇异值分解压缩视觉投影层(Projector)的特征维度,减少传给大模型的参数量。
4. 架构级改进¶
直接从模型设计上减负。
- 混合专家模型 (MoE): 比如 DeepSeek-VL2。在生成时,每一位 Token 只激活一小部分神经元,这使得模型可以在保持极高性能的同时,推理开销远低于同参数规模的稠密模型。
- 轻量化视觉投影器: 优化连接图片和文字的“桥梁”(Projector),减少中间层的层数。
总结与对比¶
| 方案 | 解决的问题 | 适用场景 | 提速效果 |
|---|---|---|---|
| Token 剪枝 (FastV) | 视觉 Token 太多 | 长视频、高分辨率图像 | 2x - 4x |
| SGLang 缓存 | 多轮对话重复传图 | 图像对话机器人 | 重复提问瞬间响应 |
| AWQ 量化 | 显存不足、计算慢 | 单卡运行大模型 | 约 1.5x |
| Encoder Cache | 图像编码开销 | 视频理解、大量图片处理 | 减少首字延迟 (TPD) |
建议: 如果您追求单次请求的极致速度,建议配合 FastV 这种 Token 剪枝技术;如果您是做多轮对话产品,强烈建议部署 SGLang 利用其缓存机制。