智能AI
morning
给大模型「投机解码」松绑:免训练,即插即用近似验证,速度再提15%
摘要
新智元报道 大语言模型「逐字蹦」式的自回归生成,是推理慢、成本高的核心瓶颈。 投机解码 (Speculative Decoding)让一个轻量「草稿模型」先猜好一整块字、再由大模型一次并行「批改」,是近年最主流的免费提速思路之一,已被vLLM等主流框架广泛采用。 但它有一条「严格」的批改规则: 草稿只要在第一个字上和大模型的最优选择不一致,验证立即停止,后面的草稿全部作废, 哪怕大模型其实已经把这...
ASD
Speculative
Decoding
草稿模型
后面的草稿全部作废
有选择地接受极少数
大模型本来也几乎想选
的分歧字
DSpark
EAGLE3
2026-09-05
1 阅读
约10分钟阅读
新智元
字号:
新智元报道 大语言模型「逐字蹦」式的自回归生成,是推理慢、成本高的核心瓶颈。 投机解码 (Speculative Decoding)让一个轻量「草稿模型」先猜好一整块字、再由大模型一次并行「批改」,是近年最主流的免费提速思路之一,已被vLLM等主流框架广泛采用。 但它有一条「严格」的批改规则: 草稿只要在第一个字上和大模型的最优选择不一致,验证立即停止,后面的草稿全部作废, 哪怕大模型其实已经把这一整段都批改完了。 北京航空航天大学、清华大学、香港大学、北京大学联合团队提出的 近似投机解码(Approximate Speculative Decoding,ASD) ,给这条规则「松了绑」:在严格可控的预算内,有选择地接受极少数「大模型本来也几乎想选」的分歧字,并把后面仍然正确、且已经算好的内容 捡回来接着用 。 论文链接: https://arxiv.org/abs/2608.03447 开源代码: http s://github.com/Kissmetothemoon/ASD 几个关键数字: 在Qwen3-14B + DSpark-14B的 7 个任务 上,固定负载吞吐平均提升 7.78% (区间 3.64%–11.73% ),平均每轮接受token 数从 3.85 提升到 4.20; 在DSpark / EAGLE3 / Medusa三种草稿框架、共 10组 设置中全部取得正增益( 3.05%–15.26% ,平均 7.52% ), 最高提速15.26% ; 在 284B参数 的超大模型DeepSeek-V4-Flash上(8 张 H20 GPU),验证端接受率提升约 10%–16% ; 验证器新增逻辑每个输出token仅 0.045–0.083毫秒 ,且 无需训练、无需微调、无需额外跑一次大模型 ;预算设为零时,严格退回标准投机解码; 更关键的是,ASD是一个 即插即用的验证器模块 :不改动草稿模型与原有流程,在 DSpark、EAGLE3、Medusa等多种主流投机解码 算法 上均实现了正向提速。 研究背景 大语言模型是逐字(token)自回归生成的:每输出一个字,都要把动辄数百、上千亿参数的大模型完整跑一遍。生成一篇上千字的回答,意味着成百上千次串行的大模型前向计算。 投机解码的做法是:让一个轻量的「草稿模型」(drafter)一次性猜好后面的几个字,再由大模型(target)在一次前向中并行「批改」。猜对的字直接采纳,猜错的位置则丢弃草稿、由大模型重新生成。在严格的理论保证下,这种方法可以做到与大模型单独生成完全一致的输出,因此被广泛采用。 但传统的「批改规则」存在一个固有浪费。标准贪心验证采用二元判断:草稿只要在第一个字上与大模型的最优选择(argmax)不一致,验证就立即停止,后面的草稿全部作废。 这就像老师批改一份听写:学生第一个字写错了,老师却把 后面已经批过、而且批对了的内容也一并撕掉 ,让学生重写。规则虽然「严格」,却浪费了已经完成的批改工作。 可问题在于,在这一轮并行验证中,大模型其实已经把这一整段草稿每个位置的分数(logits)都算出来了。这些已经付出的计算,随着第一个分歧的出现被白白丢弃。 更微妙的是:大模型给后面位置打分时,本就是「假设前面草稿都成立」来逐行计算的。也就是说, 如果我们愿意接受前面那一处小分歧,后面紧跟着的一长串字,很可能恰好仍是大模型的最优选择: 它们本来就已经被算对了。 token不一致 不等于任务失败 研究团队注意到一个常被忽视的事实:草稿与大模型在某个字上「不一致」,并不等于最终答案出错。 论文举了很直观的例子:同一个数学结果,可以写成 1776 、 1,776 或带方框的 \boxed{1776} ; 37×48 与 48×37 交换了顺序;推理中「因为……所以……」换成「由于……因此……」, 字面上明明不一样,最终答案却完全相同 。也就是说,token 级别的分歧只是任务质量的一个「不完美代理信号」,而非错误本身。 当然,团队也特别强调:接受一个非贪心的字会改变解码轨迹,这 并非无损优化 。真正的难题不是「无视分歧」,而是 如何在允许极少数分歧的同时,把它们的「累计代价」控制在整个请求范围内,不让近似误差随着输出变长而悄悄累积? 单纯地在每一块草稿里各自放宽,会让偏差在多轮解码中反复叠加;而每块都重置「容错额度」,又无法对同一段生成中已经引入的偏差负责。这正是 ASD 要解决的问题。 研究方法 ASD 的核心思想是:与其在第一个分歧处「一刀切」,不如在严格可控的预算内,有选择地接受极少数「大模型本来也几乎想选」的分歧字,随后直接复用其后仍与大模型贪心选择一致的连续后缀,这部分字无需再做任何近似决策,也无需额外跑一次大模型前向。 当一个草稿字与大模型选择不一致时,ASD 会先计算这个分歧的「 遗憾值」 (regret):即大模型最优选择与草稿选择之间的概率差。遗憾值越小,说明这个字越「几乎打平」、越无伤大雅。为防止「放水」演变成质量滑坡,ASD设置了三道闸门: 局部「遗憾」门控(regret gate) :单个分歧的遗憾值必须足够小,且要和「它后面还能挽救多少字」相称,太不划算就拒绝; 每块异常次数上限(block cap) :一个草稿块内最多允许几处分歧,避免单块内密集放水; 贯穿整个请求的「遗憾预算账本」(request-level ledger) :整段生成中累计接受的偏差总量被约束在固定预算内,绝不让误差随输出长度累积。 三者共同作用,使近似被显式量化、可审计。 ASD 的另一项关键设计是「 已实现前缀后缀复用」 :接受一个分歧字后,后续草稿字是在「包含该分歧的新前缀」下被大模型重新打分的,其中一段连续后缀往往恰好仍是大模型的贪心选择。这段后缀可以直接提交,既不需要额外的大模型前向,也不需要再做新的近似决策, 这正是提速的主要来源 。 工程上,ASD 是一个 独立、即插即用的验证器模块 :它不重写草稿模型、也不改变投机解码的整体流程,只是把标准验证中「首个分歧即截断」的那一步,替换成「预算化的最长前缀选择」,插入现有流水线即可工作。 免训练、免微调、免换草稿模型 ,也不需要额外的大模型前向计算(新增算术复杂度仅 O(K)); 框架无关、广泛兼容 :无论上层用的是 DSpark、EAGLE3 还是 Medusa 等哪种投机解码算法,ASD 都作用在「大模型打完分之后」的同一环节,因此可以直接挂载、即插即用; 预算设为零 = 原样 :B=0 时严格退化为标准贪心验证,与现有系统完全兼容,随时可以切回。 实验结果 团队用两个问题系统验证了方法的有效性。 问题一:只放行「预算内允许」的分歧,能否真的提升 端到端 吞吐? 在 Qwen3-14B 搭配 DSpark-14B、覆盖 GSM8K、MATH-500、HumanEval、MBPP、MMLU、MT-Bench、Alpaca 七个任务的评测中,ASD 的固定负载吞吐较严格投机解码 全部提升 ,幅度 3.64%–11.73% (平均 7.78% )。下表加速比均以「仅用大模型、不做投机解码」为 1.00 基准: 提速最明显的是数学类任务 MATH-500(+11.73%)和 GS
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱