高效 AI · 语言模型 · Transformer
Domino:把投机解码的草稿与因果修正拆开
Domino 让并行草稿器一次性提出整块 token,再用一个轻量头补回 token 之间的因果依赖,Transformers 下加速最高 5.49 倍,SGLang 吞吐最高 5.8 倍。
快速答案
Domino 是一种投机解码方法,核心是不再逼一个模型同时干两件互相矛盾的活。一个并行主干用单次前向一次性起草整块 token,追求速度;随后一个小巧的 Domino head 再用并行那一步忽略掉的 token 间因果依赖,把这些草稿改写得自洽。论文报告的加速在 Transformers 后端上最高 5.49 倍,在 SGLang 服务下吞吐最高 5.8 倍——而且不改变目标模型的输出,因为投机解码永远只接受目标模型本来也会产出的 token。
Domino 围绕的那个取舍
每个投机解码器都撞同一堵墙。自回归草稿器(EAGLE 一系)一个一个生成草稿 token,每个 token 都能看到前面的,猜得准——但每个草稿 token 都要付一次串行前向,慢。并行草稿器(Medusa 式多头)一口气吐出整块,快,但每个位置都看不到邻居,块内部不自洽,结果被目标模型大量拒绝。要么高接受率,要么低草稿成本,通常只能选一个。
Domino 的主张是:这俩本就是可以分开的问题,应该交给分开的模块去解,而不是让单个草稿器在二者之间妥协。
Domino 怎么工作
草稿阶段分两遍。第一遍,并行主干一次性给块里每个位置算出初步分布——便宜,但每个位置不知道兄弟位置。第二遍,轻量的 Domino head 拿着这些初步分布加上已确认的前缀,用与前缀相关的因果信息逐位置精修。这样得到的块既出得快,又内部自洽,于是在目标模型的验证环节里能存活更大一部分。
第二个关键是训练。Domino 用一套 base-anchored 课程:训练早期让并行主干保持强而稳,只逐步把目标转向经过因果修正的最终分布。动机很实际——如果一开始就猛优化因果修正,容易把那个头所依赖的并行主干给训坏。锚定在基座上,能让两半都保持有用。
为什么「解耦」是有意思的赌注
老实说:Domino 的贡献更多在于架构上的取景方式,而非全新机制。并行草稿和因果精修此前都已存在;它赌的是,把「快速提议」和「修因果依赖」显式拆开,会比把单个草稿器调到两头兼顾给出更好的 Pareto 曲线。加速数字说明这个赌注大体奏效,但这种取景也多了一个模块和一套定制训练计划,工程上并不免费。
它当下值得看的原因在于部署经济学。模型上线后,大部分钱花在推理而非训练,而投机解码是少数对输出分布完全无损的加速手段之一。一个能把加速上限再抬高、又保住这个无损保证的方法,对任何在服务大模型的团队都直接可变现。
关键结果
- 接入 Hugging Face Transformers 后端时,端到端加速最高 5.49 倍。
- 在生产级服务引擎 SGLang 下,吞吐加速最高 5.8 倍——这个数字更有说服力,因为它反映的是批量服务,而非单流延迟。
- 加速在投机解码意义上是无损的:目标模型仍逐块验证草稿,被接受的 token 与目标模型自己生成的完全一致。
- 增益来自抬高「每步接受 token 数」(并行块经因果头后仍自洽),而不只是靠压低草稿成本。
局限与存疑
摘要给出了加速倍数,但在可见部分里并没有把它们钉到与 EAGLE-2/3、Medusa 在同一模型、同一数据集上的接受长度逐项对比——而加速数字对基座模型、批大小、硬件和接受阈值都极其敏感,所以 5.49 倍和 5.8 倍应当读作最佳情形,而非典型值。额外的 Domino head 和 base-anchored 课程带来了单模块草稿器没有的训练与服务复杂度;这份复杂度值不值,取决于离开作者设定后还能留下多少增益。摘要也没有明确的局限章节,因此在不同模型家族、长上下文、超大批量下的稳健性,仅凭摘要无法确定。把它当作一个报告数字很强、但仍待社区复现的有潜力的解耦思路即可。
常见问题
Domino 投机解码是怎么做到最高 5.49 倍加速的?
Domino 用一次并行前向起草整块 token,再跑一个轻量的因果 Domino head 让块在被目标模型验证前先变自洽。每块能存活的比例更高,于是每个目标步能确认更多 token——正是这个更高的接受率(而非单靠更便宜的草稿)带来了 Transformers 上最高 5.49 倍、SGLang 上 5.8 倍的增益。
Domino 会改变模型的输出质量吗?
不会。和所有投机解码一样,Domino 只负责提议候选 token;原始目标模型仍逐个验证,所以任何被接受的 token 都恰好是目标模型本会生成的。它用额外的草稿算力换速度,而不是拿精度去换。
Domino 和 EAGLE、Medusa 有什么不同?
EAGLE 自回归起草(接受率高、逐 token 慢),Medusa 并行起草(快、接受率低)。Domino 把这两件事拆成独立模块:一个并行主干负责快,一个因果头负责补回并行草稿丢掉的 token 依赖,目标是两头好处一起拿。
Domino 里的 base-anchored 训练课程是什么?
这是一套训练计划:早期让并行草稿主干保持强势,只逐步把目标转向经过因果修正的输出。这样能防止过早猛优化因果头,把它所依赖的主干训坏。
一句话:让一个模块负责快速起草、另一个模块补回因果依赖,而不是逼单个草稿器去妥协。阅读 arXiv 原文。