AdaPLD:自适应检索与复用的高效无模型推测解码方法

arXiv cs.CL 论文

摘要

AdaPLD是一种无需训练的方法,通过自适应检索结合词汇与语义相似度,并构建分支复用假设来处理续写不确定性,从而提升无模型推测解码的效率,最高可实现3.10倍解码加速。

arXiv:2606.05742v1 公告类型:新 摘要:推测解码通过在单次目标模型前向传播中验证多个推测令牌,减少顺序解码迭代次数,从而加速生成。无模型变体通过复用生成过程中已有的文本和模型状态,避免使用辅助推测模型,但其加速效果取决于所构建推测的可靠性。我们指出现有基于复用的方法存在两个局限:基于词汇锚定的检索在表面形式变化时召回率有限;当检索到的上下文无法唯一确定续写时,确定性跨度复制可能脆弱。我们提出\emph{AdaPLD},一种无需训练的方法,可自适应地改进检索和推测构建。AdaPLD保留高精度词汇复用的同时,在词汇匹配失败时利用语义相似度恢复额外的复用机会。它还构建分支复用假设来处理续写不确定性,而非依赖单一的复制跨度。在多个基准测试中,AdaPLD减少了目标模型前向传播次数,实现了高达$3.10\times$的解码加速。
查看原文
查看缓存全文

缓存时间: 2026/06/05 08:07

# AdaPLD:面向高效无模型推测解码的自适应检索与重用

**来源:** https://arxiv.org/html/2606.05742

Runheng Liu¹\*, Jincheng Xie²\*, Wen Hu³, Xingchen Xiao¹, Heyan Huang¹†  
¹北京理工大学计算机科学与技术学院  
²清华大学数学科学系  
³JDT AI Infra  
\{rhliu, xcxiao, hhy63\}@bit.edu.cn  
[email protected]  
[email protected]  
\*共同第一作者。  
†通讯作者。

###### 摘要

推测解码通过在单次目标模型前向传播中验证多个草稿令牌,从而加速生成过程,减少顺序解码迭代次数。无模型变体避免使用辅助草稿模型,转而重用生成过程中已有的文本和模型状态,但其加速效果取决于所构建草稿的可靠性。我们识别出现有基于重用的方法存在两个局限性:基于词汇锚点的检索在表面形式变化时召回率有限,以及当检索到的上下文不能唯一确定后续内容时,确定性跨度复制可能变得脆弱。我们提出 **AdaPLD**,一种无需训练的方法,能够自适应地改进检索和草稿构建。AdaPLD 在保留高精度词汇重用的同时,当词汇匹配失败时利用语义相似性恢复额外的重用机会。此外,它构建分支化的重用假设以应对后续内容的不确定性,而不是依赖单一复制跨度。在多个基准测试中,AdaPLD 减少了目标模型前向传播次数,实现了高达 3.10× 的解码加速。

---

## 1 引言

大语言模型(LLMs)越来越多地用于开放式生成和指令跟随,但其部署常受限于解码延迟。在自回归解码过程中,每个输出令牌都需要基于之前生成的序列进行一次独立的目标模型前向传播,形成严格的顺序瓶颈。推测解码(SD)通过使用目标模型验证提议的草稿续写来缓解这一瓶颈,并在草稿与目标模型一致时,在单次解码迭代中接受多个令牌(Leviathan et al., 2023a;Chen et al., 2023)。无模型 SD 是一种特别实用的变体,因为它避免了辅助草稿模型的需求,将核心挑战转移到从生成过程中已有的信息构建有用的草稿上。

避免辅助草稿模型使得草稿构建成为影响无模型 SD 效率的核心因素。由于没有学习过的预测器来预测未来令牌,基于重用的方法必须首先定位相关的上下文位置,然后将其后续内容转化为目标模型可能接受的草稿。因此,现有的无模型 SD 方法可以看作做出两个连续决策:**检索决策**,从可用上下文中识别可重用的位置;**重用决策**,根据检索到的位置构建草稿续写(Saxena, 2023;Somasundaram et al., 2025)。任一决策的失败都会导致接受前缀变短,限制推测的收益。

第一个瓶颈在于检索。大多数现有方法通过令牌级别的匹配(通常使用 n-gram 启发式)来识别重用位置。当存在表面重叠时,精确匹配是准确的,但当有用的重用位置以不同的表面形式表达时,其召回率有限。PLD+(Somasundaram et al., 2025)通过使用表示相似性对词汇检索到的候选进行重排序来改进候选选择。然而,这种重排序仅在词汇候选被找到之后进行,因此无法解决词汇匹配未能发现任何候选位置的情况。这种候选可达性约束导致“无命中”失败模式:当锚点令牌在可用上下文中未出现时,检索返回空候选集,此时无法应用基于重用的草稿构建,即使存在语义相关但表面形式不同的上下文。

第二个瓶颈在于重用构建。即使找到了一个合理的重用位置,现有方法通常通过从该位置确定性复制单个连续跨度来构建草稿(Saxena, 2023;Hu et al., 2025;Somasundaram et al., 2025)。这种设计将检索到的锚点之后的后续内容视为唯一的重用假设。然而,在当前的上下文下,局部匹配的锚点可能支持多种合理的下一个令牌续写方式,而跨度复制只暴露了在记忆中观察到的历史续写。这限制了重用构建仅沿单一路径进行,排除了探索其他续写的可能性。

我们提出 **AdaPLD**,一种无需训练的推测解码方法,改进了上下文重用的两个阶段。对于检索,AdaPLD 将词汇匹配作为默认路径,仅当词汇匹配找不到候选时才调用语义检索,从而在保持精确匹配精度的同时扩展候选可达性。对于重用构建,AdaPLD 将选定的锚点视为一组重用假设的起点,而不是单个复制跨度:它在多个合理的下一个令牌上进行分支,然后在可能的情况下用短后续重用步骤扩展每个分支。实验显示,AdaPLD 在输入引导生成、代码编辑和推理基准测试中均实现了一致的解码加速,最大加速比达到 3.10×。

我们的贡献有三点:(1) 我们识别出词汇“无命中”检索是基于重用的无模型 SD 的关键瓶颈;(2) 我们提出了一种自适应检索与重用方法,结合了“严格优先”语义检索与基于分支的草稿构建;(3) 我们在多种生成场景中验证了 AdaPLD 的效率提升。

## 2 相关工作

##### 推测解码。
推测解码通过将草稿提议与目标模型验证分离来加速自回归生成(Leviathan et al., 2023b;Chen et al., 2023)。草稿机制提议候选未来令牌,目标模型并行验证这些令牌,当验证成功时,允许在单次解码迭代中接受多个令牌。常见的方法使用辅助草稿模型生成提议,而无模型变体避免额外模型,从解码过程中已有的信息构建草稿。本文聚焦于无模型设置,并改进如何识别和利用可重用上下文进行草稿构建。

##### 通过上下文重用实现无模型草稿构建。
无模型推测解码方法无需训练单独的提议器即可构建草稿令牌。一种常见策略是上下文重用,即将输入文本、解码历史或外部检索源中的草稿令牌复制或派生出来(Saxena, 2023;Fu et al., 2024;Oliaro et al., 2025;He et al., 2024;Ma et al., 2025;Luo et al., 2025)。在这些方法中,草稿构建通常围绕两个步骤组织:识别候选重用位置,以及将这些位置之后的令牌用作草稿续写。这种设计消除了辅助草稿模型的成本,但使得解码效率依赖于能否找到相关的重用位置以及其续写是否能提供有用的草稿。

##### 上下文重用的检索信号。
大多数上下文重用方法通过令牌级别的匹配来识别候选位置,例如 n-gram、后缀或精确令牌匹配(Fu et al., 2024;Oliaro et al., 2025;He et al., 2024;Gritta et al., 2025;Ma et al., 2025;Song et al., 2025;Hu et al., 2025;Quan et al., 2025;Zhao et al., 2024)。词汇匹配在存在精确重叠时高效且准确,但它将检索限制在表面形式重叠暴露的位置。近期工作如 PLD+(Somasundaram et al., 2025)引入表示相似性对词汇检索到的候选进行重排序,改进了重用锚点的选择。然而,这些语义信号是在词汇候选生成之后应用的,因此无法解决词汇匹配返回零候选的情况。AdaPLD 则使用语义检索作为词汇检索失败时的回退路径,在保留词汇匹配作为默认检索机制的同时扩展候选可达性。

## 3 方法

### 3.1 问题设定

我们考虑使用目标 LLM 进行自回归生成。给定输入提示 `x` 和之前生成的令牌 `y`(构成上下文),模型在每个解码步骤输出下一个令牌的概率分布。目标是将这些输入连接成单个序列 `c`,并依次生成令牌。在推测解码中,我们维护一个可重用上下文 `R`,其中包含之前生成的令牌以及输入提示。为了构建草稿,检索步骤从 `R` 中确定一个位置 `p`,使得上下文 `c[≤p]` 与当前前缀相似;重用步骤使用 `p` 之后的令牌构造假设的续写。然后目标模型验证这些提议并决定接受哪些令牌。我们定义两个关键指标:**接受长度** `T`(单次验证通过中接受的令牌数量)和**前向传播次数** `F`(解码过程中总的目标模型前向传播次数)。`F` 与 `T` 的比值决定了总加速比。

### 3.2 自适应检索

现有的基于重用的方法在通过词汇匹配识别重用位置方面是有效的,但它们存在召回率限制,当没有完全匹配的上文令牌可用时(一种无命中情况),会完全错过重用机会。我们提出一个两阶段检索过程,在该过程中,词汇匹配作为主路径运行,语义搜索有效地起到保留作用:仅在词汇候选不存在时才激活。

**词汇检索阶段。** 给定当前前缀 `c[≤i]`(其中 `i` 是当前位置),我们使用最近生成的令牌 `c[i]` 作为查询,通过 n-gram 索引在 `R` 中搜索精确匹配。候选集 `P` 由 `c[i]` 出现的所有位置组成,并且这些位置的前 ctxt 个令牌与 `c[i-ctxt+1:i]` 完全匹配(确保局部上下文匹配)。如果 `|P| > 0`,则检索过程结束,我们进入重用构建阶段。

**语义回退阶段。** 当 `|P| = 0` 时,我们调用语义检索。我们将当前前缀的最后 ̃ 个令牌编码为 `h_current`,并计算 `R` 中每个位置 `j` 的隐藏状态 `h_j`(从目标模型在所有之前前向传播中缓存的键-值对中获取,因此不会增加额外开销)。我们从 `R` 中检索与查询相似度最高的 `τ` 个位置。相似度通过点积度量:`score(j) = h_current^T · h_j / (|h_current| · |h_j|)`。为了保持效率,我们在推理过程中维护一个滑动窗口索引,该索引存储最近 30 个前向传播步骤的隐藏状态,从而将搜索范围稳定。

### 3.3 分支化重用假设

一旦选择了重用位置 `p*`,我们构建一个草稿假设树,该树捕获多个可能的续写路径,而不是单个确定性的跨度。

**严格命中路径(词汇候选)。** 当检索是严格的(词汇命中)时,我们构建两条路径:
- **主路径** `d_main` 直接复制从位置 `p*` 开始的跨度:`d_main = x[p*+1: min(p*+L, i-1)]`,其中 `L` 是最大草稿长度。
- **分支路径** `d_branch` 通过从目标模型(使用复制跨度中的第一个令牌作为查询)获取前 K 个下一个令牌,并对每个令牌进行扩展,但排除主路径已覆盖的第一个令牌。

**语义命中路径(语义回退)。** 当检索是语义的(回退激活)时,我们不从历史中复制跨度,因为语义相关的位置不一定产生相同的令牌。相反,我们仅使用分支化路径,从当前上下文生成可变假设:`d_branch = TopK(M, c[≤p*], K)`。此外,由于这些分支不直接来自历史,我们通过从目标模型在相同分支位置获取成功令牌来增强它们:对于 `d_branch` 中的每个令牌 `t_k`,我们沿单个令牌扩展:`d_succ = {M(c[≤p*] + t_k)[1] for t_k in d_branch}`。这提供了每个分支的一个短续写。

**树构建与验证。** 收集所有路径后,我们利用标准树验证框架通过目标模型并行验证草稿 `T`。接受操作根据目标模型的分布进行,并更新令牌序列。

### 3.4 整体算法

算法 1 展示了 AdaPLD 的完整流程。

---

**算法 1** AdaPLD:自适应检索与重用

**输入:** 目标模型 M,输入 x,上下文 R(初始化为 x),草稿长度 L,分支数 K,回退窗口大小 δ,严格模式阈值 s(此变量未明确定义,此处假设为启发式)

**输出:** 生成的序列 y

1: y ← []
2: i ← |x| - 1  ▷ 最近生成的令牌索引(初始为提示的最后一个)
3: **while** 未达到结束条件 **do**
4:   i ← i + 1
5:   P ← LexicalRetrieval(M, x_{≤i-1}, x_{i-1})  ▷ 词汇检索:精确匹配 x_{i-1} 并检查上下文窗口
6:   strict ← (|P| > 0)
7:   **if** |P| = 0 **then**
8:     P ← SemanticFallback(x_{i-1}, x_{≤i-1}, δ)  ▷ 语义回退:使用隐藏状态检索 top-δ 位置
9:     **if** |P| = 0 **then**
10:      自回归步骤:运行 M,追加下一个令牌,更新上下文;**continue**
11:    **end if**
12:  **end if**
13:  p* ← RerankByHiddenState(P, x_{≤i-1}, i)  ▷ 使用隐藏状态对候选重排序
14:  **if** strict **then**  ▷ 严格路径:复制主路径;分支排除复制的第一个令牌
15:    d_main ← x[p*+1: min(p*+L, i-1)]
16:    d_branch ← TopKNextTokens(M, x_{≤p*}, K) \ {d_main[1]}
17:    d_succ ← ∅
18:  **else**  ▷ 语义命中:分支 + 后继
19:    d_main ← ∅
20:    d_branch ← TopKNextTokens(M, x_{≤p*}, K)
21:    d_succ ← SuccessorDraft(M, x_{≤p*}, d_branch, L)
22:  **end if**
23:  T ← BuildDraftTree(d_main, d_branch, d_succ)
24:  z ← VerifyAndAccept(M, x_{≤i-1}, T)
25:  **if** |z| = 0 **then**
26:    自回归步骤:运行 M,追加下一个令牌,更新上下文
27:  **else**
28:    追加 z,更新上下文(红利令牌为最后一个(z))
29:  **end if**
30: **end while**
31: **return** y

相似文章

减少草稿,增加检索:用于推测解码的混合树构建

Hugging Face Daily Papers

Graft 是一个无需训练的框架,通过结合剪枝与检索来增强推测解码,从而提高接受率和推理速度。在短上下文基准测试中,其加速比最高可达5.41倍,在Qwen3-235B上相比EAGLE-3的提升最高可达21.8%。

跨语言的推测解码

arXiv cs.CL

本文比较了三种策略以提高非英语语言的推测解码效率,发现任务特定蒸馏能提高接受率但泛化性差,而n-gram草稿模型尽管接受率较低,却能提供持续的加速。