跳到正文
Berkeley AI Research·· 2026-05-08AI 评分34

自适应并行推理:高效推理扩展的下一个范式

Adaptive Parallel Reasoning: The Next Paradigm in Efficient Inference Scaling

AI 导读

伯克利 AI 研究团队梳理了并行推理领域进展,重点分析自适应并行推理——让模型自行决定何时分解并并行化独立子任务、生成多少并发线程以及如何协调。现有方法如 Self-consistency、Best-of-N、Tree of Thoughts、MCTS、ParaThinker、GroupThink 和 Hogwild! Inference 的并行结构多由外部设定,而非模型自主选择。

正文 · AI 翻译

Adaptive Parallel Reasoning overview
自适应并行推理概述。

如果一个推理模型能够自行决定何时分解并并行化相互独立的子任务、生成多少个并发线程,以及如何根据当前问题协调它们,会怎样?我们对并行推理领域的最新进展进行详细分析,尤其是自适应并行推理。

披露:本文既是一篇领域综述,也是对自适应并行推理的一点个人观点。作者之一(Tony Lian)共同领导了 ThreadWeaver(Lian et al., 2025),这是下文讨论的方法之一。作者力求以每种方法自身的立场来呈现它们。

动机

LLM 推理能力的最新进展在很大程度上由推理时扩展驱动,此外还有数据和参数扩展(OpenAI et al., 2024;DeepSeek-AI et al., 2025)。显式输出推理 token(通过中间步骤、回溯和探索)的模型如今在数学、编程和智能体基准测试中占据主导地位。这些行为使模型能够探索替代假设、纠正早期错误并综合得出结论,而不是固守单一解法(Wen et al., 2025)。

问题在于,顺序推理的规模随探索量线性增长。扩展顺序推理 token 是有代价的,因为模型有可能超出有效上下文限制(Hsieh et al., 2024)。中间探索路径的累积使模型在关注其上下文中的信息时难以区分干扰项,导致模型性能下降,这也被称为上下文腐化(Hong, Troynikov and Huber, 2025)。延迟也随推理长度成比例增长。对于需要数百万 token 进行探索和规划的复杂任务,用户等待数十分钟甚至数小时才能得到答案并不罕见(Qu et al., 2025)。随着我们继续沿输出序列长度维度扩展,我们也会让推理变得更慢、更不可靠、计算更密集。并行推理已成为一种自然的解决方案。与其顺序探索路径(Gandhi et al., 2024)并在每一步累积上下文窗口,我们可以让模型独立地(线程之间不依赖彼此的上下文)且并发地(线程可以同时执行)探索多个线程。

Figure 1: Sequential vs. Parallel Reasoning
图 1:顺序推理与并行推理

近年来,越来越多的研究在合成场景(例如 Countdown 游戏(Katz, Kokel and Sreedharan, 2025))、真实数学问题和通用推理任务中探索了这一想法。

从固定并行到自适应控制

现有方法表明并行推理有所帮助,但其中大多数仍然在模型之外决定并行结构,而不是让模型自行选择。

简单的 fork-and-join。

  • 自洽性/多数投票——独立采样多条完整推理轨迹,从每条中提取最终答案,并返回最常见的那个(Wang et al., 2023)。
  • Best-of-N(BoN)——与自洽性类似,但使用训练好的验证器来选择最佳解,而不是使用多数投票(Stiennon et al., 2022)。
  • 尽管实现简单,这些方法往往会在各分支间产生冗余计算,因为轨迹是独立采样的。

基于启发式的结构化搜索。

  • 思维树 / 图 / 骨架 —— 一族结构化分解方法,使用已知的搜索算法(BFS/DFS)探索多个备选“思维”,并通过基于 LLM 的评估进行剪枝(Yao et al., 2023;Besta et al., 2024;Ning et al., 2024)。
  • 蒙特卡洛树搜索(MCTS) —— 通过采样随机推演来估计节点价值,并以置信上界(UCB)式的探索-利用方式扩展搜索树(Xie et al., 2024;Zhang et al., 2024)。
  • 这些方法通过将任务分解为互不重叠的子任务,改进了简单的分叉-汇合方式;然而,它们需要关于分解策略的先验知识,而这并不总是已知的。

近期变体。

  • ParaThinker —— 训练模型以两个固定阶段运行:首先生成多个并行的推理线程,然后对它们进行综合。他们引入了可训练的控制 token(<think_i>)和思维特定的位置嵌入,以通过两阶段注意力掩码在推理期间强制独立性,并在总结期间实现受控整合(Wen et al., 2025)。
  • GroupThink —— 多个并行推理线程可以在 token 级别看到彼此的中间进展,并在生成过程中进行调整。与先前在独立请求上运行的并发方法不同,GroupThink 运行单个 LLM,同时产生多个相互依赖的推理轨迹(Hsu et al., 2025)。
  • Hogwild! Inference —— 多个并行推理线程共享 KV 缓存,并在没有显式协调协议的情况下决定如何分解任务。工作线程并发地生成到共享注意力缓存中,使用 RoPE 以不同顺序拼接各个 KV 块而无需重新计算(Rodionov et al., 2025)。

Figure 2: Various Strategies for Parallel Reasoning
图 2:并行推理的各种策略

上述方法有一个共同的局限:是否并行化、并行化的程度以及搜索策略都被强加给模型,而不管问题是否真的能从中受益。然而,不同的问题需要不同级别的并行化,而这对于并行化的有效性至关重要。例如,一个将相同的并行结构应用于“25+42 等于多少?”和“你能在其中将一条单位长度的线段连续旋转 180° 的最小平面区域是什么?”的框架,对前者是在浪费算力,对后者则可能使用了错误的分解策略。在上述方法中,模型并未被教会这种自适应行为。一个自然的问题随之而来:如果模型能够根据手头的问题自行决定何时并行化、生成多少线程以及如何协调它们,会怎样?

自适应并行推理(APR)通过将并行化纳入模型生成的控制流来回答这一问题。正式定义而言,自适应性指模型在推理时动态地在并行与串行操作之间分配计算资源的能力。换言之,具备自适应并行推理(APR)能力的模型被训练来协调其控制流——何时顺序生成序列、何时并行生成序列。

需要注意的是,自适应并行推理这一概念由Learning Adaptive Parallel Reasoning with Language Models(Pan et al., 2025)提出,但它是一种范式而非具体方法。在本文中,APR指代该范式,而“APR方法”则指Pan et al.(2025)中的具体实现。

这一转变之所以重要,有三个原因。与思维树相比,APR不需要针对特定领域的分解启发式方法。在强化学习过程中,模型通过试错学习通用的分解策略。事实上,模型会以涌现的方式发现有用的并行化模式,例如将下一步与对前一步的自验证并行执行,或用备用方案对冲主方案,这些模式很难手工设计(Yao et al., 2023;Wu et al., 2025;Zheng et al., 2025)。

与BoN相比,APR避免了冗余计算。APR模型在分支之前就能控制每个并行线程将做什么。因此,APR可以学会在将任务分配给独立线程之前,先产生一组独特、不重叠的子任务(Wang et al., 2023;Stiennon et al., 2022;Pan et al., 2025;Yang et al., 2025)。

与非自适应方法相比,APR可以选择不并行化。自适应模型可以调整并行化程度,使问题的复杂度与并行化的复杂度和开销相匹配(Lian et al., 2025)。

在实践中,这是通过让模型输出特殊token来控制何时并行推理、何时串行推理来实现的。下面是一个精简的ThreadWeaver风格轨迹:一个<Parallel>块下有两个大纲和两条路径,然后各线程就一个单一的方框答案达成一致。

Figure 3: Example of an Adaptive Parallel Reasoning Trajectory from ThreadWeaver, manually condensed for ease of illustration.
图3:来自ThreadWeaver的自适应并行推理轨迹示例,为便于说明而手动精简。

Figure 4: Special Tokens Variants across Adaptive Parallel Reasoning Papers
图4:自适应并行推理论文中的特殊Token变体

自适应并行化的推理系统

我们实际上如何执行并行分支?我们从计算机系统中汲取灵感,特别是多线程和多进程。这项工作的大部分都可以视为利用fork-join设计。

在推理时,我们实际上是要求模型执行map-reduce操作:

  • 将问题分叉为子任务/线程,并发处理它们
  • 将它们合并为最终答案

Figure 5: Fork-join Inference Design
图5:Fork-join推理设计

具体来说,模型会遇到一个子任务列表。然后它会预填充每个子任务,并将它们作为独立请求发送给推理引擎进行处理。这些线程随后并发解码,直到遇到结束标记或超过最大长度。此过程会阻塞,直到所有线程完成解码,然后聚合结果。这在各种自适应并行推理方法中很常见。然而,在聚合过程中会出现一个问题:分支中生成的内容无法在 KV 缓存层面轻松聚合。这是因为独立线程中的 token 从相同的位置 ID 开始,导致编码重叠,并且在将 KV 缓存合并回去时出现非标准行为。同样,由于独立线程之间不相互关注,它们拼接后的 KV 缓存会导致非因果注意力模式,而基础模型在训练期间从未见过这种模式。

为了解决这个问题,该领域在如何执行聚合过程上分成了两派,区别在于它们是修改推理引擎还是绕过它。

Multiverse 修改推理引擎以在连接处重用 KV 缓存。在深入研究 Multiverse(Yang et al., 2025)的内存管理之前,让我们先了解在“连接”阶段之前 KV 缓存是如何处理的。注意每个独立线程如何共享前缀序列,即子任务列表。如果不进行优化,每个线程都需要预填充并重新计算前缀序列的 KV 缓存。然而,这种冗余可以通过 SGLang 的 RadixAttention(Sheng et al., 2023)来避免,它将多个请求组织成一棵基数树,这是一种 trie(前缀树),其元素序列长度可变而非单个元素。这样,唯一的新 KV 缓存条目来自独立线程的生成。

Figure 6: RadixAttention’s KV Cache Management Strategy
图 6:RadixAttention 的 KV 缓存管理策略

现在,如果一切顺利,所有独立线程都已从推理引擎返回。我们的目标现在是弄清楚如何将它们合成回单个序列,以继续解码后续步骤。事实证明,我们可以在合成阶段重用这些独立线程的 KV 缓存。具体来说,Multiverse(Yang et al., 2025)、Parallel-R1(Zheng et al., 2025)和 NPR(Wu et al., 2025)修改推理引擎,以复制每个线程生成的 KV 缓存,并编辑页表,从而将非连续内存块拼接成单个 KV 缓存序列。这避免了第二次预填充的冗余计算,并尽可能重用现有的 KV 缓存。然而,这有几个主要限制。

首先,这种方法需要修改推理引擎以执行非标准的内存处理,这可能导致意外行为。具体来说,由于合成请求引用了先前请求的 KV 缓存,这会造成系统的脆弱性以及出现坏指针的可能性。另一个请求可能进来并在合成请求完成之前驱逐所引用的 KV 缓存,从而要求它暂停并触发对先前线程请求的重新预填充。这个问题导致 Multiverse 研究人员(Yang et al., 2025)限制了推理引擎可以处理的批大小,从而限制了吞吐量。

Figure 7: KV Cache “Stitching” During Multiverse Inference
图 7:Multiverse 推理过程中的 KV Cache“拼接”

其次,这种方法改变了模型看待序列的方式,从而产生了一种模型未在预训练中见过的分布偏移,因此需要更大量的训练来对齐行为。具体来说,当我们以这种方式拼接 KV cache 时,我们创建了一个具有非标准位置编码的序列。在独立线程生成期间,所有线程都从相同的位置索引开始,并且只关注先前的子任务,而不关注彼此。因此,当这些线程合并回来时,得到的 KV cache 具有非标准的位置编码,并且不使用因果注意力。因此,这种方法需要大量训练才能使模型对齐这种新行为。为了解决这个问题,Multiverse(Yang et al., 2025)及相关工作在训练期间应用修改后的注意力掩码,以防止独立线程相互关注,从而使训练和推理行为保持一致。

Figure 8: Multiverse’s Attention Mask
图 8:Multiverse 的注意力掩码

既然非标准 KV cache 管理带来了这些问题,我们能否尝试一种无需修改引擎的方法?

ThreadWeaver 保持推理引擎不变,并将编排移到客户端。 ThreadWeaver(Lian et al., 2025)将并行推理纯粹视为客户端问题。“Fork”过程与 Multiverse 几乎相同,但 join 阶段对内存的处理非常不同,因为它不修改引擎内部。相反,客户端将来自独立分支的所有文本输出拼接成一个连续的序列。然后,引擎执行第二次 prefill,为结论生成步骤生成 KV cache。虽然这引入了 Multiverse 试图避免的计算冗余,但 prefill 的成本显著低于 decoding。此外,这在推理期间不需要特殊的注意力处理,因为第二次 prefill 使用因果注意力(线程可以看到彼此),使得更容易将顺序自回归模型适配到此任务。

Figure 9: ThreadWeaver’s Prefill and Decode Strategy
图 9:ThreadWeaver 的 Prefill 和 Decode 策略

我们应该如何训练模型来学习这种行为?朴素地说,对于每条并行轨迹,我们可以按照我们的推理模式将其分解为多个顺序片段。例如,我们会训练模型在给定 prompt 时输出子任务,在给定 prompt+子任务分配时输出各个线程,以及在给定 prompt+子任务+对应线程时输出结论。然而,这似乎冗余且计算效率不高。我们能做得更好吗?事实证明,可以。正如 ThreadWeaver(Lian et al., 2025)中那样,我们可以将一条并行轨迹组织为前缀树(trie),将其展平为单个序列,并在训练期间(而非推理期间!)应用仅祖先注意力掩码。

Figure 10: Building the Prefix-tree and Flattening into a single training sequence
图 10:构建前缀树并展平为单个训练序列

具体来说,我们应用掩码和位置 ID 来模拟推理行为,使得每个线程仅以 prompt+子任务为条件,而从不关注兄弟线程或最终结论。

引擎无关的设计使其易于采用,因为无需另寻托管方式,还能利用现有硬件基础设施。随着现有推理引擎的改进,它也会变得更好。更重要的是,采用引擎无关的方法,我们可以服务一个混合模型,轻松在顺序和并行思考模式之间切换。

训练模型使用并行性

一旦推理路径存在,下一个问题就是教模型使用它。需要演示,因为模型必须学会输出编排控制流的特殊 token。我们发现基础模型的指令遵循能力不足以生成并行线程。

这里有一个有趣的问题:SFT 训练是诱导出了一种此前缺失的、用于并行执行的基本推理能力,还是仅仅将模型已有的预训练能力对齐到特定的控制流 token 语法。通常的观点是 SFT 教授新知识;但与普遍看法相反,一些论文——尤其是 Parallel-R1(Zheng et al., 2025)和 NPR(Wu et al., 2025)——认为他们的 SFT 演示只是诱导了格式遵循(即如何构造并行请求)。我们将其留作未来工作。

Figure 11: Sources of Parallelization Demonstration Data
图 11:并行化演示数据的来源

演示教会了并行控制流的语法,但并未完全解决激励问题。在理想情况下,我们只需奖励结果准确性,并行化模式就会自然涌现,因为它通过 SFT 学会了输出特殊 token,类似于长 CoT 的涌现。然而,研究人员(Zheng et al., 2025)观察到这还不够,我们确实需要并行化激励。那么问题就变成了:我们如何判断模型何时在有效并行化?

仅结构奖励太容易被钻空子。 天真地,我们可以根据生成的线程数量给予奖励。但模型可以生成许多短小无用的线程来骗取奖励。好吧,这行不通。那么,仅仅正确使用并行结构就给一个二元奖励如何?这在一定程度上解决了模型滥发新线程的问题,但模型仍然学会了在不需要时生成线程。Parallel-R1 的作者(Zheng et al., 2025)引入了一种交替调度,只在 20% 的时间里奖励并行结构,这成功增加了并行结构的使用(13.6% → 63%),但对整体准确性影响甚微。

采用这种仅结构的方法,我们可能偏离了提高准确性和降低延迟的初衷……我们如何直接优化帕累托前沿?准确性很简单——我们只需看结果。延迟呢?

效率奖励需要跟踪关键路径。在仅串行的轨迹中,我们可以根据生成的总 token 数来衡量延迟。为了将其扩展到并行轨迹,我们可以关注关键路径,即因果相关的最长 token 序列,因为这直接决定了我们的端到端生成时间(即挂钟时间)。例如,当有两个 <Parallel> 部分,每个部分有五个线程时,关键路径将经过第一个并行部分中最长的线程,然后是任何串行 token,接着是第二个并行部分中最长的线程,依此类推,直到序列结束。

Figure 12: Critical Path Length Illustration
图 12:关键路径长度示意图

目标是最小化关键路径的长度。同时,我们仍然希望模型花费 token 来并行探索线程。为了结合这两个目标,我们可以关注使关键路径在总花费 token 中占更小的比例。ThreadWeaver 的作者(Lian et al., 2025)将并行化奖励表述为 $1 - L_{\mathrm{critical}} / L_{\mathrm{total}}$,对于串行轨迹该值为 0,并且随着关键路径相对于生成的总 token 变小而线性增加。

并行效率应以正确性为门槛。直观上,当多条轨迹都正确时,我们应该给并行化效率更高的轨迹分配更多奖励。但当它们都不正确时呢?我们应该分配任何奖励吗?大概不应该。

为了形式化这一点,$R = R_{\mathrm{correctness}} + R_{\mathrm{parallel}}$。假设结果是二元的正确性,这可以写成 $R = \mathbf{1}(\text{Correctness}) + \mathbf{1}(\text{Correctness}) \times (\text{some parallelization metric})$。这样,模型只有在回答正确时才能获得并行化奖励,因为我们不想在模型无法正确回答问题的情况下对其施加并行化约束。

Figure 13: Differences in Reward Designs Across Adaptive Parallel Reasoning Works
图 13:自适应并行推理工作中奖励设计的差异

评估与开放问题

当一切尘埃落定,这些自适应并行方法实际表现如何?嗯……这是一个很难回答的问题,因为它们在模型选择和指标上各不相同。模型选择取决于训练方法、SFT 问题难度和序列长度。在像 s1k 这样包含研究生级别数学和科学问题的困难数据集上运行 SFT 时,研究人员选择了一个大型基础模型(Multiverse 使用 Qwen2.5 32B(Yang et al., 2025))来捕捉解决方案轨迹背后的复杂推理结构。在运行 RL 时,由于计算成本限制,研究人员选择了一个小型、非 CoT 的指令模型(4B、8B)。

Figure 14: Difference in Model Choice Across Adaptive Parallel Reasoning Papers
图 14:自适应并行推理论文中模型选择的差异

每篇论文还就自适应并行推理如何为该研究领域做出贡献提供了略有不同的解读。它们针对不同的理论目标进行优化,因此使用了略有不同的指标集:

  • Multiverse 与 ThreadWeaver(Yang 等,2025;Lian 等,2025)旨在以更快的速度达到顺序 AR 模型级别的准确率。Multiverse 表明,在相同的固定上下文窗口下,APR 模型可以达到更高的准确率;而 ThreadWeaver 表明,APR 模型在获得相当准确率的同时实现了更短的端到端 token 延迟(关键路径长度)。
  • NPR(Wu 等,2025)将顺序回退视为一种失败模式,并针对 100% 真实并行率进行优化,该指标以并行 token 与总 token 的比率来衡量。
  • Parallel-R1(Zheng 等,2025)不关注端到端延迟,而是针对探索多样性进行优化,将 APR 呈现为一种中期训练探索脚手架,可在 RL 之后带来性能提升。

开放问题

尽管自适应并行推理代表了迈向更高效推理时扩展的有希望的一步,但仍存在重大的开放问题。

如上所述,Parallel-R1(Zheng 等,2025)将 APR 呈现为一种中期训练探索脚手架,而非主要是一种推理时技术。这引出了一个更根本的问题:推理时的并行化是否持续提升准确率,还是它主要作为训练时探索脚手架才有价值?Parallel-R1 表明,在 RL 期间由并行结构所诱导的多样性,可能比测试时的并行化本身更重要。

一个相关的担忧是稳定性。当并行化奖励放松时,模型也持续倾向于回退到顺序推理。Parallel-R1 的作者表明,在 200 步之后移除并行化奖励会导致模型恢复为顺序行为。这是训练稳定性问题、奖励信号设计问题,还是并行结构与自回归预训练塑造模型先验的方式确实存在冲突的证据?

除了 APR 是否有效之外,部署本身也带来了问题。我们能否设计出在推理时考虑可用计算预算的训练方法,使并行化决策是硬件感知的,而非纯粹由问题驱动的?

最后,上述所考虑的并行结构本质上是扁平的。如果我们允许并行化深度 > 1 会怎样?递归语言模型(RLM;Zhang、Kraska 和 Khattab,2026)能有效管理长上下文,并展现出有前景的推理时扩展能力。当 RLM 使用激励自适应并行化的端到端 RL 进行训练时,其表现如何?

致谢

我们感谢 Nicholas Tomlin 和 Alane Suhr 为我们提供的有益反馈。我们感谢 Christopher Park、Karl Vilhelmsson、Nyx Iskandar、Georgia Zhou、Kaival Shah 和 Jyoti Rani 提出的富有洞见的建议。我们感谢 Vijay Kethana、Jaewon Chang、Cameron Jordan、Syrielle Montariol、Erran Li 和 Anya Ji 进行的有价值的讨论。我们感谢 Jiayi Pan、Xiuyu Li 和 Alex Zhang 就自适应并行推理和递归语言模型进行的有建设性的通信。

来源:Berkeley AI Research · bair.berkeley.edu