投机解码实战:原理、性能边界与大模型推理加速配置

投机解码如何让大模型更快输出,同时保留目标模型的采样行为?本文讲清草稿生成、精确验证与接受率,比较独立草稿模型、EAGLE 和 MTP,给出 vLLM、SGLang、TensorRT-LLM 配置示例,并说明并发、显存与草稿开销如何影响收益,帮助自建推理服务和托管 API 团队确定评估与上线条件。

发布于

投机解码实战:原理、性能边界与大模型推理加速配置

投机解码能让现有大语言模型更快地响应,同时仍由原模型决定最终输出。目标模型原本每次生成 1 个 token;启用投机解码后,系统先提出一小段候选内容,再一次验证多个候选 token。当草稿中被接受的 token 带来的收益足以抵消额外开销时,就值得启用,但必须保留目标模型的精确验证规则。

对应用开发者来说,关键是自己的工作负载下,回答能否更快地流式输出。对推理服务运维人员来说,还要看并发请求增多、显存吃紧时,这种收益能否保住。对托管 API 的使用方来说,则要先确认服务商是否开放了这项优化,或在文档中说明了它的使用情况。

**文档核验日期:2026 年 10 月 30 日。**涉及 vLLM、SGLang 和 NVIDIA TensorRT-LLM。下文命令依据其在线文档编写,属于配置示例,并非本文实测的基准结果。

什么是投机解码?

**先由开销较小的候选生成器预测后续 token,再由目标模型决定哪些能进入最终回答。**token 是模型处理文本的基本单位,往往只是一个单词的一部分。目标模型,就是我们希望保留其生成行为的那个模型。

可以把它想成助手替一位严谨的编辑起草句子。助手可以提前写,但内容必须经过编辑审核,才能交给读者。加速的关键在于:目标模型可以同时评估这段候选续写,不必每生成一个新 token 都单独走一遍生成流程。NVIDIA 将这一过程描述为先生成草稿,再由目标模型执行一轮验证。TensorRT-LLM 文档

草稿提出用字母表示的 token A B C;目标模型验证后保留 A B,并补入 X,最终得到 A B X。
假设进行一轮贪心解码:保留已接受的前缀,替换被拒绝的 token,再从已确定的输出继续生成。

图中的字母代表 token ID。草稿模型提出 A B C。贪心解码每次选择概率最高的下一个 token;假设目标模型认可 A B,但认为后面应该是 X,那么最终确定的输出就是 A B X。草稿中接在被拒绝的 C 后面的内容也会被丢弃,因为它依赖的是错误的前缀。

如果采用采样生成,接受规则就不只是检查两个模型是否选中了同一个词。标准投机采样会用到目标模型与候选生成器的概率;候选被拒绝时,还会使用修正分布。正是这一步修正,保证了目标模型的概率分布得以保留。原始算法还允许在整段草稿全部被接受时,由目标模型额外生成一个 token。Leviathan、Kalman 和 Matias 的原始论文

因此,小模型只负责提出候选,不是接管回答的后备模型。使用精确验证器时,草稿质量差应当只会拖累速度,而不会悄悄让小模型替目标模型作答。

“不用更弱的模型回答”究竟意味着什么?

**应当要求的保证,是保留目标模型的概率分布。**这并不意味着每次随机生成的回答都相同,也不会消除目标模型的错误,或提升它的推理能力。vLLM 文档指出,即使算法本身无损,数值计算和批处理的影响仍可能造成输出差异。vLLM 无损保证

评估投机解码时,应固定目标模型权重、量化方式和采样设置。否则多个变量同时变化,就无法判断质量差异究竟来自哪一项改动。

投机解码有哪些方案?各引擎的文档在哪里?

**选择方案时,要以具体目标模型和推理服务版本的支持情况为准。**这些方案都遵循“先起草、再验证”的机制,区别在于草稿从哪里来。

独立草稿模型

由一个较小的语言模型使用自身权重生成候选 token。这是最直观的方案,但需要额外加载并运行一个模型。兼容性和预测一致性都很重要:模型更小,不代表它就适合当草稿模型。vLLM 通常要求两者共用词表,同时也记录了一种适用范围受限的跨词表方案。vLLM 草稿模型文档

如果服务的显存占用已经接近上限,再加一个模型可能并不是合适的第一步。如果服务对延迟敏感、资源尚有余量,又有匹配良好的草稿模型,就可以开展一次受控实验。

EAGLE 投机解码

EAGLE 是 Extrapolation Algorithm for Greater Language-model Efficiency 的缩写。它使用与目标模型配套、经过训练的辅助草稿模型,借助目标模型的内部表示预测后续内容。这类经过学习的组件常被称为预测头,需要使用兼容的检查点。vLLM 将 eagle 和 eagle3 区分为不同配置。vLLM EAGLE 文档

目标模型与 EAGLE 检查点必须配套使用。不能只因为检查点名称里出现了同一个模型家族,就认为它兼容。部署记录应写明对应的模型家族、模型修订版本和推理服务实现。

MTP 投机解码

多 token 预测,即 MTP,利用模型原生具备的能力来预测未来 token。vLLM 为受支持的模型家族提供了这条路径,文档中的启动示例不需要指定独立草稿模型。模型本身不具备这项能力时,把 method 设为 mtp 也不会让它凭空获得能力。vLLM MTP 文档

如果当前服务已在使用受支持的 MTP 检查点,可以先按文档尝试原生路径,再考虑添加其他独立草稿模型。这样能减少需要处理的兼容性选择,但性能收益仍须实测。

下表直接链接到各引擎的官方文档,方便查找配置入口。表中列有某种方案,不代表所有模型都能在该引擎下使用它。

算法名称和执行架构是两回事。TensorRT-LLM 当前版本的发行说明移除了独立草稿引擎的执行路径,保留了将草稿模块作为子模块放入模型内部的实现。这不代表草稿模型与目标模型配合的方案消失了,而是说,旧部署指南描述的执行路径可能已不再存在于所安装的版本中。TensorRT-LLM 发行说明

什么情况下能加速,什么情况下反而拖慢?

**把所有额外开销都算进去后,有效输出仍然更快,投机解码才有价值。**接受率很重要,但它只是这笔账的一部分。

接受的 token 必须抵得过草稿开销

接受率等于被接受的草稿 token 数除以提出的草稿 token 数。单看这个比例,无法知道生成候选付出了多少成本。更慢的草稿模型即使与目标模型更一致,也仍可能让整个服务变慢。

可以用下面的关系判断是否值得启用:

(草稿生成时间 + 验证时间 + 协调时间)÷ 最终确定的输出 token 数 < 基线每个 token 的解码时间

这是一种核算方法,不是性能预测。应在自己的硬件上测量完整一轮的耗时。“最终确定的输出 token 数”不仅包括被接受的草稿 token,还包括目标模型提供的修正 token 或额外 token。

代码编辑助手的输入输出常有重复的局部结构,可能有利于草稿预测。客服助手的草稿模型也许很擅长预测礼貌用语和衔接语,却难以准确预测产品相关的回答。两类工作负载应分别测量,不能仅凭平均接受率决定是否上线。

草稿越长,被拒绝后可能浪费的工作也越多。只有额外确定的输出足以补偿草稿生成、验证和显存开销时,才应继续增加草稿深度。Fireworks 的调优指南也强调了这一点:接受率本身不足以证明能加速。Fireworks 基准测试指南

批大小会改变加速空间

**先从受解码速度限制的交互式工作负载入手,再测试峰值并发。**vLLM 明确将投机解码定位于请求速率中低、受内存带宽限制的工作负载。在这种计算步骤中,限制进度的主要因素是模型数据的搬运,而非可用算力。vLLM 工作负载指南

并行验证可以利用原本闲置的算力,但繁忙的服务器可能已经把这部分算力用于其他请求。因此,单个聊天请求的延迟下降,并不能证明繁忙接口的总吞吐量也会上升。

连续批处理会动态改变每个生成步骤中一起处理的请求。评估投机解码时,应使用实际调度器,并模拟真实的请求到达模式。空闲的开发环境接口和有请求排队的生产接口,是两种不同的实验条件。

不要设定一个通用的批大小分界线。有效边界取决于模型、硬件、草稿方案和调度器。应同时观察延迟与容量:回答流式输出有多快,以及服务在满足延迟目标的前提下能持续承载多少流量。

显存压力可能抵消收益

**草稿模型也要占用有限的 GPU 显存预算。**独立权重、草稿状态和验证工作区,会挤占原本可用于承载请求的空间。用于保存已有 token 注意力状态的 KV 缓存,也是这份预算的一部分。

固定容量的显存空间容纳目标模型权重和 KV 缓存;加入草稿模型后,留给缓存的空间变小。
显存预算示意图,并非实测比例。权重与缓存的实际共享方式取决于投机解码方案。

例如,某个文档助手处理短提示词很快,但处理长文档时已接近容量上限。短提示词上的投机解码试验成功,并不能说明生产环境的缓存与草稿模型仍能同时放得下。应在真实并发下,测试计划支持的最长上下文。

SGLang 的显存不足排查指南明确列出了减少显存预留、图捕获规模、草稿树大小和并发请求数等方法。如果必须降低并发才能容纳投机解码,这就是需要量化的取舍,并非没有代价的优化。SGLang 显存故障排查

要加速的是用户真正等待的环节

回答慢,可能是开始输出前等得太久,也可能是开始后流式输出慢,还可能是模型之外的环节造成了延迟。投机解码针对的是生成阶段。如果应用的大部分时间花在检索文档或等待工具调用上,解码循环更快,对用户体验的改善也可能很小。

测量时,应把排队、预填充和解码分开。预填充处理提示词,解码生成后续内容。大模型推理指南解释了这些阶段,每秒 token 数指南则区分了输出速度和请求总吞吐量。

如何启用投机解码?

**在推理服务进程中启用投机解码,再与同一目标模型未启用时的表现对比。**以下示例假设已安装相应引擎、硬件能容纳所选模型,并且有权访问其权重。文档必须与部署版本对应;在线 latest 页面不保证与旧容器兼容。

vLLM 投机解码配置

vLLM 通过 --speculative-config 接收 JSON 配置。下面是独立草稿模型示例,目标模型、草稿模型和草稿长度均来自其在线服务文档:

Bash
vllm serve Qwen/Qwen3-4B-Thinking-2507 \
  --speculative-config '{"method":"draft_model","model":"Qwen/Qwen3-0.6B","num_speculative_tokens":5}'

其中的 5 只是示例使用的候选 token 数,并非推荐的最优值。文档已将旧的独立参数 --speculative-model 和 --num-speculative-tokens 标记为弃用。vLLM 启动示例

vLLM 官方草稿模型配置文档。
vLLM

原生 MTP 的文档示例使用 Xiaomi MiMo 基础模型检查点:

Bash
vllm serve XiaomiMiMo/MiMo-7B-Base \
  --tensor-parallel-size 1 \
  --speculative-config '{"method":"mtp","num_speculative_tokens":1}'

这是另一个模型的示例,不能直接拿来给上面的 Qwen 目标模型充当草稿模型。关键限制是检查点是否受支持:模型必须本身具备 MTP 能力,引擎也必须支持它。vLLM MTP 启动示例

SGLang 投机解码配置

SGLang 当前的重叠调度器示例,提供了一组采用独立草稿模型方案的 Qwen 目标模型与草稿模型:

Bash
python3 -m sglang.launch_server \
  --model Qwen/Qwen2.5-7B-Instruct \
  --speculative-algorithm STANDALONE \
  --speculative-draft-model-path Qwen/Qwen2.5-1.5B-Instruct \
  --speculative-num-steps 4 \
  --speculative-eagle-topk 1 \
  --speculative-num-draft-tokens 5 \
  --mem-fraction-static 0.7 \
  --cuda-graph-max-bs-decode 8

当前重叠调度路径要求设置 --speculative-eagle-topk 1。从其他示例照搬更宽的草稿树,会与这条路径不兼容。调度器和草稿设置应按文档配套使用。SGLang 重叠调度器示例

SGLang 官方投机解码方案与配置文档。
SGLang

针对不断变化的工作负载,SGLang 还为受支持的 EAGLE 配置单独提供了自适应投机解码文档。在期待系统自动调整草稿深度之前,应先核对该功能的使用条件。SGLang 自适应投机解码

TensorRT-LLM 配置

TensorRT-LLM 通过 YAML 配置接收投机解码设置。将以下内容保存为 speculative.yaml:

YAML
speculative_config:
  decoding_type: Eagle3
  max_draft_len: 4
  speculative_model: yuhuili/EAGLE3-LLaMA3.1-Instruct-8B

这里的草稿长度和检查点来自 NVIDIA 的投机解码配置示例。按服务命令行文档启动与之匹配的目标模型:

Bash
trtllm-serve meta-llama/Llama-3.1-8B-Instruct \
  --config speculative.yaml
NVIDIA TensorRT-LLM 官方投机解码配置文档。
TensorRT-LLM

除了配置名称,还要核对检查点的代际。NVIDIA 文档将 Eagle 列为 Eagle3 的兼容别名,但旧代 EAGLE 检查点仍不兼容这条路径。TensorRT-LLM 检查点限制

如果还在同时选择推理引擎和投机解码方案,可以参考更完整的 vLLM 与 SGLang 对比。即使草稿模型很合适,也无法弥补引擎缺少应用所需其他功能的问题。

使用托管 API 的团队也能受益吗?

**可以,前提是服务商明确说明并启用了这项能力;能控制哪些设置,则取决于具体服务。**即使没有自己的 GPU,也能受益于服务商的推理优化。

托管推理服务商 Fireworks AI 的文档说明,在专用部署中,多数受支持模型配有默认草稿模型。没有默认草稿模型的模型,除非另行配置,否则不会启用基于模型的投机解码。无服务器服务的配置由 Fireworks 管理,因此,专用部署提供了这些参数,并不代表每个无服务器接口都在使用投机解码。Fireworks 部署文档

Fireworks 官方专用部署投机解码文档。
Fireworks AI

如果调用方只需对文件做少量修改并重新生成,Fireworks 还提供了 Predicted Outputs:通过请求中的 prediction 字段传入预期文本。已知文本构成了另一种候选来源,也可以与基于模型的投机解码配合使用。这适合预先知道大部分输出内容的任务,而不是开放式提问。Fireworks Predicted Outputs

使用其他托管接口时,在宣称有此收益或添加相关设置之前,应先找到该服务自己的文档。仅凭 API 兼容性,无法判断接口背后是否运行了草稿模型,更无法知道具体是哪一个。

哪些说法夸大了效果?

**投机解码的收益有条件,不能套用一个通用加速倍数。**本文不承诺具体加速数字,因为其他目标模型、草稿模型、GPU 和流量组合测出的结果,无法代表自己的服务。

“接受的 token 越多,应用就越快”,忽略了草稿成本、排队,以及应用在生成之外所做的工作。“草稿越长越好”,忽略了拒绝后被丢弃的计算。“无损就意味着字符串完全一致”,则混淆了采样分布与某一次随机输出。

代价最大的误判,是把空闲接口上的测试结果当成生产容量结论。开发者可能觉得代码助手变快了,共享接口能承载的并发会话却变少了。应先明确优化目标是响应延迟、持续吞吐量,还是两者兼顾,并将它写进上线标准。

下周可以怎样开始验证?

开发者应在解码成为瓶颈时试用兼容的候选生成方案;运维人员应要求它在生产负载下仍有收益;托管 API 团队则应从服务商文档明确提供的控制项入手。

  1. 建立能代表真实流量的基线

    固定目标模型、采样设置、提示词组合和输出长度分布。覆盖短对话、长上下文与请求到达高峰。记录首 token 延迟、每个输出 token 的耗时、请求尾延迟,以及可持续的请求吞吐量。

  2. 只调整投机解码配置

    选择受支持的原生 MTP 路径,或文档明确列出的目标模型与草稿模型组合。记录引擎和检查点的修订版本。从精确验证开始,并确认服务实际加载了预期方案。

  3. 统计有效产出,同时监控显存

    在记录延迟的同时,跟踪被接受的候选 token 和最终确定的输出 token。观察缓存压力、失败请求,以及服务器能够承载的并发量。只有整个服务得到改善,更长的已接受前缀才有价值。

  4. 按工作负载逐步上线,并保留回退路径

    分别在启用和关闭投机解码的情况下回放代表性请求。除了速度,还要检查输出有效性和任务质量。只为满足延迟与容量要求的工作负载启用该配置,并保留基线配置以便回滚。

如果大部分等待发生在生成之前,就先解决那个瓶颈。如果显存放不下草稿模型,或者没有兼容检查点,就让目标模型按原方式运行。某项功能可用,并不能证明当前部署就需要它。

开发者常见问题

什么是 ngram 投机解码?

它通过匹配提示词中的 token 序列来提出续写候选,不需要独立草稿模型。当输出会重复输入中已有的文本时,值得评估这种方案。vLLM 将其称为 ngram 方法。vLLM n-gram 文档

投机解码的接受率能说明什么?

它表示候选 token 中通过验证的比例,但没有计入生成这些候选所花的时间,也不能证明接口变快了。还应测量每个最终确定的输出 token 对应的实际耗时。

vLLM 投机解码配置应该放在哪里?

通过 --speculative-config 将 JSON 配置传给推理服务进程。它控制服务器如何生成草稿,并不是可以发给任意兼容 API 的通用请求参数。

订阅邮件通讯,获取构建与运维 AI 系统的实用指南。

发布日期
分类
Build
Amazon Bedrock AgentCore 架构详解:组件分工、适用场景与试点指南

Amazon Bedrock AgentCore 架构详解:组件分工、适用场景与试点指南

Amazon Bedrock AgentCore 能替代智能体技术栈中的哪些自建工作?本文梳理各组件的职责与适用场景,讲清执行隔离、会话归属、记忆、工具访问和业务权限的边界,并说明运行限制与区域支持如何影响架构。附 CLI 试点流程,帮助团队判断何时值得采用、哪些责任仍需自己承担,以及上线前该验证什么。2026年10月30日Build
GPU云服务器怎么选?2026 年 7 家服务商价格与场景对比

GPU云服务器怎么选?2026 年 7 家服务商价格与场景对比

GPU云服务器怎么选?对比 Runpod、Lambda、CoreWeave、Vast.ai、Modal、Together AI 和 Google Cloud,梳理模型微调、无服务器推理与集群的适用场景。从显存需求、计费单位、冷启动、存储和传输费用到区域限制,帮你核算完整成本,判断该租机器、调用 API,还是预留算力。2026年10月30日Build
GitHub Copilot Fusion 怎么用?模型协作、档位与积分详解

GitHub Copilot Fusion 怎么用?模型协作、档位与积分详解

GitHub Copilot Fusion 如何选择并协调模型?本文梳理各客户端的开启方式、Standard、High 与 Max 档位,以及 AI 积分计费和官方基准的适用边界,并给出单仓库试用流程,帮助开发者和团队核对用量、审查完整代码差异,再决定是否将 Fusion 设为默认配置。2026年10月29日Build
Bright Data 评测:代理、网页抓取与 AI 数据采集怎么选

Bright Data 评测:代理、网页抓取与 AI 数据采集怎么选

Bright Data 评测:梳理代理、Web Unlocker、Scraper API、数据集及智能体浏览器的用途与计费差异,说明共享免费额度、住宅代理 KYC 和浏览器限制。结合价格监控成本模型,比较 Firecrawl 与 Browse AI,帮助开发和运营团队按所需输出、时效与维护职责选型。2026年10月28日Build
Dify vs n8n 怎么选?知识库、工作流与自部署全面对比

Dify vs n8n 怎么选?知识库、工作流与自部署全面对比

Dify vs n8n 怎么选?从文档知识库、RAG、聊天与智能体,到跨系统业务流程和人工审批,比较两者各自适合的任务。梳理云端价格、执行次数、自部署资源、商业许可证与协作限制,并说明何时值得组合使用、何时需要迁移,以及如何验证回答质量和故障恢复路径,帮助团队按实际交付目标确定选型和预算。2026年10月27日Build
Zapier 替代品怎么选?2026 年六款自动化工具对比与迁移指南

Zapier 替代品怎么选?2026 年六款自动化工具对比与迁移指南

寻找 Zapier 替代品?按成本、自托管、AI 智能体、开源许可和 Microsoft 365 场景,对比 Make、n8n、Gumloop、Activepieces、Power Automate 与 Pipedream Connect,梳理计费、免费方案、版本与迁移步骤,判断何时值得换,何时继续用 Zapier。2026年10月27日Build
AutoGen vs LangGraph:多智能体框架怎么选,旧项目怎么迁

AutoGen vs LangGraph:多智能体框架怎么选,旧项目怎么迁

AutoGen 已归档,现有项目该迁往哪里?本文对比它的多智能体对话与 LangGraph 有状态工作流,梳理状态保存、人工审批、重启恢复和重复执行的边界,并分析 Microsoft Agent Framework 的迁移路径,帮助团队保留业务记录、验证完整流程,按应用需求选择框架。2026年10月27日Build
LoRA 训练怎么做:微调原理、QLoRA、部署与评估

LoRA 训练怎么做:微调原理、QLoRA、部署与评估

LoRA 训练适合解决提示词反复失效的风格、格式和任务判断问题。本文讲清 LoRA 与 QLoRA 的原理、参数量和显存的区别,比较托管 API 与自有 GPU 路线,梳理适配器导出、合并和部署限制,并给出从基线、验证集到最终测试的评估流程,帮助你判断微调是否真正改善应用,以及改进能否在上线后保留。2026年10月26日Build
订阅通讯

每周日,一封信。写运转中的系统,不写热评。

每周一期。无垃圾邮件。随时退订。