上周MiniMax發了M3,主打三件套:編程能力大幅提升、長上下文、原生多模態。先看它自己放出來的成績單。
![]()
紅色那根是M3。我的整體判斷:編程和agent工具調用這塊,它確實摸到了前沿線,跟Opus 4.7、GPT-5.5基本站到了同一檔。少數偏弱的項,后面會說。
不過相比榜單,我自己更感興趣的倒是它官宣里最技術的那塊,一個叫MSA的東西,全稱MiniMax Sparse Attention,稀疏注意力。
發布當天官方只有博客和一張架構圖,好些細節懸著,現在完整的技術論文放出來了,30頁,我從頭到尾讀完了,收獲不小:之前懸著的細節都攤開了,還有幾個藏在附錄里的實驗,比正文還有意思。這篇文章里不少細節,就來自這份論文。
![]()
說起來,這兩年但凡國產模型聊長上下文,幾乎都繞不開「稀疏注意力」這四個字。先把場上的牌攤一下:NSA和DSA都是DeepSeek的,去年2月那篇被討論很多的Native Sparse Attention是DeepSeek放的論文,去年9月V3.2上線的DSA是它落到生產里的實現;Kimi有MoBA,2025年2月和NSA前后腳放出;現在MiniMax又來一個MSA,給M3配套。
乍一看,大家好像在做同一件事,名字都長得差不多。但我把這四份方案的論文翻出來擺一起看,發現它們看著像,骨子里的取舍其實分道揚鑣。今天就來干這件事,把四份方案放一張桌上,講講到底差在哪。
一、先問一句:為什么大家都奔向稀疏
要理解稀疏注意力,得先知道它在解決什么問題。
注意力機制(attention)是Transformer的核心。簡單理解,模型每生成一個新詞,都要回頭把前面所有的詞掃一遍,算一算我現在該重點看誰。這個掃一遍所有人的操作,就是full attention,全注意力。
問題出在「所有人」這三個字。
假設上下文里有n個詞,模型每生成一個新詞,都要回頭看一遍前面全部n個詞。寫到第100萬個詞的時候,光這一步就要看100萬次,整篇累計下來,計算量就是n的平方級別,也就是O(n2)。上下文一千個詞的時候沒人在乎,可你要做100萬詞的1M上下文呢?平方一下,是一萬億級別的運算量。
不止算力。模型還得把前面所有詞的信息存下來備查,存的這堆東西叫KV cache。上下文越長,這個緩存越大,顯存直接吃滿。
所以1M上下文這件事,技術上早就能做,真正的攔路虎是經濟賬:太貴,跑不起。
稀疏注意力的思路就一句話:生成下一個詞的時候,沒必要真的回頭看完前面100萬個。絕大部分是不相關的廢話,模型只要挑出真正相關的那一小撮來精算就行。
挑誰、怎么挑、挑多細,就是這場三國殺的全部分歧所在。
順便交代下MiniMax自己的來路,因為它這次選稀疏不是拍腦袋。早期的MiniMax-01和M1走的是另一條更激進的路,以線性注意力(Lightning Attention)為主的混合架構,想繞開softmax、把那個O(n2)直接干到接近線性。后來M2又退回了老老實實的full attention,還專門寫了篇長文解釋為什么。兜了一圈,M3落到稀疏注意力這條中間路上。這條路沒線性那么激進,但比full attention省得多,算是它試出來的一個平衡點。
二、MSA是怎么做的
先把主角講透,再去和別人比。
論文里給MSA的定位是兩個分支:一條索引分支(Index Branch),一條主分支(Main Branch)。官方架構圖長這樣:
![]()
全是英文標注,看著有點勸退。我把它的邏輯翻譯成了中文:
![]()
按這張圖,MSA的做法可以理解成先粗篩,再精算兩步走。
第一步,粗篩。索引分支把前面的上下文切成一塊一塊的(一塊128個token),用一個很輕的打分動作快速估一估每塊跟當前要生成的內容相不相關:先給塊里每個token打個分,取塊內最高分當這塊的分(論文里叫block max pooling),然后挑出16塊:當前位置所在的那塊必選,其余按得分高低挑。
第二步,精算。主分支只在挑出來的這16塊上跑完整的注意力計算,剩下沒被選中的直接跳過。16塊乘以128個token,等于每生成一個詞,固定只精算2048個token,不管你上下文是10萬還是100萬。這就是省錢的來源:全注意力的開銷跟著上下文長度漲,MSA把精算預算焊死了。
打個不太嚴謹的比方。你要在一本一千頁的書里找一段話,full attention是從頭到尾逐字讀完,MSA是先翻目錄和小標題、圈出最可能相關的那幾頁,再逐字精讀那幾頁。前者保證不漏,但慢;后者快得多,賭的是目錄足夠可信。這個比方有個失真要點破:書的目錄是印死的,MSA的目錄是每寫一個新詞就重新翻、重新排一次的,而且沒人幫它編,是模型自己學出來的。怎么學出來的,下面馬上講。
讀論文之前我有個疑問:這個負責挑塊的索引分支,自己不也要掃全文打分嗎,憑什么它不貴?論文給了答案,輕到夸張。注意力可以理解成64只眼睛并行各看各的,這是主分支干活的配置;索引分支砍到只用1只眼睛粗掃(論文的配置是每個注意力組1個打分頭,外加全模型共享1個key頭)。打分時還跳過了softmax里最貴的指數運算,理由很簡單:挑top-k只關心名次,做不做softmax,名次都不變。粗篩的成本被壓到幾乎可以忽略。
還有個問題更要命:挑top-k這個動作是不可導的,沒法用正常的訓練方法教索引分支「該挑哪塊」。論文的解法是給它配了一套完整的訓練配方:讓索引分支拿主分支的注意力分布當老師,用KL散度對齊(你主分支真正關注誰,我就學著給誰打高分);訓練信號只更新索引分支自己的參數,不許串到主干網絡去(梯度截斷);開頭40B個token先跑全注意力熱身,等索引分支學得差不多了再開啟稀疏。
像學徒先跟著老師傅看,看明白了才放手讓他自己挑。放手之后老師也沒下崗,KL對齊繼續在挑中的塊上做。至于學徒壓根沒挑中的塊怎么糾錯,論文沒專門展開,只給了監控數據:索引分支挑出來的塊,覆蓋了主分支九成以上的注意力權重,算是用結果說話。
算子層面,論文把博客里提過的「outer gather Q」展開講了。常規稀疏kernel的做法是以query為中心:每個query各自去把它要的KV塊撈出來,同一塊數據被不同query反復讀。MSA反過來,以KV塊為外層:把所有選中了這塊的query聚集到一起,一次性算完,每塊數據只讀一次。像倉庫揀貨,與其每個訂單派一個人滿倉庫跑、同一個貨架被踩好幾遍,不如按貨架來,一個貨架前把所有要這件貨的訂單一起處理掉。
論文給這事算了筆賬。先交代個背景:GPU的脾氣是算得飛快、搬數據很慢,瓶頸常在搬運不在計算,所以衡量這類kernel的好壞,看的是搬一次數據進來能算多少下,行話叫計算訪存比。按query為中心組織,這個比值大約等于注意力的組內頭數,論文實驗模型的配比下是16;按KV塊為中心,大約是塊大小的三分之二,128的塊就是85左右。光是 top-k 選擇這一步的 kernel 就實現快 3-5 倍,計算訪存比的提升落到了實測里。
順帶說一句,去年NSA論文里也有一套面向GQA的數據裝載設計,但方向正好相反,它是以query位置為中心把一組頭湊到一起裝載。我之前以為兩家是同一個思路,讀完論文才發現搞反了,這個反轉恰恰是MSA kernel的核心創新。論文作者除了MiniMax還有北大和NVIDIA的人,kernel這塊下了重本。
效率上論文給的數字:在一個109B參數的實驗模型上,1M上下文時MSA的注意力計算量縮到了全注意力基線的1/28,H800上實測預填充(prefilling,把你那一長串輸入讀進去的階段)快14.2倍,解碼(decoding,逐字往外蹦的階段)快7.6倍。
![]()
論文還挺老實地解釋了為什么實測加速追不上28.4倍的理論值:建索引、挑top-k、聚集query這些動作本身都有開銷。這種把丑話說在前面的寫法,挺加分的。不過也得替讀者問一句:這些數字全來自論文的實驗模型,M3本體多大、實際跑起來快多少,論文沒披露,只能等第三方實測。
省了這么多,能力掉不掉?論文做了個3T token的對照實驗:同一個109B模型,一個用全注意力訓,一個從頭用MSA訓,loss曲線幾乎重合。
![]()
下游benchmark上,從頭稀疏訓練的版本(論文里叫MSA-PT)不光沒拖后腿,在長文本檢索、數學、視頻理解等好幾項上反超了全注意力基線,RULER-8K一項84.2對79.8。
論文里還有條對行業可能更實用的路線:MSA-CPT,拿一個已經訓好的全注意力模型,花400B token做繼續訓練,就能把它改裝成稀疏注意力,能力幾乎無損。換句話說,MiniMax 順手把改裝入口也對生態開了,以后Qwen、GLM 這些模型如果想做 1M 上下文,都有便宜的路可走。當然改裝版也不是處處全贏:論文給它追加了128K的長文擴展實驗,綜合檢索分還差全注意力0.6分,重排序任務差2分多。論文結尾承認這是殘余差距,要靠更長的稀疏訓練或者加大選擇預算去填。
最后說說我覺得全論文最有意思的部分,附錄。
附錄里有張可視化圖,把訓練好的索引分支到底在挑什么畫了出來,每個小圖是一個頭的選擇概率熱力圖:
![]()
圖里能看到三種模式:沿對角線的深色帶(永遠關注最近的內容)、最左邊一條豎線(所有頭都盯著開頭幾個token不放:注意力分數必須全部分出去,沒什么值得看的時候,開頭幾個token就成了停車場,業內管這叫attention sink)、以及各組各不相同的斜向條紋(不同頭各自負責回看不同距離的遠程信息)。沒有人教過它這些,全是KL對齊訓練自己涌現出來的。
更有意思的是論文接下來的操作。既然sink現象這么普遍,要不要學GPT-OSS給每個頭顯式加一個可學習的sink參數?試了,沒收益,砍掉。早期版本還強制索引分支必須選上開頭第一塊和附近的局部窗口,后來發現模型自己就會這么選,強制規則純屬多余,也砍掉。最終版只保留一條強制規則:當前token所在的塊必選,防止模型連眼前的內容都不看。
這一連串「試過了,沒用,砍掉」的負結果,比任何宣傳語都更能說明MSA的設計哲學。論文開篇自己寫了:遵循奧卡姆剃刀,消融實驗做完,只留下必不可少的組件。
三、三國殺:三個分歧點
把主角講透了,可以把四份方案擺上桌了。
先交代下NSA。它在2025年2月16號首發到arXiv,跟Kimi的MoBA(2月18號)前后腳放出,把稀疏注意力從實驗室里的想法正式推到了臺前。
但這倆還不是同一家同一個東西的兩個版本:NSA和DSA是DeepSeek不同團隊在不同時點的不同實現。NSA是論文,DSA是DeepSeek半年后(2025年9月29號)發布V3.2-Exp時落地的生產實現。同源思想,不同落地,論文里是三分支架構,DSA里改成更輕的Lightning Indexer做token級精挑。一個偏學術完備,一個偏生產效率。
到這里場上其實就三家公司:DeepSeek(手里捏著NSA論文和DSA實現兩張牌)、Kimi(MoBA)、MiniMax(MSA)。到今天MSA發布,稀疏注意力差不多成了國產模型做長上下文的標配動作。
但標配不等于做法一樣。這四份方案的分歧,集中在三個軸上。
分歧一:挑得多細,token級還是塊級
前面說稀疏注意力要挑相關的來算,那挑的顆粒度多大?
DeepSeek的DSA挑得最細,是token級。它的Lightning Indexer給每一個歷史token單獨打分(為了快,激活函數用ReLU、計算能跑在FP8低精度上),再精確挑出最相關的2048個token。
MSA和MoBA走的是塊級。它們不逐個token挑,而是先把上下文切成塊,以塊為單位打分、整塊整塊地選。MoBA的打分方式更糙一點:把塊內所有key向量取個平均當這塊的代表,連額外參數都不引入。
這里有個對仗很工整的細節:DSA每個query挑2048個token,MSA挑16塊乘128也是2048個token,預算一模一樣,分歧全在顆粒度。
DSA賭的是逐token挑能撈到散落各處的零碎信息;MSA賭的是相關內容通常成段聚著,按塊挑足夠,而且塊狀的內存訪問對GPU友好得多。MSA論文里點了token級方案一句:長上下文下,光是從一百萬個token里做top-k挑選這個動作本身,就要占掉不可忽略的延遲。
還用讀書那個比方。DSA像逐字挑出書里所有相關的詞,MSA和MoBA像按段落、按章節來挑。前者更精準,后者更省事,賭的東西不一樣。
分歧二:壓不壓KV
這一條是我覺得最有意思的分歧,藏著兩種不同的信念。
DeepSeek這一路是兩層疊加。底層有個叫MLA的設計,先把KV壓成一個更小的潛向量再存,省顯存(打個比方,與其存一張高清原圖,不如存一張壓縮過的小圖,要用時再放大,放大了有點糊,但大輪廓都在,MLA干的就是這件事)。DSA再疊在MLA上頭,在壓縮后的KV上做token級的稀疏選擇。它的官方報告里寫得很直白,DSA是「建在MLA之上」的。DeepSeek又壓又選,省顯存這條線一以貫之。
MSA不壓KV,是個純選擇器,論文原話叫selector-only design,KV原原本本存著,所有功夫都花在「選得準」上。
這背后像是兩種不同的信念。DeepSeek覺得信息禁得起壓,糊一點沒關系,省下來的顯存更值錢。MiniMax不這么看:要省就省在挑選上,真正要算的那一下,別糊。
分歧三:要不要輔助分支
NSA是個三件套結構,三條分支并行:一條壓縮分支(把連續的塊壓成代表,看個大概),一條選擇分支(挑最重要的塊精算),還有一條滑動窗口分支(專門照顧最近的token)。三條各管一攤,最后用一個學出來的門控加權匯總,理論上覆蓋得最全。NSA還有個挺巧的設計:選塊用的重要性分數不另算,直接復用壓縮分支算注意力時的副產品,幾乎零成本。
MSA砍掉了另外兩條,只留那個初篩加精算的選擇動作。
我覺得這個減法本身就是一種態度,而且讀完論文發現,這個減法是做了對照實驗才下的手,不是圖省事。論文專門拿一個計算量完全對齊的基線做了對比:同樣的稀疏預算,固定只看開頭一塊加最近的窗口,在一堆agent任務上一致地更差。結論是位置固定的稀疏模式不如讓模型自己動態挑。滑窗分支不是忘了做,是驗證過不值得單獨留。
還有個對比里常被忽略的角:MoBA。它和MSA同樣是塊級選擇,但它有個自己的取舍,能在全注意力和稀疏注意力之間靈活切換。MoBA論文在百萬上下文實驗里的用法很實際:模型最后3層保留全注意力、其余層用MoBA,預填充階段用稀疏、生成階段切回全注意力。說明Kimi自己也清楚稀疏在哪些環節有短板,用混合配置繞開。
所以如果讓我用一句話概括MSA,我會說:它更像NSA的減法版。把三件套砍成一件,賭的是工程上的簡潔和好落地,而不是論文上的面面俱到。
三個分歧之外還有條暗線:那個挑塊的小腦,是怎么教出來的。四家給了三種答案。NSA讓它搭主結構的便車,端到端一起訓;MoBA干脆不給它配參數,蹭主模型的學習信號;DSA和MSA不約而同選了第三種,單獨給小腦找老師,就是前面講過的KL對齊那套。越靠近生產的方案,越往第三種靠,生產級方案在訓練配方上正在收斂。我猜這不是巧合:到了千億參數的規模,訓練穩定性比架構的優雅重要得多。
下面這張表把四份方案的取舍放一起,可能更清楚。
![]()
四、為什么「便宜」才是1M的真問題
講完技術細節,退一步看。這四份方案折騰來折騰去,本質上都在干同一件事:把長上下文從能做變成用得起。
這件事的意義比1M這個數字本身大。長程Agent連干十幾個小時、在百萬行代碼庫里排查問題、把幾小時的視頻一次喂進去理解,這些更性感的能力,全都壓在長上下文用得起這個前提上。底座便宜了,樓才蓋得起來。
M3也有還沒沖到頂的項。官方自己公布的成績里有一項叫PostTrainBench的測試,M3拿了0.371,排在Opus 4.7(0.424)和GPT-5.5(0.393)后面。前沿也不等人,Anthropic已經更到了Opus 4.8,6月9號又放出了更強的Fable 5。但M3的強項是編程到前沿、原生多模態、真1M這三樣能湊一塊,而且開源。
我覺得把前沿能力帶進開源世界這件事,本身就有分量:開源模型能拿到的能力上限,又被抬了一格。論文里還承諾MSA的推理kernel單獨開源,不過截稿時它印的倉庫地址還是404,等它放出來。
回到開頭那個問題:為什么2026年大家都不約而同奔向稀疏注意力?
因為全注意力那條路,在1M這個量級上,經濟賬算不過來了。線性注意力又太激進,訓練和質量上的坑還沒填平。稀疏注意力是當下這個階段,省錢和保質之間那個還算靠譜的平衡點。
這場仗的下一回合其實已經打響了。DeepSeek今年4月發布的V4,把1M上下文下每個token的推理計算量壓到了V3.2的27%,KV cache更是只剩10%,靠的是壓縮得更狠的新一代注意力方案。對照分歧二那條線看,DeepSeek把「壓」的信念貫徹到了底;MiniMax剛剛交出的,是「選」的答卷。兩邊都不是紙上談兵,是各自旗艦模型上的真金白銀。
至于MSA、DSA、MoBA、NSA誰的取舍最對,現在下結論太早,畢竟四家押的注本來就不一樣。DSA多花一筆打分成本,賭細粒度挑選物有所值;MSA賭的是選得準比壓得狠重要;NSA要的是面面俱到;MoBA最實際,給自己留了隨時切回全注意力的退路。
哪種賭注能贏,得等更多真實場景的長跑來驗證。但有一點已經挺清楚了:長上下文這場仗,比的不再是誰能做到1M,而是誰能讓1M便宜到隨便用。
參考資料
《MiniMax Sparse Attention》論文:https://github.com/MiniMax-AI/MSA/blob/main/docs/MiniMaxSparseAttention.pdf
MiniMax M3官方博客:https://minimaxi.com/blog/minimax-m3
《Why Did M2 End Up as a Full Attention Model?》:https://www.minimax.io/news/why-did-m2-end-up-as-a-full-attention-model
DeepSeek DSA(V3.2,DSA instantiated under MLA):https://api-docs.deepseek.com/news/news250929
NSA論文:https://arxiv.org/pdf/2502.11089
MoBA論文:https://arxiv.org/pdf/2502.13189
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.