自適應平行推理概述。如果一個推理模型能夠根據手邊的問題,自行決定何時分解並平行處理獨立的子任務、要產生多少個並行執行緒,以及如何協調它們,那會怎麼樣?本文將詳細分析平行推理領域的最新進展,特別是自適應平行推理。聲明:本文部分內容是對現有技術的概覽,部分則是對自適應平行推理的觀點。

其中一位作者 (Tony Lian) 共同領導了 ThreadWeaver (Lian et al., 2025),這是下文討論的方法之一。作者旨在客觀呈現每種方法。動機大型語言模型(LLM)推理能力的最新進展,除了資料和參數規模的擴展外,很大程度上是由推論時的規模擴展所驅動的 (OpenAI et al., 2024; DeepSeek-AI et al., 2025)。

透過中間步驟、回溯和探索來明確輸出推理提示詞的模型,如今在數學、程式碼和代理基準測試中佔據主導地位。這些行為使模型能夠探索替代假設、糾正早期錯誤並綜合結論,而不是僅僅提交單一解決方案 (Wen et al., 2025)。問題在於,循序推理的規模與探索量呈線性關係。

擴展循序推理提示詞會付出代價,因為模型有超出有效上下文限制的風險 (Hsieh et al., 2024)。中間探索路徑的累積使得模型在處理上下文資訊時難以區分干擾項,導致模型效能下降,這也被稱為「上下文腐爛」(context-rot) (Hong, Troynikov and Huber, 2025)。

延遲也隨推理長度成比例增長。對於需要數百萬個提示詞進行探索和規劃的複雜任務,使用者等待數十分鐘甚至數小時才能得到答案的情況並不少見 (Qu et al., 2025)。隨著我們繼續沿著輸出序列長度維度擴展,我們也使推論變得更慢、更不可靠且更耗費運算資源。

平行推理已成為一種自然的解決方案。與其循序探索路徑 (Gandhi et al., 2024) 並在每個步驟累積上下文視窗,我們可以讓模型獨立(執行緒不依賴彼此的上下文)且並行(執行緒可以同時執行)地探索多個執行緒。圖 1:循序推理與平行推理近年來,越來越多的研究在合成環境(例如 Countdown 遊戲 (Katz, Kokel and Sreedharan, 2025))、實際數學問題和一般推理任務中探索了這個想法。

從固定平行化到自適應控制現有方法表明平行推理有所幫助,但大多數仍是在模型外部決定平行結構,而非讓模型自行選擇。簡單的分叉與合併 (fork-and-join)。自我一致性/多數決 (Self-consistency/Majority Voting) — 獨立採樣多個完整的推理軌跡,從每個軌跡中提取最終答案,並返回最常見的答案 (Wang et al., 2023)。

N 選一最佳 (Best-of-N, BoN) — 類似於自我一致性,但使用經過訓練的驗證器來選擇最佳解決方案,而不是使用多數決 (Stiennon et al., 2022)。儘管實作簡單,但這些方法通常會在不同分支之間產生重複運算,因為軌跡是獨立採樣的。

基於啟發式方法的結構化搜尋。思維樹/圖/骨架 (Tree / Graph / Skeleton of Thoughts) — 一系列結構化分解方法,利用已知的搜尋演算法(BFS/DFS)探索多個替代「思維」,並透過基於 LLM 的評估進行剪枝 (Yao et al., 2023; Besta et al., 2024; Ning et al., 2024)。

蒙地卡羅樹搜尋 (Monte-Carlo Tree Search, MCTS) — 透過採樣隨機展開來估計節點值,並使用上置信界 (Upper Confidence Bound, 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°?」

應用相同平行結構的框架,前者會浪費運算資源,後者則可能使用了錯誤的分解策略。在上述方法中,模型並未被教導這種自適應行為。一個自然的問題隨之而來:如果模型能夠根據手邊的問題,自行決定何時進行平行化、產生多少執行緒以及如何協調它們,那會怎麼樣?

自適應平行推理 (Adaptive Parallel Reasoning, APR) 回答了這個問題,它將平行化納入模型生成的控制流程中。正式定義上,自適應性是指模型在推論時動態分配平行與循序運算資源的能力。換句話說,具備自適應平行推理 (APR) 能力的模型被教導如何協調其控制流程 — 何時循序生成序列,以及何時平行生成序列。

值得注意的是,自適應平行推理的概念是由《使用語言模型學習自適應平行推理》(Learning Adaptive Parallel Reasoning with Language Models, Pan et al., 2025) 這項工作引入的,但它是一種典範,而非特定方法。

在本文中,APR 指的是這種典範,而「APR 方法」則指 Pan 等人 (2025) 論文中的具體實例。這種轉變之所以重要,有三個原因。相較於思維樹 (Tree-of-Thoughts),APR 不需要領域特定的啟發式方法進行分解。在強化學習 (RL) 過程中,模型透過試錯學習通用的分解策略。

事實上,模型以一種難以手動設計的湧現方式,發現了有用的平行化模式,例如在執行下一步的同時進行前一步的自我驗證,或者用備用方法對主要方法進行對沖 (Yao et al., 2023; Wu et al., 2025; Zheng et al., 2025)。

相較於 N 選一最佳 (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:自適應平行推理論文中特殊提示詞的變體自適應平行化的推論系統我們如何實際執行平行分支?

我們從電腦系統中汲取靈感,特別是多執行緒和多處理。這項工作的大部分可以視為利用了分叉與合併 (fork-join) 設計。在推論時,我們實際上是在要求模型執行一個 map-reduce 操作:將問題分叉為子任務/執行緒,並行處理它們將它們合併為最終答案圖 5:分叉與合併推論設計具體來說,模型會遇到一個子任務列表。

然後它會預填充每個子任務,並將它們作為獨立請求發送給推論引擎進行處理。這些執行緒隨後並行解碼,直到它們遇到結束提示詞或超過最大長度。這個過程會阻塞,直到所有執行緒完成解碼,然後聚合結果。這在各種自適應平行推理方法中很常見。然而,在聚合過程中會出現一個問題:分支中生成的內容無法在 KV 快取層級輕鬆聚合。

這是因為獨立執行緒中的提示詞從相同的位置 ID 開始,導致編碼重疊以及在將 KV 快取合併回一起時出現非標準行為。同樣地,由於獨立執行緒彼此不關注,它們串聯的 KV 快取會導致非因果注意力模式,這是基礎模型在訓練期間未曾見過的。為了解決這個問題,該領域分為兩種思維流派,關於如何執行聚合過程,取決於它們是修改推論引擎還是繞過它。

Multiverse 修改了推論引擎,以在合併過程中重用 KV 快取。在深入了解 Multiverse (Yang et al., 2025) 的記憶體管理之前,讓我們先了解在「合併」階段之前 KV 快取是如何處理的。請注意,每個獨立執行緒都共享前綴序列,即子任務列表。

如果沒有優化,每個執行緒都需要為前綴序列預填充並重新計算 KV 快取。然而,透過 SGLang 的 RadixAttention (Sheng et al., 2023) 可以避免這種冗餘,它將多個請求組織成一個基數樹 (radix tree),這是一種前綴樹 (trie),其中包含不同長度的元素序列,而不是單個元素。

這樣一來,唯一新的 KV 快取條目就是來自獨立執行緒生成的。圖 6:RadixAttention 的 KV 快取管理策略現在,如果一切順利,所有獨立執行緒都已從推論引擎返回。我們的目標是找出如何將它們綜合回單一序列,以繼續解碼下一步。事實證明,我們可以在綜合階段重用這些獨立執行緒的 KV 快取。

具體來說,Multiverse (Yang et al., 2025)、Parallel-R1 (Zheng et al., 2025) 和 NPR (Wu et al., 2025) 修改了推論引擎,以複製每個執行緒生成的 KV 快取,並編輯頁面表,使其將非連續的記憶體區塊拼接成單一的 KV 快取序列。

這避免了第二次預填充的重複運算,並盡可能重用現有的 KV 快取。然而,這有幾個主要限制。首先,這種方法需要修改推論引擎來執行非標準的記憶體處理,這可能導致意外行為。具體來說,由於綜合請求引用了先前請求的 KV 快取,這會導致系統脆弱性以及可能出現錯誤的指標。