BAIR:Berkeley AI Research Blog
精选
64AI 编辑部评分,满分 100

自适应并行推理:高效推理扩展的新范式

2026-05-08 17:00· 91天前· C.K. Wolfe
AI 导读

自适应并行推理是一种新范式,它让大语言模型能够自主决定何时分解任务、并行处理多少子任务以及如何协调结果,以应对序列推理中因探索路径增长而导致的延迟增加和“上下文腐化”问题。近期研究如ThreadWeaver和Multiverse通过动态控制并行线程,在数学与代码推理基准上取得了显著性能提升,同时大幅降低了延迟。这标志着从固定并行策略到自适应智能控制的转变,为复杂任务的推理提供了高效且可扩展的解决方案。

推荐理由

模型自己决定何时并行、开几个线程,这篇BAIR博客把Multiverse和ThreadWeaver的系统设计掰开了讲,做推理系统和RL的同学应该看看。

正文 · AI 翻译

如果一个推理模型能够自行决定何时分解并并行化独立子任务、生成多少个并发线程,以及如何根据当前问题协调这些线程,那会怎样?我们提供了对并行推理领域近期进展的详细分析,特别是自适应并行推理。

声明:本文既是对自适应并行推理的领域综述,也包含相关观点。其中一位作者(Tony Lian)共同领导了 ThreadWeaver(Lian 等人,2025),这是下文讨论的方法之一。作者旨在客观呈现每种方法本身。

动机

大语言模型推理能力的最新进展,除了数据和参数规模的扩展(OpenAI 等人,2024;DeepSeek-AI 等人,2025),很大程度上是由推理时计算规模驱动的。那些显式输出推理 token(通过中间步骤、回溯和探索)的模型,如今在数学、编程和智能体基准测试中占据主导地位。这些行为使模型能够探索替代假设、纠正早期错误并综合结论,而非固守单一解决方案(Wen 等人,2025)。

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

图 1:顺序推理与并行推理

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

从固定并行到自适应控制

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

简单的分叉与合并。

  • 自洽性/多数投票——独立采样多条完整的推理轨迹,从每条轨迹中提取最终答案,并返回出现频率最高的那个(Wang 等人,2023)。
  • 最佳 N 选一(BoN)——与自洽性类似,但使用经过训练的验证器来选择最佳解决方案,而非采用多数投票(Stiennon 等人,2022)。
  • 尽管这些方法实现简单,但由于轨迹是独立采样的,它们往往会在不同分支间产生冗余计算。

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

  • 思维树/思维图/思维骨架——一系列结构化分解方法,利用已知搜索算法(广度优先搜索/深度优先搜索)探索多个备选"思维",并通过基于大语言模型的评估进行剪枝(Yao 等人,2023;Besta 等人,2024;Ning 等人,2024)。
  • 蒙特卡洛树搜索——通过随机采样推演来估计节点值,并采用上置信界风格的探索-利用策略扩展搜索树(Xie 等人,2024;Zhang 等人,2024)。
  • 这些方法通过将任务分解为不重叠的子任务,改进了简单的分叉-合并方式;然而,它们需要事先了解分解策略,而这并非总是已知的。

近期变体。

  • ParaThinker——训练模型在两个固定阶段运行:首先生成多条并行推理线程,然后对其进行综合。该方法引入了可训练的控制 token(<think_i>)和思维特定的位置嵌入,通过两阶段注意力掩码在推理过程中强制保持独立性,并在汇总阶段实现受控整合(Wen 等人,2025)。
  • GroupThink——多条并行推理线程可以在 token 级别相互查看彼此的局部进展,并在生成过程中动态调整。与先前基于独立请求的并发方法不同,GroupThink 运行单个大语言模型,同时生成多条相互依赖的推理轨迹(Hsu 等人,2025)。
  • Hogwild! 推理——多条并行推理线程共享 KV 缓存,并在没有显式协调协议的情况下决定如何分解任务。工作线程并发生成内容,写入共享注意力缓存,利用 RoPE 以不同顺序拼接各个 KV 块,无需重新计算(Rodionov 等人,2025)。

图 2:多种并行推理策略

上述方法存在一个共同的局限性:是否并行化、并行化的程度以及搜索策略都是强加给模型的,而不管问题本身是否真的需要这样做。然而,不同的问题需要不同程度的并行化,而这恰恰是并行化有效性的关键所在。例如,一个对“25+42等于多少?”和“在哪个最小平面区域内,你可以将单位长度的线段连续旋转180°?”这两个问题应用相同并行结构的框架,在前者上浪费了算力,在后者上则可能使用了错误的分治策略。在上述方法中,模型并未学会这种自适应行为。一个自然的问题由此产生:如果模型能根据手头的问题自行决定何时并行化、生成多少个并行线程以及如何协调它们,结果会怎样?

自适应并行推理(APR)通过将并行化纳入模型生成的流程控制中,回答了这个问题。从形式上讲,自适应性指的是模型在推理时,能够在并行操作和串行操作之间动态分配算力的能力。换句话说,具备自适应并行推理(APR)能力的模型被教会了如何协调其流程控制——即何时串行生成序列,何时并行生成序列。

需要指出的是,自适应并行推理这一概念是由《Learning Adaptive Parallel Reasoning with Language Models》(Pan 等人,2025)这篇工作提出的,但它是一种范式,而非具体方法。在本篇文章中,APR 指代这种范式,而“APR 方法”则特指 Pan 等人(2025)论文中的具体实现。

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

与 BoN 相比,APR 避免了冗余计算。APR 模型在分支展开之前就能控制每个并行线程将要执行的任务。因此,APR 可以学习在将一组独特、不重叠的子任务分配给独立线程之前,先生成这些子任务(Wang 等人,2023;Stiennon 等人,2022;Pan 等人,2025;Yang 等人,2025)。

与非自适应方法相比,APR 可以选择不进行并行化。自适应模型能够调整并行化程度,使其与问题的复杂度相匹配,同时兼顾并行化本身的复杂度和开销(Lian 等人,2025)。

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

图 3:来自 ThreadWeaver 的自适应并行推理轨迹示例,为便于说明已手动精简。

图 4:自适应并行推理相关论文中的特殊 Token 变体

面向自适应并行的推理系统

我们实际上如何执行并行分支?我们从计算机系统中汲取灵感,特别是多线程和多进程技术。这方面的大部分工作都可以看作是采用了分叉-合并(fork-join)的设计模式。

在推理时,我们实际上是要求模型执行一次映射-归约(map-reduce)操作:

  • 将问题分叉(Fork)为多个子任务/线程,并发处理它们
  • 将它们合并(Join)成一个最终答案

图 5:分叉-合并(Fork-join)推理设计

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

为了解决这个问题,该领域分成了两种不同的思路来执行汇总过程,其区别在于它们是修改推理引擎还是绕开推理引擎。

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

图 6:RadixAttention 的 KV 缓存管理策略

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

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

图 7:Multiverse 推理过程中的 KV 缓存“拼接”

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

图 8:Multiverse 的注意力掩码

鉴于这些由非标准 KV cache 管理引发的问题,我们能否尝试一种无需修改引擎的方法?

ThreadWeaver 保持推理引擎不变,并将编排工作转移到客户端。ThreadWeaver(Lian 等人,2025)将并行推理纯粹视为一个客户端问题。“分叉”过程与 Multiverse 几乎相同,但合并阶段处理内存的方式截然不同,因为它**不**修改引擎内部结构。相反,客户端将所有独立分支的文本输出连接成一个连续的序列。然后,引擎执行第二次预填充,为结论生成步骤生成 KV cache。虽然这引入了 Multiverse 试图避免的计算冗余,但预填充的成本远低于解码。此外,这不需要在推理期间进行特殊的注意力处理,因为第二次预填充使用了因果注意力(各线程可以相互看到),这使得将顺序自回归模型适配到该任务变得更加容易。

图 9:ThreadWeaver 的预填充与解码策略

我们应该如何训练模型来学习这种行为?最直接的做法是,对于每条并行轨迹,我们可以按照推理模式将其拆解成多个连续的片段。例如,我们会训练模型根据提示词输出子任务,根据提示词+子任务分配输出各个独立线程,以及根据提示词+子任务+对应线程输出结论。然而,这看起来有些冗余且计算效率不高。我们能做得更好吗?事实证明,可以。正如 ThreadWeaver(Lian 等人,2025)所做的那样,我们可以将一条并行轨迹组织成一个前缀树(trie),将其展平为单个序列,并在训练期间(而非推理期间!)应用仅祖先注意力掩码。

图 10:构建前缀树并展平为单个训练序列

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

这种引擎无关的设计使得采用变得容易,因为你无需找出单独的托管方法,并且可以利用现有的硬件基础设施。随着现有推理引擎的改进,它也会变得更好。更重要的是,通过引擎无关的方法,我们可以提供一种混合模型,轻松地在顺序思维模式和并行思维模式之间切换。

训练模型使用并行能力

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

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

图 11:并行化演示数据的来源

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

仅基于结构的奖励太容易被钻空子。简单来说,我们可以根据生成的线程数量给予奖励。但模型可以生成许多短小、无用的线程来骗取奖励。好吧,这行不通。那么,对正确使用并行结构给予二元奖励怎么样?这能部分解决模型滥用新线程的问题,但模型仍然会在不需要时学习生成线程。Parallel-R1(Zheng 等人,2025)的作者引入了一种交替调度方案,仅在 20% 的情况下奖励并行结构,这成功提高了并行结构的使用率(从 13.6% 提升至 63%),但对整体准确率影响甚微。

采用这种仅基于结构的方法,我们可能正在偏离最初提高准确率和降低延迟的目标……我们如何能直接针对帕累托前沿进行优化?准确率很简单——我们只需查看结果。那延迟呢?

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

图 12:关键路径长度示意图

目标是使关键路径的长度最小化。同时,我们仍然希望模型花费模型 token 来并行探索线程。为了结合这两个目标,我们可以专注于使关键路径占总模型 token 消耗的比例更小。ThreadWeaver(Lian 等人,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})$。这样,模型只有在回答正确时才能获得并行化奖励,因为我们不希望模型在无法正确回答问题的情况下施加并行化约束。

图 13:自适应并行推理工作中奖励设计的差异

评估与待解决问题

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

图 14:自适应并行推理论文中模型选择的差异

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

  • Multiverse 和 ThreadWeaver (Yang et al., 2025; Lian et al., 2025) 旨在以更快的速度实现与序列式自回归模型相当的精度。Multiverse 表明,在相同的固定上下文窗口下,APR 模型能够实现更高的准确率;而 ThreadWeaver 则表明,APR 模型在实现可比精度的同时,端到端的 token 延迟(关键路径长度)更短。
  • NPR (Wu et al., 2025) 将序列回退视为一种失败模式,并针对 100% 的“真正并行率”进行优化,该指标通过并行 token 数与总 token 数的比值来衡量。
  • Parallel-R1 (Zheng et al., 2025) 不关注端到端延迟,而是针对探索多样性进行优化,将 APR 作为一种中期训练探索框架,在强化学习之后提供性能提升。

待解决的问题

尽管自适应并行推理代表了向更高效的推理时扩展迈出的有希望的一步,但仍有大量未解决的关键问题。

如上所述,Parallel-R1(Zheng 等人,2025)将 APR 作为一种中期训练探索框架提出,而非主要作为推理时技术。这引出了一个更根本的问题:推理时的并行化是否总能稳定提升准确率,还是它主要作为训练时的探索框架才有价值?Parallel-R1 表明,强化学习过程中并行结构带来的多样性,可能比测试时并行化本身更为重要。

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

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

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

致谢

我们感谢 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 就自适应并行推理与递归语言模型进行的建设性通信交流。

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

自适应并行推理:高效推理扩展的新范式

BAIR:Berkeley AI Research Blog·2026-05-08 17:00·91天前·C.K. Wolfe
AI 导读

自适应并行推理是一种新范式,它让大语言模型能够自主决定何时分解任务、并行处理多少子任务以及如何协调结果,以应对序列推理中因探索路径增长而导致的延迟增加和“上下文腐化”问题。近期研究如ThreadWeaver和Multiverse通过动态控制并行线程,在数学与代码推理基准上取得了显著性能提升,同时大幅降低了延迟。这标志着从固定并行策略到自适应智能控制的转变,为复杂任务的推理提供了高效且可扩展的解决方案。

正文 · AI 翻译

如果一个推理模型能够自行决定何时分解并并行化独立子任务、生成多少个并发线程,以及如何根据当前问题协调这些线程,那会怎样?我们提供了对并行推理领域近期进展的详细分析,特别是自适应并行推理。

声明:本文既是对自适应并行推理的领域综述,也包含相关观点。其中一位作者(Tony Lian)共同领导了 ThreadWeaver(Lian 等人,2025),这是下文讨论的方法之一。作者旨在客观呈现每种方法本身。

动机

大语言模型推理能力的最新进展,除了数据和参数规模的扩展(OpenAI 等人,2024;DeepSeek-AI 等人,2025),很大程度上是由推理时计算规模驱动的。那些显式输出推理 token(通过中间步骤、回溯和探索)的模型,如今在数学、编程和智能体基准测试中占据主导地位。这些行为使模型能够探索替代假设、纠正早期错误并综合结论,而非固守单一解决方案(Wen 等人,2025)。

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

图 1:顺序推理与并行推理

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

从固定并行到自适应控制

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

简单的分叉与合并。

  • 自洽性/多数投票——独立采样多条完整的推理轨迹,从每条轨迹中提取最终答案,并返回出现频率最高的那个(Wang 等人,2023)。
  • 最佳 N 选一(BoN)——与自洽性类似,但使用经过训练的验证器来选择最佳解决方案,而非采用多数投票(Stiennon 等人,2022)。
  • 尽管这些方法实现简单,但由于轨迹是独立采样的,它们往往会在不同分支间产生冗余计算。

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

  • 思维树/思维图/思维骨架——一系列结构化分解方法,利用已知搜索算法(广度优先搜索/深度优先搜索)探索多个备选"思维",并通过基于大语言模型的评估进行剪枝(Yao 等人,2023;Besta 等人,2024;Ning 等人,2024)。
  • 蒙特卡洛树搜索——通过随机采样推演来估计节点值,并采用上置信界风格的探索-利用策略扩展搜索树(Xie 等人,2024;Zhang 等人,2024)。
  • 这些方法通过将任务分解为不重叠的子任务,改进了简单的分叉-合并方式;然而,它们需要事先了解分解策略,而这并非总是已知的。

近期变体。

  • ParaThinker——训练模型在两个固定阶段运行:首先生成多条并行推理线程,然后对其进行综合。该方法引入了可训练的控制 token(<think_i>)和思维特定的位置嵌入,通过两阶段注意力掩码在推理过程中强制保持独立性,并在汇总阶段实现受控整合(Wen 等人,2025)。
  • GroupThink——多条并行推理线程可以在 token 级别相互查看彼此的局部进展,并在生成过程中动态调整。与先前基于独立请求的并发方法不同,GroupThink 运行单个大语言模型,同时生成多条相互依赖的推理轨迹(Hsu 等人,2025)。
  • Hogwild! 推理——多条并行推理线程共享 KV 缓存,并在没有显式协调协议的情况下决定如何分解任务。工作线程并发生成内容,写入共享注意力缓存,利用 RoPE 以不同顺序拼接各个 KV 块,无需重新计算(Rodionov 等人,2025)。

图 2:多种并行推理策略

上述方法存在一个共同的局限性:是否并行化、并行化的程度以及搜索策略都是强加给模型的,而不管问题本身是否真的需要这样做。然而,不同的问题需要不同程度的并行化,而这恰恰是并行化有效性的关键所在。例如,一个对“25+42等于多少?”和“在哪个最小平面区域内,你可以将单位长度的线段连续旋转180°?”这两个问题应用相同并行结构的框架,在前者上浪费了算力,在后者上则可能使用了错误的分治策略。在上述方法中,模型并未学会这种自适应行为。一个自然的问题由此产生:如果模型能根据手头的问题自行决定何时并行化、生成多少个并行线程以及如何协调它们,结果会怎样?

自适应并行推理(APR)通过将并行化纳入模型生成的流程控制中,回答了这个问题。从形式上讲,自适应性指的是模型在推理时,能够在并行操作和串行操作之间动态分配算力的能力。换句话说,具备自适应并行推理(APR)能力的模型被教会了如何协调其流程控制——即何时串行生成序列,何时并行生成序列。

需要指出的是,自适应并行推理这一概念是由《Learning Adaptive Parallel Reasoning with Language Models》(Pan 等人,2025)这篇工作提出的,但它是一种范式,而非具体方法。在本篇文章中,APR 指代这种范式,而“APR 方法”则特指 Pan 等人(2025)论文中的具体实现。

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

与 BoN 相比,APR 避免了冗余计算。APR 模型在分支展开之前就能控制每个并行线程将要执行的任务。因此,APR 可以学习在将一组独特、不重叠的子任务分配给独立线程之前,先生成这些子任务(Wang 等人,2023;Stiennon 等人,2022;Pan 等人,2025;Yang 等人,2025)。

与非自适应方法相比,APR 可以选择不进行并行化。自适应模型能够调整并行化程度,使其与问题的复杂度相匹配,同时兼顾并行化本身的复杂度和开销(Lian 等人,2025)。

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

图 3:来自 ThreadWeaver 的自适应并行推理轨迹示例,为便于说明已手动精简。

图 4:自适应并行推理相关论文中的特殊 Token 变体

面向自适应并行的推理系统

我们实际上如何执行并行分支?我们从计算机系统中汲取灵感,特别是多线程和多进程技术。这方面的大部分工作都可以看作是采用了分叉-合并(fork-join)的设计模式。

在推理时,我们实际上是要求模型执行一次映射-归约(map-reduce)操作:

  • 将问题分叉(Fork)为多个子任务/线程,并发处理它们
  • 将它们合并(Join)成一个最终答案

图 5:分叉-合并(Fork-join)推理设计

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

为了解决这个问题,该领域分成了两种不同的思路来执行汇总过程,其区别在于它们是修改推理引擎还是绕开推理引擎。

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

图 6:RadixAttention 的 KV 缓存管理策略

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

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

图 7:Multiverse 推理过程中的 KV 缓存“拼接”

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

图 8:Multiverse 的注意力掩码

鉴于这些由非标准 KV cache 管理引发的问题,我们能否尝试一种无需修改引擎的方法?

ThreadWeaver 保持推理引擎不变,并将编排工作转移到客户端。ThreadWeaver(Lian 等人,2025)将并行推理纯粹视为一个客户端问题。“分叉”过程与 Multiverse 几乎相同,但合并阶段处理内存的方式截然不同,因为它**不**修改引擎内部结构。相反,客户端将所有独立分支的文本输出连接成一个连续的序列。然后,引擎执行第二次预填充,为结论生成步骤生成 KV cache。虽然这引入了 Multiverse 试图避免的计算冗余,但预填充的成本远低于解码。此外,这不需要在推理期间进行特殊的注意力处理,因为第二次预填充使用了因果注意力(各线程可以相互看到),这使得将顺序自回归模型适配到该任务变得更加容易。

图 9:ThreadWeaver 的预填充与解码策略

我们应该如何训练模型来学习这种行为?最直接的做法是,对于每条并行轨迹,我们可以按照推理模式将其拆解成多个连续的片段。例如,我们会训练模型根据提示词输出子任务,根据提示词+子任务分配输出各个独立线程,以及根据提示词+子任务+对应线程输出结论。然而,这看起来有些冗余且计算效率不高。我们能做得更好吗?事实证明,可以。正如 ThreadWeaver(Lian 等人,2025)所做的那样,我们可以将一条并行轨迹组织成一个前缀树(trie),将其展平为单个序列,并在训练期间(而非推理期间!)应用仅祖先注意力掩码。

图 10:构建前缀树并展平为单个训练序列

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

这种引擎无关的设计使得采用变得容易,因为你无需找出单独的托管方法,并且可以利用现有的硬件基础设施。随着现有推理引擎的改进,它也会变得更好。更重要的是,通过引擎无关的方法,我们可以提供一种混合模型,轻松地在顺序思维模式和并行思维模式之间切换。

训练模型使用并行能力

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

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

图 11:并行化演示数据的来源

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

仅基于结构的奖励太容易被钻空子。简单来说,我们可以根据生成的线程数量给予奖励。但模型可以生成许多短小、无用的线程来骗取奖励。好吧,这行不通。那么,对正确使用并行结构给予二元奖励怎么样?这能部分解决模型滥用新线程的问题,但模型仍然会在不需要时学习生成线程。Parallel-R1(Zheng 等人,2025)的作者引入了一种交替调度方案,仅在 20% 的情况下奖励并行结构,这成功提高了并行结构的使用率(从 13.6% 提升至 63%),但对整体准确率影响甚微。

采用这种仅基于结构的方法,我们可能正在偏离最初提高准确率和降低延迟的目标……我们如何能直接针对帕累托前沿进行优化?准确率很简单——我们只需查看结果。那延迟呢?

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

图 12:关键路径长度示意图

目标是使关键路径的长度最小化。同时,我们仍然希望模型花费模型 token 来并行探索线程。为了结合这两个目标,我们可以专注于使关键路径占总模型 token 消耗的比例更小。ThreadWeaver(Lian 等人,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})$。这样,模型只有在回答正确时才能获得并行化奖励,因为我们不希望模型在无法正确回答问题的情况下施加并行化约束。

图 13:自适应并行推理工作中奖励设计的差异

评估与待解决问题

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

图 14:自适应并行推理论文中模型选择的差异

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

  • Multiverse 和 ThreadWeaver (Yang et al., 2025; Lian et al., 2025) 旨在以更快的速度实现与序列式自回归模型相当的精度。Multiverse 表明,在相同的固定上下文窗口下,APR 模型能够实现更高的准确率;而 ThreadWeaver 则表明,APR 模型在实现可比精度的同时,端到端的 token 延迟(关键路径长度)更短。
  • NPR (Wu et al., 2025) 将序列回退视为一种失败模式,并针对 100% 的“真正并行率”进行优化,该指标通过并行 token 数与总 token 数的比值来衡量。
  • Parallel-R1 (Zheng et al., 2025) 不关注端到端延迟,而是针对探索多样性进行优化,将 APR 作为一种中期训练探索框架,在强化学习之后提供性能提升。

待解决的问题

尽管自适应并行推理代表了向更高效的推理时扩展迈出的有希望的一步,但仍有大量未解决的关键问题。

如上所述,Parallel-R1(Zheng 等人,2025)将 APR 作为一种中期训练探索框架提出,而非主要作为推理时技术。这引出了一个更根本的问题:推理时的并行化是否总能稳定提升准确率,还是它主要作为训练时的探索框架才有价值?Parallel-R1 表明,强化学习过程中并行结构带来的多样性,可能比测试时并行化本身更为重要。

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

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

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

致谢

我们感谢 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 就自适应并行推理与递归语言模型进行的建设性通信交流。

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