自适应并行推理:LLM 推理新范式
Berkeley AI Research 论文提出推理扩展新方法,显著提高推理效率。学术价值高,但距应用落地尚需时间。
Berkeley AI Research 论文提出推理扩展新方法,显著提高推理效率。学术价值高,但距应用落地尚需时间。
如果一个推理模型能够自己决定何时分解和并行化独立子任务、要生成多少个并发线程,以及如何根据具体问题协调这些线程,会怎样?我们提供了对并行推理领域最近进展的详细分析,特别是自适应并行推理(Adaptive Parallel Reasoning,APR)。
声明:本文既是景观式调查,也是对自适应并行推理的观点分享。作者之一(Tony Lian)共同领导了下文讨论的方法之一 ThreadWeaver(Lian et al., 2025)。作者旨在客观呈现每种方法。
最近大语言模型推理能力的进展,除了数据和参数规模扩展外,主要由推理时间缩放驱动(OpenAI et al., 2024;DeepSeek-AI et al., 2025)。显式输出推理令牌的模型(通过中间步骤、回溯和探索)现已在数学、编码和智能体基准测试中占主导地位。这些行为使模型能够探索替代假设、纠正早期错误,以及综合结论,而不是提交到单一解决方案(Wen et al., 2025)。
问题在于,顺序推理与探索量线性扩展。缩放顺序推理令牌会带来成本,因为模型有风险超过有效上下文限制(Hsieh et al., 2024)。中间探索路径的积累使模型在关注上下文中的信息时,难以区分干扰因素,导致模型性能下降,这也称为上下文衰减(Hong, Troynikov and Huber, 2025)。延迟也随推理长度成比例增长。对于需要数百万令牌进行探索和规划的复杂任务,用户等待答案数十分钟甚至数小时并不罕见(Qu et al., 2025)。随着我们继续沿着输出序列长度维度扩展,我们也使推理变得更慢、更不可靠、更耗算力。并行推理应运而生,成为自然的解决方案。我们不再按顺序探索路径(Gandhi et al., 2024),也不再在每一步积累上下文窗口,而是允许模型独立(线程互不依赖彼此的上下文)且并发(线程可同时执行)地探索多个线程。
图 1:顺序推理与并行推理
在最近几年,越来越多的工作在合成设置(例如 Countdown 游戏(Katz, Kokel and Sreedharan, 2025))、现实数学问题和通用推理任务中探索这一想法。
现有方法证明并行推理有帮助,但大多数仍然在模型外部决定并行结构,而不是让模型自己选择。
简单分支合并
自一致性/多数投票 — 独立采样多个完整推理轨迹,从每个轨迹提取最终答案,返回最常见的答案(Wang et al., 2023)。
最优的 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 — 训练一个模型在两个固定阶段中运行:首先并行生成多个推理线程,然后综合它们。它们引入了可训练的控制令牌(<think_i>)和特定思维的位置嵌入,通过两阶段注意力掩码在推理期间强制独立性,在总结期间实现受控集成(Wen et al., 2025)。
GroupThink — 多个并行推理线程可以在令牌级查看彼此的部分进展并进行实时适配。与以前在独立请求上运行的并发方法不同,GroupThink 运行单个 LLM 同时生成多条相互依赖的推理轨迹(Hsu et al., 2025)。
Hogwild! 推理 — 多个并行推理线程共享 KV 缓存,并决定如何分解任务,无需显式协调协议。工作进程使用 RoPE 将单个 KV 块以不同顺序缝合在共享注意力缓存中进行并发生成,无需重新计算(Rodionov et al., 2025)。
图 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)。
实际上,这是通过让模型输出特殊令牌来实现的,这些令牌控制何时进行并行推理与顺序推理。下面是一条压缩后的 ThreadWeaver 风格轨迹:<Parallel> 块下的两条大纲和两条路径,然后线程在单个框内答案上达成一致。
图 3:来自 ThreadWeaver 的自适应并行推理轨迹示例,为便于说明已手动压缩。
图 4:跨自适应并行推理论文的特殊令牌变体
我们如何实际执行并行分叉?我们从计算机系统获得启发,特别是多线程和多进程。大多数这类工作可以被视为利用分叉合并设计。
在推理时,我们实际上要求模型执行一个映射-约化操作:
分叉问题为子任务/线程,并发处理它们
将它们合并成最终答案
图 5:分叉合并推理设计
具体而言,模型会接收到一个子任务列表。随后,它会对每个子任务执行预填充,并将它们作为独立请求发送给推理引擎处理。然后,这些线程会并发解码,直到遇到结束 token 或超过最大长度。该过程会阻塞,直至所有线程完成解码,随后聚合结果。这是各种自适应并行推理方法的常见做法。然而,聚合过程中会出现一个问题:分支中生成的内容无法轻易在 KV cache 层面完成聚合。这是因为独立线程中的 token 都从相同的位置 ID 开始,合并 KV cache 时会导致编码重叠和非标准行为。同样,由于独立线程之间不会相互关注,将它们的 KV cache 拼接起来会产生非因果的注意力模式,而基础模型在训练过程中从未见过这种模式。
为了解决这一问题,该领域针对如何执行聚合过程形成了两种思路,区别在于它们是修改推理引擎,还是绕过这一限制。
Multiverse 修改推理引擎,以便在合并时复用 KV cache。在深入研究 Multiverse(Yang et al., 2025)的内存管理之前,我们先了解一下在进入“合并”阶段前,KV cache 是如何处理的。请注意,每个独立线程都共享同一个前缀序列,即子任务列表。如果不进行优化,每个线程都需要预填充并重新计算前缀序列的 KV cache。然而,借助 SGLang 的 RadixAttention(Sheng et al., 2023),可以避免这种冗余。RadixAttention 将多个请求组织成一棵基数树,也就是一种 trie(前缀树),其中每个节点存储长度不一的元素序列,而不是单个元素。这样一来,只有独立线程生成的内容需要创建新的 KV cache 条目。
图 6:RadixAttention 的 KV Cache 管理策略
现在,如果一切顺利,所有独立线程都已经从推理引擎返回。接下来的目标是弄清楚如何将它们重新合成为一个序列,以继续执行后续步骤的解码。事实证明,在合成阶段,我们可以复用这些独立线程的 KV cache。具体而言,Multiverse(Yang et al., 2025)、Parallel-R1(Zheng et al., 2025)和 NPR(Wu et al., 2025)会修改推理引擎,复制各线程生成的 KV cache,并编辑页表,将不连续的内存块拼接成一个 KV cache 序列。这样可以避免第二次预填充的冗余计算,并尽可能复用已有的 KV cache。然而,这种方法存在几项重大局限。
首先,这种方法需要修改推理引擎,执行非标准的内存处理,可能导致意外行为。具体而言,由于合成请求会引用先前请求的 KV cache,这会使系统变得脆弱,并可能产生错误指针。另一个请求可能在合成请求完成前到来,并淘汰其所引用的 KV cache,从而迫使合成请求暂停,并触发对先前线程请求的重新预填充。这个问题导致 Multiverse 的研究人员(Yang et al., 2025)不得不限制推理引擎能够处理的批量大小,进而限制吞吐量。
图 7:Multiverse 推理期间的 KV Cache“拼接”
其次,这种方法改变了模型看到序列的方式,造成模型预训练阶段未接触过的分布偏移,因此需要更广泛的训练来对齐模型行为。具体而言,以这种方式拼接 KV cache 时,会创建一个采用非标准位置编码的序列。在独立线程生成期间,所有线程都从相同的位置索引开始,并关注此前的子任务,而不会关注彼此。因此,当这些线程重新合并时,得到的 KV cache 具有非标准的位置编码,并且没有使用因果注意力。由此,这种方法需要进行大量训练,才能让模型适应这一新行为。为了解决这个问题,Multiverse(Yang et al., 2025)及相关工作会在训练过程中应用经过修改的注意力掩码,阻止独立线程相互关注,从而对齐训练和推理阶段的行为。
图 8:Multiverse 的注意力掩码
既然非标准 KV cache 管理会带来这些问题,我们能否尝试一种不修改引擎的方法?
ThreadWeaver 保持推理引擎不变,并将编排工作移至客户端。ThreadWeaver(Lian et al., 2025)将并行推理完全视为一个客户端问题。“Fork”过程与 Multiverse 几乎相同,但合并阶段的内存处理方式大不相同,因为它不会修改引擎内部实现。客户端会将所有独立分支的文本输出拼接为一个连续序列。然后,引擎会执行第二次预填充,为结论生成步骤创建 KV cache。尽管这会引入 Multiverse 试图避免的计算冗余,但预填充的成本远低于解码。此外,这种方法在推理过程中不需要特殊的注意力处理,因为第二次预填充使用因果注意力(线程之间可以相互关注),因此更容易让顺序自回归模型适应这项任务。
图 9:ThreadWeaver 的预填充与解码策略
我们应该如何训练模型学习这种行为?一种朴素的方法是,针对每条并行轨迹,按照推理模式将其拆分成多个顺序片段。例如,我们会训练模型根据提示输出子任务、根据提示和子任务分配输出各个线程,以及根据提示、子任务和对应线程输出结论。然而,这种方式似乎存在冗余,计算效率也不高。能否做得更好?答案是肯定的。如 ThreadWeaver(Lian et al., 2025)所示,我们可以将一条并行轨迹组织成一棵前缀树(trie),再将其展平为一个序列,并在训练阶段(而非推理阶段!)应用仅关注祖先节点的注意力掩码。
图 10:构建前缀树并将其展平为单个训练序列
具体而言,我们会应用掩码和位置 ID 来模拟推理行为,使每个线程仅以提示和子任务为条件,而始终不会关注兄弟线程或最终结论。
这种与引擎无关的设计很容易采用,因为你不需要研究单独的托管方式,并且可以利用现有的硬件基础设施。随着现有推理引擎不断改进,它也会获得更好的表现。更重要的是,借助与引擎无关的方法,我们可以轻松部署一个能在顺序思考模式与并行思考模式之间切换的混合模型。
一旦推理路径就绪,下一个问题就是教会模型如何使用它。我们需要示例数据,因为模型必须学会输出用于编排控制流的特殊 token。我们发现,基础模型的指令遵循能力不足以生成并行线程。
这里有一个有趣的问题:SFT 训练是否让模型获得了此前并不存在的并行执行基础推理能力,还是仅仅将模型已有的预训练能力与一种特定的控制流 token 语法对齐?通常的观点是,SFT 会教授新知识;但与普遍看法相反,一些论文——尤其是 Parallel-R1(Zheng et al., 2025)和 NPR(Wu et al., 2025)——认为,它们的 SFT 示例只是诱导模型遵循格式,即学习如何组织并行请求。我们将这一问题留待未来研究。
图 11:并行化示例数据的来源
示例数据可以教授并行控制流的语法,但无法完全解决激励问题。在理想情况下,我们只需对结果的准确性给予奖励;只要模型通过 SFT 学会输出特殊 token,并行化模式就会自然涌现,类似于长思维链的涌现。然而,研究人员(Zheng et al., 2025)观察到,这还不够,事实上我们确实需要提供并行化激励。于是问题变成了:我们如何判断模型是否在有效地进行并行化?
仅基于结构的奖励太容易被投机利用。最简单的做法是根据生成的线程数量给予奖励。但模型可以生成大量短小且无用的线程来骗取奖励。好吧,这行不通。那么,仅在模型正确使用并行结构时给予二元奖励如何?这在一定程度上解决了模型滥用新线程的问题,但模型仍会学会在不需要线程时生成线程。Parallel-R1(Zheng et al., 2025)的作者引入了一种交替调度策略,仅在 20% 的时间里奖励并行结构。该策略成功提高了并行结构的使用率(13.6% → 63%),但对整体准确率几乎没有影响。
使用仅结构的方法,我们可能在偏离提高准确性和降低延迟的原始目标…… 我们如何直接优化帕累托前沿?准确性很简单——我们只需查看结果。那延迟呢?
效率奖励需要追踪关键路径。在仅顺序的轨迹中,我们可以根据生成的总令牌数来测量延迟。为了将其扩展到并行轨迹,我们可以关注关键路径,即因果相关的最长令牌序列,因为这直接决定了我们的端到端生成时间(即实际运行时间)。例如,当有两个 <Parallel> 部分各包含五个线程时,关键路径将通过第一个并行部分的最长线程,然后是任何顺序令牌,然后是第二个并行部分的最长线程,以此类推直到序列结束。
图 12:关键路径长度示意图
目标是最小化关键路径的长度。同时,我们仍希望模型花费令牌来并行探索多个线程。为了结合这两个目标,我们可以关注使关键路径成为所花令牌总数的较小比例。ThreadWeaver 的作者(Lian et al., 2025)将平行化奖励框架化为 $1 - L_{\mathrm{critical}} / L_{\mathrm{total}}$,对于顺序轨迹这个值为 0,随着关键路径相对于生成的总令牌数变小而线性增加。
平行效率应该由正确性把关。直观地说,当多个轨迹都正确时,我们应该给平行化效率更高的轨迹分配更多奖励。但当它们都不正确时呢?我们应该分配任何奖励吗?可能不应该。
为了形式化这一点,$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 使用 Qwen2.5 32B(Yang et al., 2025))来捕捉解决方案轨迹背后的复杂推理结构。在运行强化学习(RL)时,由于计算成本限制,研究人员选择了小型、非思维链(CoT)指令模型(4B、8B)。
图 14:自适应并行推理论文中的模型选择差异
每篇论文还对自适应并行推理如何促进研究领域提出了略有不同的解释。它们优化不同的理论目标,因此使用略有不同的指标集:
Multiverse 和 ThreadWeaver(Yang et al., 2025;Lian et al., 2025)旨在提供顺序 AR 模型级别的准确性,但速度更快。Multiverse 展示 APR 模型可以在相同固定上下文窗口下实现更高的准确性,而 ThreadWeaver 展示 APR 模型在实现可比准确性的同时实现更短的端到端令牌延迟(关键路径长度)。
NPR(Wu et al., 2025)将顺序回退视为故障模式,并优化 100% 真正平行率,定义为平行令牌与总令牌的比率。
Parallel-R1(Zheng et al., 2025)不关注端到端延迟,而是优化探索多样性,将 APR 呈现为一种训练中探索脚手架形式,在强化学习后提供性能提升。
虽然自适应并行推理代表了在更高效的推理时间缩放方面迈出的有前景的一步,但仍然存在重大的开放问题。
如上所述,Parallel-R1(Zheng et al., 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 Zha