這項由復旦大學與MindLab聯合開展的研究,以預印本形式發布於2026年7月,論文編號為arXiv:2607.14952,有興趣深入了解技術細節的讀者可通過該編號檢索完整原文。
**一道現實的鴻溝**
現代AI助手變得越來越聰明,但有一個鮮為人知的矛盾正在悄悄加深:AI在正式"上崗"時能處理幾百萬字的超長文本,可它在"上崗前的培訓階段"卻往往只能處理區區幾萬字,兩者之間存在巨大落差。這就好比一名廚師在實際工作中要掌管一張能容納兩百道菜的超長菜單,但他在烹飪學校練習時只接觸過十幾道菜的簡化版本,然後寄希望於正式工作時自己能"舉一反三"。
這個問題在AI智能體(Agent)上尤為突出。所謂AI智能體,就是那些能夠使用各種工具、查閱資料、一步步完成複雜任務的AI系統。它們在工作時會積累大量上下文資訊——用戶的需求、工具返回的結果、之前做出的決策,這些全都堆積在記憶里,動輒就是數十萬甚至百萬量級的文字。
訓練這樣的AI系統,麻煩比推理(也就是讓訓練好的AI直接用於工作)要複雜得多。推理時,機器只需要讀一遍輸入、給出回答,完事之後可以把中間過程全部清掉。但訓練時,系統還需要對比AI給出的多個不同回答,評判哪個更好,然後把"反饋信號"從輸出一路傳回到模型內部——這在技術上叫做"反向傳播"。這個過程會在GPU顯存里同時堆積大量中間數據,就像一家餐廳不僅要同時做幾十道菜,還要把每道菜的每一步操作都拍下來留檔,以便事後復盤。顯存撐不住,訓練就崩潰。
研究團隊給出的解法叫做**LongStraw**,核心思路是:把"讀完這本長篇小說"和"反思自己寫的答案"這兩件事徹底分開來做,從而讓有限的GPU顯存只需要承擔其中的一小部分。
**一、為什麼訓練比推理更吃顯存——從一道數學題說起**
以往的AI訓練方式,可以用這樣一個場景來理解:老師出了一道題,包含一段很長的閱讀材料(這就是"提示詞",Prompt),然後讓學生A和學生B各自寫出答案。傳統方法要求把閱讀材料和兩份答案全部堆在桌面上,同時反覆對比、修改,桌面面積有限,東西太多就放不下了。
LongStraw的做法是:先把閱讀材料仔細看一遍,但不把它鋪在桌面上——只抽取出"理解這道題所需要的關鍵筆記",把閱讀材料本身收起來。然後,拿著這份關鍵筆記,一次只評判一個學生的答案,評完立刻清掉,再去評判下一個學生的答案。這樣一來,桌面上最多只需要放"關鍵筆記"加上"當前正在評判的那一份答案",空間需求大幅下降。
這套方法在技術上的名字叫做**GRPO**(Group Relative Policy Optimization,組相對策略優化)。它的核心邏輯是:AI生成一組回答,通過比較這組回答的相對好壞來計算"誰更優秀",然後以此來調整AI的參數,讓它下次表現得更好。LongStraw沒有修改這個評判邏輯,它改變的是"如何在有限資源下把這套評判流程跑起來"。
具體來說,LongStraw把一次完整的訓練更新分解為四個階段。第一階段叫做"提示詞捕獲":讓AI以不追蹤梯度(也就是不準備"留檔復盤")的方式讀完整段長文本,只保留後續需要用到的那份"關鍵筆記",其餘中間過程立即釋放。第二階段叫做"預評分":在參數不做任何修改的前提下,先記錄下每個回答在當前AI版本下的得分,凍結這些得分,作為後續比較的基準。第三階段叫做"策略重演":一次只處理一個回答,開啟梯度追蹤,讓AI重新過一遍這個回答,計算損失,做一次反向傳播,然後立刻清掉這個回答的所有中間數據,再處理下一個。第四階段叫做"優化器更新":等所有回答都處理完畢,把累積下來的梯度一次性應用到參數上,完成本輪訓練。
這種把"讀長文本"和"處理每個回答"拆開的設計,使得GPU顯存里同時存活的最大數據量從"長文本加上所有回答"縮減為"長文本的關鍵筆記加上當前這一個回答"。
**二、兩個截然不同的AI大腦,兩套量身定製的"筆記策略"**
LongStraw並非一套萬能模板,它需要根據不同模型的內部結構來決定"關鍵筆記"應該記錄什麼。研究團隊為兩個架構差異明顯的大模型分別設計了不同的實現方案。
第一個模型是**Qwen3.6-27B**,它有64個解碼層,裡面混合了兩種處理文字的機制。其中48層使用的是"GDN"(Gated DeltaNet,門控差分網路),這是一種循環機制,用固定大小的"狀態向量"來壓縮歷史資訊,就像人類用幾句話總結一段對話的要點,無論對話多長,總結出來的關鍵資訊大小始終固定,不隨文本長度增長。另外16層使用的是"全注意力"機制,這種機制需要保存每一個歷史詞的完整記錄,就像把整段對話的錄音逐字記錄,文本越長,記錄就越多,儲存空間呈線性增長。
因此,Qwen模型的"關鍵筆記"由兩部分組成:48個GDN層各自留下一份固定大小的循環狀態,加上16個全注意力層各自留下的鍵值頁面(KV Pages)。這些鍵值頁面按照"上下文並行"(CP,Context Parallelism)的方式分散儲存在8塊GPU上,每塊GPU各自保管一部分。等到處理回答時,8塊GPU通過一套精確的數學合併操作(基於穩定的對數求和指數公式)把各自管理的那部分結果匯總成正確答案,就像8個人各自保管了一本賬簿的不同章節,合賬時按章節編號加權匯總。
第二個模型是**GLM-5.2**,它的結構複雜得多。78個解碼層全部使用一種叫做**MLA**(Multi-head Latent Attention,多頭潛在注意力)的壓縮注意力機制,把歷史資訊壓縮成更緊湊的潛在表示來節省儲存。更特別的是,它還疊加了一套叫做**DSA**(Dynamic Sparse Attention,動態稀疏注意力)的機制:每次處理一個詞時,不去看全部歷史詞,而是先用一個輕量級的"索引器"對歷史詞評分,只選出最重要的2048個位置來精讀,其餘的跳過。
GLM還有另一個獨特之處:它的78層中,只有21層會自己計算這個"選哪2048個位置"的索引,其餘57層直接復用鄰近層算好的索引,從而避免重複計算。這個設計叫做IndexShare(索引共享)。此外,GLM的前3層使用普通的全連接前饋網路,後75層使用**MoE**(Mixture of Experts,專家混合)結構——每層有256個"專家"網路,每個詞只激活其中8個,大幅減少每次前向計算的參數量。但這也帶來了一個新挑戰:這256個專家分散儲存在32塊GPU上,每次處理數據都需要跨GPU進行數據分發和匯總(EP All-to-All通信)。
GLM的"關鍵筆記"同樣儲存在32塊GPU對應的CPU內存中(而非GPU顯存),包括78層的MLA潛在鍵值頁面和21個索引計算層的DSA索引鍵頁面。處理回答時,每次只把當前層需要的一小份數據從CPU搬到GPU,用完立刻搬回或釋放,從根本上控制GPU顯存占用的峰值。
**三、每塊GPU到底存了多少東西——用具體數字感受一下規模**
這裡提供幾個具體數字,幫助感受這些設計的實際規模,而不只是停留在概念層面。
對於Qwen模型,研究設定的上下文長度恰好是2,097,152個位置(即2的21次方,約210萬)。其中約208.9萬個位置是提示詞,剩餘8192個位置是回答輸入。提示詞被分成32640個"頁面",每頁64個位置,8塊GPU各自管理其中的4080個頁面。僅僅是16個全注意力層的鍵值數據,每塊GPU就需要儲存約15.94GB——這還只是鍵值數據本身,不算模型權重、適配器參數、臨時計算緩衝區等其他占用。完整的訓練峰值顯存被控制在97.5GB左右(8塊GPU各自約97GB)。
對於GLM模型,32塊GPU按照Megatron框架的"鋸齒形"分配方式各自持有1024個頁面、對應65536個提示詞位置。每層的MLA潛在頁面在一塊GPU的CPU內存中占用72MB,21個索引層的DSA鍵頁面各占用16MB。全部78層的MLA加上21層的DSA索引,每塊GPU的CPU端儲存約為5.81GB,32塊GPU合計約186GB的CPU內存用於存放提示詞狀態。
從GLM那筆全連接隱藏緩衝區的大小可以直觀感受MoE並行的壓力:65536個位置乘以8路路由,展開後有524288行數據,每行寬度6144,以BF16格式儲存,光這一個張量就占用6GB顯存。傳統的全序列訓練圖不僅要存這個張量,還要存前後各層的所有中間結果,疊加下來輕易超過單卡上限。LongStraw通過"提示詞不建立梯度圖"加上"每次只在回答段做一層重新計算"的策略,徹底繞開了這個爆顯存的死局。
**四、從32K到210萬——一步步排雷的七個關卡**
LongStraw的GLM實現不是一蹴而就的,而是經歷了一次典型的工程調試旅程,從最小可行規模開始,一個關卡一個關卡地擊穿瓶頸。
研究團隊最先遭遇的問題是:在普通的全序列訓練模式下,32K長度可以跑通,但一旦嘗試擴展到210萬位置,GPU顯存就會溢出(Out of Memory,OOM)。而且溢出的位置還在不斷漂移——先是DSA的注意力得分矩陣撐爆了顯存,修完之後又輪到專家LoRA(一種參數高效微調方法)的中間計算,再改完又輪到MoE輸出拼接操作。這說明問題的根源不是某一個單獨的大張量,而是整個全序列自動微分圖太重了,優化任何一個局部都只是把瓶頸推到下一個地方。
第一步突破:徹底放棄對提示詞建立梯度圖,只在提示詞結束處保存必要的狀態,之後專心處理回答部分。這個決定確立了整個方案的核心架構。
第二步突破:在不帶梯度的情況下,把128K、256K、512K、1M、最終到210萬位置的提示詞全部過一遍,驗證MLA和DSA的狀態確實可以被正確捕獲和儲存,證明儲存方案本身是可行的。但此時還沒有任何訓練的能力,只是單純地讀完了一段超長文本。
第三步突破:選取第0層(最靠近輸入的那一層),單獨做一次帶梯度的回答處理和反向傳播,驗證"讀取保存的提示詞狀態、處理一段短回答、跑一次優化器"這條最小訓練路徑是通的。在這一步,引入了CPU儲存和按層分批傳輸的方案,讓1M和210萬規模都能完成這個單層測試。
第四步突破:把所有78層都串聯起來,但先在較短的32K和64K規模上驗證,專門解決IndexShare的生命周期問題(索引發布層必須在每次前向傳播時發布新的索引,消費層必須消費同一次前向傳播的索引,不能跨回答或跨參數版本混用)、DSA調用接口在短回答下的兼容性問題,以及激活檢查點的正確粒度問題(必須以整個解碼層為單位,而非只覆蓋注意力部分)。
第五步突破:引入TP1/CP32/EP32的並行拓撲,配合CPU頁面儲存和單層分批暫存,讓全部78層在32塊GPU上的顯存占用被控制在合理範圍,把測試規模推進到32K和64K的全架構驗證。
第六步突破:用一個只有單個回答(G=1)的"哨兵"運行,在210萬位置規模下完整走過78層的前向、反向和一次優化器調用,確認完整的執行路徑在目標規模下是通的。這還不是真正意義上的GRPO訓練(因為只有一個回答無法形成有意義的相對評分),但它驗證了資源的可行性。
第七步突破:用兩個確定性的合成回答(獎勵分別為0和1,歸一化後優勢為-1和1)完整跑通一次分組執行:捕獲提示詞、評分、兩次78層反向傳播、一次優化器調用,32塊GPU上的全部32個進程全部正常終止。
**五、用數字說話——實驗結果的真實面目**
Qwen模型在8塊H20 GPU上完成了兩個不同分組規模的完整測試。分組大小為2時,整個運行耗時約5199秒,峰值顯存97.503GB;分組大小為8時,耗時約6785秒,峰值顯存97.711GB。兩個規模之間,峰值顯存的差距只有0.208GB,增幅僅0.213%,而時間多出約1586秒。這個結果印證了設計的核心思路:序列化地處理各個回答,使得峰值顯存主要由最大單個回答決定,而非由回答數量決定。提示詞捕獲占據了整個運行時間的約89.6%(約4656秒),每個額外的回答大約只需要265秒。把提示詞的耗時攤銷到所有回答上,每個回答的平均耗時從2599秒降到848秒,攤銷效益相當顯著。
在更大的規模上,研究團隊還在同樣的8塊H20 GPU上測試了約445萬位置(精確值為4,456,448)的場景,並成功完成了8個回答的完整重演和反向傳播,峰值顯存82.960GB。在"前綴凍結"模式下(即提示詞對應的參數不更新),甚至連續完成了8次包含8個回答的完整優化器更新(共64次回答重演),峰值顯存83.894GB,為特定訓練目標提供了多步訓練的執行證明。一個容量探測測試在4,538,368位置通過,在再多4096個位置處溢出,給出了當前配置下的粗略上限。
GLM模型在32塊H20 GPU上,用210萬位置的提示詞和兩個極短的合成回答完成了完整的分組執行,提示詞捕獲加兩次78層前向/反向加優化器調用共耗時約2975秒。從CPU儲存的角度看,每塊GPU持有約5.81GB的提示詞狀態數據在CPU內存中;從GPU顯存的角度看,捕獲階段的峰值分配在112.571GB到145.148GB之間(各個進程的用量有約32.5GB的差距,提示存在負載不均衡問題)。
**六、哪些事做到了,哪些事還沒有——誠實的邊界劃定**
這份研究在技術誠實性方面表現得相當直接,明確區分了"已經證明的"和"尚未完成的"。
在已經證明的層面,研究建立了四件事:完整的執行路徑在指定規模下不溢出、不崩潰,每塊GPU都能走完所有階段;Qwen模型通過全局CP8注意力統計合併,實現了正確的全上下文條件前向計算(帶有BF16數值精度的輕微誤差,非按位精確);分組執行的時序正確,預評分在參數更新前完成,兩次反向傳播後才執行一次優化器調用;顯存峰值數據和每階段耗時數據有據可查。
在尚未完成的層面,研究坦誠地指出了三個重要問題。第一,**分布式梯度組合不完整**。對於Qwen,前向注意力的全局合併是正確的,但反向傳播時,負責儲存鍵/值的各GPU計算了本地的梯度貢獻後沒有跨GPU匯總,而鍵/值的投影適配器參數(LoRA權重)是在所有GPU上複製的,它們應該收到來自所有GPU的梯度之和,但實際上每個GPU各自獨立更新了自己的副本——這意味著8塊GPU上的模型參數會產生分歧。對於GLM,正常的Megatron訓練流程在反向傳播後會調用一個叫做finalize_model_grads的函數來完成CP維度上的梯度匯總,但歷史上的執行版本繞過了這個函數,直接讓優化器從未匯總的本地梯度更新參數。第二,**GLM歷史執行版本的DSA前向計算是局部的**,每塊GPU只在自己持有的65536個提示詞位置里選top-2048,而不是在全部210萬個位置里全局選top-2048,這在語義上與模型定義的操作不符。第三,**提示詞狀態的梯度被截斷**,兩個模型都沒有把梯度傳回到提示詞處理階段,這意味著當前實現對模型參數的更新只反映了"如何生成更好的回答",而沒有反映"提示詞理解部分的參數如何改進"。
換句話說,當前的成果是一張"執行收據",證明了這條路是物理上走得通的,但還不是一張"正確訓練收據",還需要後續的梯度同步修復工作才能成為真正有意義的分布式訓練結果。
**七、這項研究告訴了我們什麼更深層的道理**
研究團隊從這次工程實踐中提煉出幾條對整個AI訓練系統領域有參考價值的認識。
關於顯存容量,核心決定因素是張量的**生命周期**,而不是計算的稀疏程度。DSA減少了注意力計算量,但提示詞的索引鍵依然是長度相關的數據;MoE減少了每個詞激活的參數量,但每次路由和分發仍然產生大量臨時張量。真正釋放顯存的,是允許這些臨時數據在使用完畢後立即消亡,而非讓它們在整個前向/反向圖中長期存活。
關於物理所有權,邏輯上分片的數據如果實際儲存還是共享一塊大內存,釋放"自己那份"根本不會降低顯存占用。Qwen早期實現中就踩過這個坑——邏輯上每塊GPU只保留1/8的頁面,但因為這些頁面只是大緩衝區的切片視圖,父緩衝區沒有被釋放,顯存一點沒少。用物理上獨立的小緩衝區儲存各自的頁面,才真正把所有權落實到位。
關於並行維度,CP並行(上下文並行)和EP並行(專家並行)解決的是兩個完全不同的問題,雖然可以映射到同一組GPU上,但不能互相替代。前向注意力的全局合併做到了不代表反向梯度的匯總也做到了,這兩件事需要分別驗證。
**說到底,這項研究想證明什麼**
歸根結底,這項工作想證明的是:超長上下文的強化學習訓練,不一定非得靠堆砌幾百上千塊GPU才能實現,在合理的架構設計下,用少量GPU也能跑通超過200萬位置的訓練執行路徑。
當然,"跑通"和"訓練正確"之間還有一段距離需要彌合——分布式梯度同步、完整的DSA全局選擇、與普通全序列訓練的數值對比驗證,這些都是團隊在論文中明確點出的待完成工作。研究者們沒有掩蓋這些局限,而是把它們清清楚楚地列在了"限制與驗證路線圖"這一章里,並給出了後續工作應該按照什麼順序推進的具體建議。
這種誠實本身也是有價值的:它讓讀者能夠清楚地區分"執行層面的可行性"和"訓練正確性",避免把一個紮實的系統工程探索誤讀為一個完整的訓練方法突破。
對於關注AI基礎設施的研究者和工程師而言,這項工作開闢了一個值得深入探索的方向:在固定計算資源的約束下,通過對模型架構特性的深度理解來重新組織訓練流程,而不是簡單地靠資源堆量來換取更長的上下文能力。當AI模型越來越依賴超長上下文來完成複雜的智能體任務,這個方向的研究意義會隨著時間推移變得越來越清晰。
---
Q&A
Q1:LongStraw為什麼能用更少的GPU處理更長的上下文訓練?
A:LongStraw的核心思路是把"讀取長提示詞"和"處理每個回答"拆開來做。提示詞以不記錄梯度的方式過一遍,只保留後續必需的少量狀態數據(比如注意力鍵值頁面或循環狀態),然後一次只處理一個回答並立刻清除中間數據。這樣GPU顯存里同時存活的最大數據量從"提示詞加所有回答"縮減到"關鍵狀態加當前一個回答",從根本上繞開了全序列梯度圖的顯存瓶頸。
Q2:LongStraw目前的實驗結果能證明它是正確的分布式訓練方法嗎?
A:還不能完全證明。論文明確指出,當前的成果是"執行收據",證明了210萬位置的訓練執行路徑在物理上走得通,但存在三個尚未修復的問題:Qwen的鍵值投影梯度沒有跨GPU匯總、GLM歷史版本的稀疏注意力選擇只在各GPU本地進行而非全局選擇、兩個模型的提示詞階段梯度都被截斷。修復這些問題並與傳統全序列訓練做數值對比,才能建立更強的正確性證明。
Q3:GRPO訓練里分組大小對顯存影響有多大?
A:根據Qwen模型的實測數據,從分組大小2增加到8,峰值顯存只增加了0.208GB,增幅僅0.213%,而運行時間增加了約1586秒。這是因為LongStraw對各個回答做序列化處理,顯存峰值主要由單個最大回答決定,而非由回答數量決定。不過總量上,儲存所有回答的輸入標籤、獎勵和預評分結果仍然隨分組大小線性增長,只是這部分數據比激活圖小得多。






