宅中地 - 每日更新
宅中地 - 每日更新

贊助商廣告

X

把35B大模型塞進24GB記憶體:一場關於「預測」的豪賭

2026年10月02日 首頁 » 熱門科技

你有沒有想過,一台24GB內存的普通電腦,怎麼可能跑得動一個體積高達19.5GB的AI大模型?

這聽起來就像想在一個只能裝下19.5升水的水桶里,硬塞進去19.5升水,然後還要求你同時用這個水桶洗菜做飯。理論上空間是夠的,但實際上根本沒有餘地干別的事。你的作業系統要占地方,你打開的其他軟體要占地方,AI生成文字過程中產生的臨時數據也要占地方。

這就是2026年AutoArk團隊在論文裡講的那個故事的開頭。他們要解決的,正是這樣一個看似無解的難題:如何在一台連模型本體都裝不下的機器上,流暢地跑一個350億參數規模的混合專家模型。

**內存牆的另一半,沒人願意碰的那一半**

1995年,兩位電腦科學家Wulf和McKee提出了一個後來影響整個行業幾十年的概念,叫"內存牆"。

內存牆:指處理器運算速度提升得越來越快,但內存讀寫速度跟不上,導致機器大量時間花在"等數據"上,而不是"算數據"上。

這堵牆原本說的是CPU和內存之間的速度差距,三十年後,它換了個戰場,出現在了AI大模型的推理過程里。AI生成文字這件事,本質上是不斷地讀取模型的參數,然後做一堆乘法加法運算。問題是,現代硬體做運算的速度極快,但從內存或硬碟里把參數讀出來的速度,慢得多。這意味著瓶頸根本不在"算得快不快",而在"讀得快不快"。

內存里存的東西可以分成兩種。一種是動態數據,也就是模型在生成文字過程中臨時記下的"上下文記憶",行話叫KV緩存,這部分數據會隨著生成的字越來越多而越變越大。另一種是靜態數據,就是模型的參數本身,這部分數據從訓練完成的那一刻起就固定不變了。

過去幾年,整個行業在拼命優化第一種數據。多頭潛在注意力機制把KV緩存壓縮了一個數量級,稀疏注意力把它限制在一個固定窗口內,線性狀態模型乾脆把這種緩存機製取消了。但第二種數據,也就是參數本身占的空間,幾乎沒人碰。行業默認的解法是:把這幾十GB的參數丟進數據中心的顯卡集群里,用專家並行和分布式服務來扛住它。

這個解法對企業沒問題,對普通人的電腦就是災難。你桌上那台24GB的電腦,根本沒有數據中心那種"分布式扛壓力"的能力。

**量化到頭了,稀疏也幫不上忙**

面對這個問題,業界通常有兩條現成的路,但這篇論文的作者發現,這兩條路走到35B這個規模都會失效。

第一條路是量化,簡單說就是把模型參數用更少的比特數來表示,從而縮小體積。

量化:把模型參數從16位浮點數壓縮成更少位數(比如4位整數)來表示,從而減少儲存空間和讀取頻寬。

問題是量化這件事有個天花板。業界公認4比特是目前能穩定使用的下限,低於這個數字,模型輸出質量會斷崖式下跌,而且目前沒有任何後處理技術能把這種損失補回來。

第二條路是混合專家架構本身自帶的稀疏性。

混合專家模型(MoE):一種大模型架構,每次處理一個字詞時,並不會用上全部的參數,而是從一堆"專家"模組裡挑出少數幾個來幹活,這樣計算量就變小了。

問題是,MoE的稀疏性省的是"算力",不是"儲存"。35B規模的MoE模型,每個字詞處理時只激活大約30億參數,計算量確實小了,但你依然得把195億參數(4比特量化後是19.5GB)全部存在某個地方,因為你不知道下一個字詞會用到哪幾個專家,所有專家的參數都得隨時待命。19.5GB這個數字,一分不能少。

這就是為什麼標題里說這是"內存牆的另一半":大家一直在優化會變化的那部分數據,卻沒人正視這部分固定不變、卻依然巨大的參數儲存問題。

**把參數搬到硬碟上,然後呢?**

於是研究團隊想到了一個直接的辦法:既然內存裝不下19.5GB的參數,那就別硬塞進內存,讓參數待在硬碟(SSD)上,需要哪個專家的時候,現讀現用。

這個思路聽起來很合理,但作者很快指出,光這麼做是不夠快的。

問題出在MoE的路由機制上。模型在處理每一層的時候,需要先算出這一層該激活哪些專家,這個決策叫"路由"。而這個決策必須依賴上一層算完的結果才能做出來。換句話說,第N+1層要用哪些專家,得等第N層算完才知道。

這就好比你去一家沒有提前點單系統的餐廳吃自助火鍋,服務生必須等你吃完當前這盤菜、看你反應之後,才能決定去後廚拿下一盤什麼菜。如果後廚在很遠的倉庫(相當於硬碟),每次都要等你吃完這盤才開始去倉庫取下一盤,那麼無論倉庫距離餐桌有多遠,你每吃完一盤都要乾等著,因為取貨這個動作根本沒法提前開始。如果不解決這個"必須等結果出來才能行動"的先後順序問題,硬碟再快也沒用,因為讀取硬碟的時間沒辦法藏在計算時間背後,只能老老實實地排隊等著。

這正是論文標題里提到的核心矛盾:單純把參數挪到硬碟上,解決不了速度問題,因為"選專家"和"讀專家"這兩件事有嚴格的先後依賴關係,沒法並行。

**預路由器:讓預測提前一步替你做決定**

這篇論文最核心的創新,就是打破了這個"必須等結果才能行動"的死循環,方法是訓練一個專門的小模組,提前一步預測路由結果。

作者管這個模組叫prerouter(預路由器)。

預路由器:一個附加在每一層上的小型神經網路模組,它不是等當前層算完後再決定下一層用哪些專家,而是提前一個字詞的時間,就把下一層的專家選擇預測出來。

具體來說,第N層的預路由器,會在處理第t個字詞的時候,就去預測第N+1層在處理第t+1個字詞時會用到哪些專家。這一步預測提前完成之後,硬碟就可以立刻開始把這些專家的參數往內存里搬,等真正輪到第N+1層處理第t+1個字詞的時候,需要的參數已經躺在內存里等著了,讀取硬碟的時間就被"藏"在了計算的過程背後,兩件事同時發生,誰也不耽誤誰。

這裡最關鍵的一點是,這個預測不是"輔助參考",而是直接被當成了真正的路由結果來使用。

這意味著模型實際生成文字時,走的路由路徑就是預路由器猜的那條路徑,不存在預測錯了之後需要臨時補救、丟棄數據、重新加載的情況。為什麼要這麼設計?因為如果預測只是個參考,模型實際執行的時候發現預測跟真實路由對不上,就得現場補救,之前那些為了預測提前搬來的參數全都白費了,速度優勢瞬間清零。作者的做法很乾脆:既然要用預測代替真實路由,那就讓訓練階段一次性把這個"預測不準"的代價吸收掉,把模型訓練成一個"就算路由是猜的,也照樣能說人話"的模型。這個思路跟此前學術界一個叫"Pre-gated MoE"的方案不一樣,那個方案是在同一個字詞內部、當前層算完注意力之後立刻決定下一層的專家,作者實測發現這樣做需要頻繁地同步和暫停GPU流水線,每一步要花30到100毫秒,比它能省下的硬碟讀取時間還長,屬於賠本買賣。而提前一整個字詞做預測,就能把這個決策計算挪到不影響主流程的地方,一次性給所有需要預取的層做完預測。

預路由器的具體結構也值得說一說。每一層的預測頭由兩層小型神經網路組成,中間用erf-gelu激活函數連接,此外還有一條從下一層原本路由器的權重直接抄過來的"直連"路徑,相當於給訓練打了個底:一開始就模仿"直接套用下一層原來的路由器"這種最樸素的做法,然後再在這個基礎上學習修正。輸入特徵除了當前層的隱藏狀態,還包含了這一層和上一層實際路由到的專家資訊,這樣預測頭就有了"最近發生了什麼"的上下文資訊可用。

在35B這個規模的模型上,一共有40層,其中33層掛載了預測頭,32層的推理路由是靠預測完成的,只有前幾層還是靠自己的原生路由器,因為最開始的幾層還沒有足夠的歷史資訊可以預測。

實測效果相當直觀:在一台16GB內存、模型根本裝不下的MacBook M2上,光靠"讀到再算"的傳統流式加載,解碼速度是每秒1.8到4.8個字詞(具體數值取決於每層激活幾個專家),而用上預路由器提前預取之後,速度提升到每秒3.3到8.6個字詞,提升幅度是80%到84%。

這個提升的本質,作者講得很實在:不是預測讓讀取的數據變少了,而是把原本堵在關鍵路徑上的等待時間挪走了。數據表明,兩種方案實際讀取的字節數幾乎一樣,差別只在於什麼時候讀、以及讀的時候會不會卡住整個計算流程。

**量化和路由預測都會傷模型,那就用一個"外掛"補回來**

預路由器解決了速度問題,但天下沒有免費的午餐。用預測代替真實路由,加上前面提到的4比特量化,這兩件事都會讓模型輸出質量打折扣。

作者的解法是訓練一個叫"恢復LoRA"的輕量級修補模組。

LoRA:全稱低秩適應,是一種給大模型打補丁的技術,不需要重新訓練整個模型,只需要額外訓練一小組參數,就能讓模型行為發生特定方向的調整。

這個恢復LoRA是拿4比特量化之後的模型、用預測路由跑出來的實際路徑當作訓練環境,去對照沒有量化、用真實路由的原始模型(也就是"老師模型")學出來的答案,一點點糾偏。

這裡有個特別值得展開講的細節:這個LoRA補丁在實際部署的時候,是不能和主模型"合併"的,必須以獨立的、並聯的方式掛在旁邊同時計算。

為什麼不能合併?因為LoRA學到的調整幅度非常微小,用數值來說大概是千分之一的量級,而4比特量化本身的"刻度間隔"比這個調整幅度還要粗糙。如果把這個微小的修正值硬塞進已經量化過的權重里,再重新量化一遍,這個精細的修正資訊在粗糙的量化刻度面前根本站不住腳,絕大部分修正效果會在重新量化的過程中被抹掉。

這就好比你用一支極細的鉛筆在一張紙上寫了一行很小的批註,字跡只有零點幾毫米粗細,然後有人非要把這張紙重新複印一遍,而複印機的最小分辨精度比你的字跡粗得多。複印出來的結果,你那行批註基本就是一團模糊的灰色陰影,內容全沒了。如果不堅持"不合併、單獨跑"這個設計,那這個精心訓練出來的LoRA補丁,實測顯示在某些參數上重新量化後只剩下2%到34%的效果能留存,等於白訓練了。

論文裡給出了具體數字:把LoRA合併進權重再重新量化,在注意力層的某個投影上只有34%的修正效果能存活,在另一個稠密層的投影上更慘,只剩2%,從模型最終輸出的文字概率分布來看,整體上只有18%的效果被保留。而選擇讓這個補丁獨立並聯運行,只需要多付出42MB的儲存空間,幾乎不影響解碼速度,效果卻是完整保留的。

這個設計思路,其實和2023年就已經提出的QLoRA有些相似的血緣關係,QLoRA證明了在4比特基座模型上訓練LoRA可以逼近16比特全精度微調的效果,而這篇論文進一步追問的是:這個補丁在真正上線服務的那一刻,到底能不能保住它訓練時學到的東西。答案是,只要不把它強行揉進量化權重里,就能保住。

**三個階段的訓練,一步都不能亂序**

要讓整個系統真正跑起來,光設計出預路由器和LoRA還不夠,訓練的順序本身也是一門學問。作者的訓練分成三個階段。

第一階段只訓練預路由器這些小預測頭,目標很單純,就是讓它們儘量模仿真實路由器下一層會做出的選擇。

第二階段是在"學生路徑"上做監督微調,也就是讓整個模型帶著預路由器的預測路由去跑,同時訓練那個恢復LoRA,用大約200萬條老師模型生成的文本數據來糾正質量損失。這一步是決定整個系統能不能用的關鍵,作者在論文裡坦誠地寫道,如果只做第一階段的預測頭蒸餾,模型生成的文字會陷入重複、坍縮的狀態,根本沒法用,必須疊加第二階段的微調才能產出連貫的文本。

第三階段叫"在線策略蒸餾",這一步比較微妙:前一階段訓練用的是老師模型自己寫的文本,而這一階段改用學生模型自己生成的文本,再讓原始的高精度老師模型去給這些文本評分當作監督信號。這樣做的目的是讓學生模型習慣"評判自己實際會說出的話",而不是死記硬背老師的答案。這個階段用的訓練數據量只有第二階段的十分之一左右,大約20萬條,說明它更像是精細調優,而不是從頭再學一遍。

三個階段的順序不能打亂,作者特別強調了這一點。必須先訓練預測頭,否則如果一開始就直接上大規模微調,微調產生的梯度信號會把預測頭那點微弱的學習信號直接淹沒掉,預測頭根本學不到東西。

**實測數據:真的能跑起來嗎**

說了這麼多設計,最終還是要看實際效果。論文給出了兩個開源模型版本的實測結果。

35B版本基於Qwen3.6-35B-A3B模型改造,40層、每層256個專家,每次處理只激活大約30億參數。在一台24GB內存的Mac mini M4 Pro上,這個35B模型的解碼速度達到每秒20.4個字詞,峰值內存占用只有2.9GB。作為對比,把同樣的模型完整塞進內存跑(不做任何流式加載),解碼速度只有每秒3.9個字詞,內存占用高達18.2GB。同樣一台機器,同樣的模型,快了超過5倍,內存只用了原來的六分之一。

8B版本基於Ling 3.0 tiny模型,24層、每層128個專家,解碼速度達到每秒28個字詞,峰值內存只要1.5GB。

質量方面,論文用OpenCompass在五個公開基準測試上對比了量化加改造之後的模型和原始16比特模型。35B版本平均每個基準的分數差距是3.9分(滿分100分),8B版本是2.8分。具體到各項測試,35B版本在數學競賽AIME上從92.7分掉到86.6分,掉了6.1分,是所有測試里損失最大的一項,而在代碼能力測試HumanEval上只掉了4.2分,在指令遵循測試IFBench上從61.7掉到57.9。

這裡有個挺有意思的細節,8B版本在MMLU-Pro這個知識測試上,改造後的分數反而比原始16比特模型高出4.3分(70.1對65.8),這說明質量損失並不是均勻分布在所有能力維度上的,長鏈條推理這類需要精確計算的任務受影響最大,而知識類問答受影響很小,甚至可能因為額外的微調訓練而有所提升。

**硬碟讀取的賬本:省下來的時間到底從哪來**

作者在論文裡做了一件挺嚴謹的事,他們沒有滿足於"快了多少"這種籠統結論,還去拆解了這個速度提升具體是怎麼來的。

在那台16GB、模型根本裝不下的MacBook上,實測顯示,主線程等待專家參數加載的時間,從每步244毫秒降到了101.9毫秒(這是每層激活4個專家的配置下測出來的),在每層激活8個專家的配置下,從575毫秒降到211.6毫秒。這段被省下來的時間,就是原本浪費在"乾等硬碟"上的空轉時間。

但作者也誠實地指出了這個機制的代價:預取是要花內存的。因為要提前把預測出來的專家參數放進內存待命,這部分內存是沒法被作業系統回收利用的,會擠占原本可以用來做磁盤緩存的空間。在每層激活8個專家的配置下,預路由器方案要多占用1.43GB的常駐內存,而磁盤緩存因此損失了1.15GB,相當於擠占效應吃掉了將近八成的額外內存開銷。

還有個現象叫"讀取粒度"問題:因為提前預取,讀進來的數據往往是"冷數據",也就是從來沒被訪問過、剛從硬碟上取來的新鮮數據,這種冷數據每次加載的成本比"熱數據"(之前訪問過、還在緩存里的數據)要高。論文測出的經驗公式是,每次加載的耗時大約是1.17毫秒加上1.33毫秒乘以這次加載里冷數據所占的比例,這個公式在多組實測數據上誤差都在0.13毫秒以內,擬合得相當精確。

論文還提到一個有意思的現實制約:相鄰的兩個字詞,路由到的專家集合只有大約四分之一是重疊的。這意味著大部分被提前預取的專家參數,讀進來一次之後就再也用不上了,等於白讀了。這也解釋了為什麼這套機制的收益並不是無限放大的,它天生受限於"預測出來的東西到底有多少會被真正用上"這個現實約束。

論文裡還提到兩個"暫未拉動的槓桿":一個是當前的實現里,同一份專家權重在內存里同時存了兩份不同格式的拷貝,去掉重複能省下大約0.45GB;另一個是把參數組裝這個步驟從主線程挪到別的線程去做,能省下每步62.5毫秒的等待。這兩處優化目前還沒做,留給了未來的版本。

**這套系統的邊界在哪**

作者對這套系統的局限性寫得也很坦率。

首先,Edge0目前只能一次處理一個請求,不支持並發,因為多個請求同時跑會讓專家的實際使用模式變得不可預測,論文裡這套針對單請求場景做的性能畫像就用不上了。

其次,作者發現哪怕硬碟讀取的等待時間已經被完全藏起來了,模型解碼這個過程本身在CPU這一側還有個躲不開的開銷,就是每一步都要重新搭建計算圖,這部分開銷在40層的模型里測出來是每步44毫秒,這是個硬底線,沒法靠優化儲存系統繞過去,得從更底層的計算圖復用機制或者換用更小的模型來解決。

第三,預路由器把35B大模型塞進24GB內存一場關於預測的豪賭帶來的收益是有前提條件的:如果換成內存足夠大、硬碟足夠快的機器,這套機制能省下的等待時間本身就很少,收益會自然縮水。這套系統天生就是為"內存緊張、儲存慢"這個場景量身定做的,脫離了這個場景,它的優勢也就隨之消失。

**三個後續能延展的方向**

論文裡提到的一些相關工作,其實能幫我們理解這篇論文站在什麼位置上。

比如PowerInfer這類工作,思路是把神經元分成"熱"和"冷"兩類,分別放在GPU和CPU里,本質上是一種基於訪問頻率的緩存策略。Mixtral-offloading和MoE-Infinity也是類似的"按熱度或復用距離緩存專家"的思路。這些方案共同的特點是,它們移動的是負擔的位置,而不是負擔的大小,模型參數依然要占用幾十GB的空間,只是換了個地方存,而且讀到硬碟這一層的時候,系統並不知道下一步到底需要哪些專家,只能憑經驗猜。這篇論文的不同之處在於,它不是靠猜經驗,而是靠一個專門訓練出來的模組去做有依據的預測,而且預測直接等於路由決策本身,不存在"猜錯了怎麼辦"這個後續補救的環節。

再往前追溯,Pre-gated MoE這篇論文提出了"提前選專家"的思路,但它是在同一個字詞內部完成的,作者在這篇論文裡明確指出這個方案撐不住流式加載引擎的節奏,因為同步開銷比它能省下的時間還大。這篇論文把這個提前量從"同一層內"拉長到"整整一個字詞",是對同一個問題在時間尺度上的重新設計。

還有一篇關於"MoE可以跳過一半專家"的自蒸餾工作,驗證的是"只要經過針對性訓練,模型可以容忍更激進的專家數量削減"這個觀察,這篇論文裡的路由替換訓練本質上是同一個觀察的另一種應用方式:只要訓練到位,模型也能容忍"路由決策是猜的"這件事。

寫在後面

讀完這篇論文,最讓我意外的一個細節是,作者敢於把"預測出錯了怎麼辦"這個問題徹底繞開,而不是在工程上做各種補救機制。大部分做緩存和預取的系統設計,思路通常是"預測一個大概率對的結果,同時留一個兜底方案應對預測出錯的情況",這篇論文反其道而行之:既然要靠預測,那就乾脆把預測直接當成唯一真相,把所有的容錯工作一次性放到訓練階段解決掉。這種"在哪個階段付出代價"的選擇,其實是個挺深的工程哲學問題,放在訓練階段一次性付費,還是放在推理階段反覆打補丁,兩條路都能走通,但成本結構完全不同。

另一個讓我反覆琢磨的地方是那組"合併LoRA會讓效果損失98%"的數據。這提醒我一件容易被忽略的事:很多看起來只是工程實現細節的選擇(合併還是不合併),背後其實是數值精度和量化刻度之間的物理約束在起作用,不是隨便怎麼實現都無所謂的。

這篇論文沒有回答的一個問題是,當模型規模繼續往上走,比如到100B甚至更大的時候,預路由器這套機制還能不能保持同樣的預測準確率。文中提到相鄰字詞路由到的專家只有四分之一是重疊的,如果這個重疊率隨著模型變大而進一步降低,預取的收益會不會跟著塌縮?這大概是留給下一篇論文的問題。

Q&A

Q1:Edge0是什麼?

A:Edge0是AutoArk團隊開發的流式MoE推理引擎,能讓350億參數規模的混合專家大模型在24GB內存的普通電腦上運行,核心是把專家參數放在硬碟上,用訓練出的預測模組提前一步猜測路由結果,從而讓硬碟讀取和計算同時進行。

Q2:Edge0為什麼比直接把模型塞進內存跑得還快?

A:直接把19.5GB模型塞進24GB內存會占用幾乎全部內存,導致作業系統和緩存空間被擠壓,系統被迫頻繁換頁,實測只有每秒3.9個字詞。Edge0把參數放硬碟按需讀取,內存只占2.9GB,速度反而達到每秒20.4個字詞。

Q3:Edge0對模型輸出質量的影響大不大?

A:影響不大,35B版本和8B版本在五項公開基準測試上平均分別只比原始16比特模型低3.9分和2.8分,損失主要集中在數學競賽這類長鏈條推理任務上,日常問答和代碼能力幾乎不受影響。

宅中地 - Facebook 分享 宅中地 - Twitter 分享 宅中地 - Whatsapp 分享 宅中地 - Line 分享
相關內容
Copyright ©2026 | 服務條款 | DMCA | 聯絡我們
宅中地 - 每日更新