騰訊科技旗下企鵝智庫前沿科技論文解讀專欄。在程式碼與商業的交匯處,尋找AI的確定性。
7月幾天之內,中國大模型行業接連出現了兩個超過2兆參數的模型。
Kimi率先發佈K3。它的總參數量2.78兆,每個Token啟動約1042億參數,擁有896個路由專家,支援最長100萬Token上下文。
隨後,阿里又預覽了總參數量2.4兆的Qwen3.8-Max。
兩個2T以上模型前後腳出現,說明訓練一個3T級模型有了一些具體的、可復用的配方。
而這個配方,K3的技術報告都已經給了出來。
大家都覺得訓練一個3T參數的模型很難,尤其是中國開源模型訓練出這個大小的模型,更難。
因為中國的算力有一些瓶頸。
Kimi 沒有披露 K3 主預訓練使用了多少張卡、什麼型號,也沒有公佈訓練 Token 總量和 GPU 小時,但其資源區間應該與DeepSeek相似。他們手上並不缺數千張 Hopper 等效卡,但應該沒有可以大規模鋪開的 GB200 NVL72 或同等級超級節點。
這正是理解 K3 的起點。
01
訓練沒有門檻,效率和效果才是門檻
訓練一個模型,原本可以拆成五個問題。模型、梯度和最佳化器狀態能不能裝得下,算力是不是能夠算得動,資料能不能在數千張卡之間傳得動,資料到位後 GPU 能不能持續算得滿,花出去的計算最後能不能讓模型學得好。
第一步是裝得下。
K3 是 MoE 模型。每讀入一個 Token,並不會呼叫全部 2.78T 參數,而是啟動約16個專家MoE,約計 104.2B 參數。
K3 的 2.78T 參數隻按 BF16 保存一份權重,就需要大約 5.56TB。BF16 是訓練常用的 16 位浮點格式,每個參數佔 2 字節。訓練時還需要梯度、最佳化器狀態、各層產生的中間啟動和通訊緩衝,整個系統要管理的是幾十 TB 資料。
因此理論上,2.78T的參數,只需要70多張 80GB GPU 理就能放得下,用上千張就能訓練的起來。
但你得先把它們給拆開,並有效記憶體,還能互相連通著能彙總資訊跑的下去。過去幾年形成的分佈式訓練方法,解決的就是怎樣拆。
2019 年的 Megatron-LM 給出了 Transformer 大矩陣的實用切法。2021 年,NVIDIA 又將張量、流水線和資料平行組合起來,在 3072 張 A100 上就跑通了 1T 稠密模型的訓練迭代。它其實已經證明了,模型只要能夠沿矩陣、網路層和訓練資料等方向拆開,兆參數就不再存在不可跨越的容量上限。
理論上,模型繼續擴大,只需要增加裝置和切分規模。
當然模型真正開始訓練後,前向傳播產生的中間結果要暫時保留,反向傳播還需要梯度和最佳化器狀態,都要有地方存。不同裝置通訊時,也要準備收發緩衝區。而這種計算過程中,任何一類資料在同一時刻集中出現,都可能讓某張GPU視訊記憶體撐不住。
因此,一般的訓練體系中還得有一個統一調度,防止記憶體「冒頂」現象的出現。比如 K3 通過Unified Activation Manager,也就是統一啟動管理器,把它們整合成張量級的記憶體調度。每個反向傳播需要的中間結果,都可以由這個管理器動態決定是留在GPU、還是轉到CPU的記憶體去,是壓縮成FP8,還是乾脆不保存,等反向傳播時重新計算。
它像一個統一倉儲系統。馬上要用、重新製造又昂貴的零件放線上邊、暫時不用的送去外倉。體積大的壓縮存放,便宜易造的零件不留庫存,用到時再生產。
這種細粒度調度則就負責避免訓練運行到某一層、某個批次時突然局部爆倉。
到這一步,就是能切,能訓不炸了。
但能切不等於能高效訓練。模型切得越散,原本發生在一張GPU內部的資料交換,就越多地變成跨卡通訊。而且,裝置增加以後,專家負載、流水線等待和故障機率也會同步上升。
因此,能切以後,大模型競爭的核心從「參數能不能放下」,轉向四個問題。怎麼才能算的更快,卡間需要傳多少資料,GPU有多少時間真正用於計算,以及每單位FLOPs能換來多少模型質量。
能在有限算力中高效訓練出來,更大參數這件事兒才能成立。
而過往的經驗中,大家都也都是主要在這四個點上下功夫。招式也幾乎差不多。比如到了 DeepSeek-V3 這一代,大規模 MoE 的主要最佳化方向已經基本定型。
招數可以分為幾大方向。
算得動,主要靠修改注意力機制,減少長上下文的記憶體與計算。DeepSeek從MLA開始選擇了稀疏路徑,Minimax和Kimi選擇了線性。
傳得了,一來是控制單個 Token 的啟動成本。總參數繼續擴大,但每個 Token 實際呼叫的參數、產生的計算和通訊不能同步增長。這就是MoE的作用。
二是把訓練精度壓小,比如用FP8,乃至FP4的資料訓練。
三來是疏通堵點,比如平衡專家負載,避免少數熱門專家堵住整個叢集。DeepSeek 使用無輔助損失負載平衡。
算的滿,主要依靠重排平行與流水線,讓通訊和計算重疊,擠掉 GPU 空等的氣泡。
最終,依靠壓縮稀疏處理和高效運用GPU,模型訓連的整體速度自然快。
但學得快還有另一層意思,就是提高每單位訓練計算的學習回報。這可以通過最佳化器(Muon)和殘差流改造。
這套框架和方法點,後來的 DeepSeek-V4 和 Kimi K3 這次在模型上的三項架構改造基本上是完整的進行了繼承,只是增加了細化。
但K3面對了一些新挑戰。
從1T道2.8T,新增參數必須以某種方式進入模型的實際計算,而且得讓它儘可能有用。不然就白白浪費了。K3因此同時擴大了寬度、深度和長度。
變寬最直接地產生參數。K3把路由專家從384個增加到896個,讓模型擁有更大的專業參數庫。同時把每Token啟動專家從8個增加到16個,使新增容量不只是靜靜躺在模型裡,而能更多地參與一次計算。
變深增加每個Token接受加工的次數。K3從61層增加到93層,使資訊能夠經過更多輪變換。只增加專家,相當於擴建圖書館,卻沒有增加研究員處理材料的步驟。增加深度,才讓模型能夠把更大的參數容量組織成更複雜的表示和推理過程。
變長則擴大模型需要處理的問題範圍。上下文從128K增加到100萬Token,並不會直接增加參數,但它讓更大的模型在訓練中面對更長的依賴、更複雜的材料和更長期的任務。否則模型雖然擁有2.8T參數,訓練時仍只處理較短的資訊片段,新增容量未必能轉化成長程能力。
100萬Token會讓全域注意力計算急劇增長,算不過來。K2還能用的MLA必須得換成線性了。
更多專家和一次用一倍的專家,則會增加通訊負擔和負載不均風險。
93層會增加學習的效果壓力,殘差在越來越深的層裡迷失,就學不會了。
因為當前算力本身的限制,算的過來和傳的動是最大的卡點。因此和DeepSeek一樣,在稀疏和均衡上,Kimi先下了大力。
02
第一關:KDA 解決算得動
K3 把上下文從 128K 拉到 1M,網路又從K2時代的 61 層加深到 93 層。如果 93 層全部沿用 MLA,序列長度增加約八倍後,算力的增加完全沒法處理。
這是因為全注意力處理 100 萬個 Token 時,會把所有詞全部擺開,讓每個新詞都能看到之前的所有詞。代價是 100 萬 × 100 萬 = 1 兆次巨量計算。
而線性注意力的核心目標,它不再保留全部歷史,而是把讀過的內容不斷壓進一個固定大小的狀態矩陣。是把全注意力那個記憶體了所有歷史資訊的的NxN的巨大矩陣,壓縮成一個小巧的、可以持續更新的記憶膠囊。
它維護一個固定大小的狀態向量(比如 128 維),每來一個新詞就更新這個狀態。寫入新資訊,部分保留舊資訊,部分遺忘。無論序列多長,只記憶體這個固定大小的狀態,計算量降到 O(N),記憶體變成恆定。
材料從一萬字增加到一百萬字,這個膠囊還是一樣的大小。
除了算的快以外,線性注意力也從根本上改變了長上下文的成本曲線。由於每一步面對的狀態大小基本不變,序列增加一倍,注意力計算通常只增加一倍,而不是四倍。
但線性注意力本質上,是在用“失真壓縮”換取效率。這種失真壓縮帶來的核心問題是精確檢索困難。當你需要從 100 萬個 Token 中精確找回第 3 萬個位置的某個關鍵資訊時,那個被壓縮了 97 萬次的狀態,已經很難給你精準答案了。
想要讓它能減少這種壓縮中的損失,就得讓它更好的選擇記憶什麼和忘掉什麼。
這就靠的是 Kimi Linear 架構的核心,KDA(Kimi Delta Attention)注意力機制。
(K3的架構整體)
一個token進入後要經歷生成控制訊號 → 遺忘舊狀態 → 按更新強度糾錯寫入 → 讀取新狀態 → 輸出門篩選 → 送入下一層的全流程。
先過的是通道級的遺忘門,它確定那個狀態可以被遺忘。
為了保證更精細地管理有限記憶,KDA在注意力頭中引入了「通道等級」的細粒度門控機制。在遺忘門這裡,就是可以保證狀態矩陣的不同方向可以用不同速度衰減。比如實體關係可能需要長期保留,局部措辭和臨時格式則可以更快淡化。這樣關鍵結論記得久,臨時提醒會加速被忘掉。
Kimi Linear允許模型在一步之內,把某個記憶通道幾乎完全清空。這樣看起來很靈活,卻會給平行計算製造麻煩。KDA為了同時計算一小段Token,需要先把不同位置經歷的衰減換算到同一尺度。如果某段資訊已經被淡化到接近零,電腦就必須用一個極大的倍數把它重新放大,數字很容易超出BF16能夠表示的範圍。
同一個小塊內部的部分位置關係,也因此無法使用GPU最擅長的整塊矩陣乘法,只能逐對處理。
K3給遺忘踩了一腳剎車,單步保留率最低約為0.67%,不允許任何通道在一步內徹底歸零。這不會讓模型忘不掉,因為連續多步衰減後,資訊仍會迅速變得極小。它只是避免計算過程中突然出現過於極端的數字,KDA也因而跑得更穩、更快。
下一步糾錯寫入的更新的規則,KDA 用了 Delta Rule,也就是增量糾錯規則。模型寫入新內容前,會先根據當前 Key 從狀態中讀一次,比較現有記憶與新 Value 的差異,再針對誤差做修改。靠著它,線性注意力可以記得更準。
KDA 完成修改後並不直接把token送到後面的神經網路中,這裡還有一道輸出門。它負責決定候選資訊裡的那些特徵可以進入下一層。
可以把它想成一間錄音室。模型的Query操作先從新改好的資料庫裡找回許多聲部,輸出門再像調音台一樣,壓低這次任務無關的通道,放大有用訊號。
它不會修改筆記里長期保存了什麼,只控制這一次讀出的內容怎樣影響後續計算。
K3 為了進一步保證資訊更有效的輸出,把原始Linear的低秩輸出門改成了全秩輸出,讓當前 Token 可以更細地調節各個輸出通道。它增加了一點計算,卻讓固定狀態的讀取更靈活。
即使如此,固定狀態一定會損失細節。它不可能無損裝下一百萬 Token 的每個字元。K3 因此沒有完全放棄全域 Attention,而是沿用 Kimi Linear 的 3∶1 混合結構:連續三層 KDA 後插入一層 MLA。K3 最終有 69 層 KDA 和 24 層 MLA,並在模型末尾用 MLA 收尾。
固定狀態一定會損失細節。它不可能無損裝下一百萬 Token 的每個字元。K3 因此沒有完全放棄全域 Attention,而是沿用 Kimi Linear 的 3∶1 混合結構:連續三層 KDA 後插入一層 MLA。K3 最終有 69 層 KDA 和 24 層 MLA,並在模型末尾用 MLA 收尾。
MLA負責定期重新查看全部歷史Token,彌補線性注意力難以精確找回原文細節的問題。
K3的MLA不再使用顯式位置編碼,前後順序和遠近資訊主要由KDA提供,因此擴展上下文時不必重新調整RoPE,計算量也有明顯減少。
多數注意力層的計算變成近似線性增長,大幅減少,這樣大幅減少了算力需求,算的動了。
03
第二關,壓縮和防堵車系統解決傳得了
所有分佈式訓練方法都在做同一筆交換:用通訊換視訊記憶體。
一個公司,把機器、樓層、專業車間和帳本分散到不同園區,確實解決了單個園區裝不下的問題;但從此以後,半成品、生產記錄和結算資訊都必須在園區之間運輸。
因此平行之後,資訊傳遞就大大增大了。
而平行的方法很多,又分成張量平行把同一層的巨大矩陣切給多張GPU。流水線平行把不同網路層交給不同裝置組。每張卡只需要保存部分層及其訓練狀態。資料平行讓多個裝置組同時處理不同訓練樣本,它換來的是更高的Token吞吐。
上下文平行則是把一條長序列沿Token方向分給多張GPU。它換來的是每張卡只保存和處理一部分上下文序列的啟動。
專家平行則是MoE獨有的特色,它把不同專家固定在不同GPU上,換來的是每張卡只保存專家池的一部分,而不是全部896個專家。但代價是專家權重雖然不動,Token卻必須移動,一組訓練資料得在被啟動的專家間來回跑。
LatentMoE ,壓縮更多專家帶來的膨脹
雖然有這麼多平行模式,但這次承擔參數增長的主要是專家總數和啟動專家數量增多。
MoE模型,並不會讓每個Token都經過全部參數。每個Token只選擇其中幾個,而這一次訓練中主要的資訊傳遞就發生在 token的啟動被分發被選中的專家,專家完成計算後,再將多路結果返回並彙總。
而K3把每Token啟動專家從8個增加到16個,壓力一下子翻了一倍,專家平行自然成為「傳得動」的主要難題。
針對這一問題,K3採用了Nvida在1月提出的 LatentMoE 技術,可譯作潛在空間混合專家,就是把需要分給專家的參數壓縮一倍。
K3 的兩個共享專家仍在 7168 維主空間工作,所有 Token 都會經過它們。路由專家收到資料前,系統先用一次下投影,把 Token 從 7168 維壓縮到 3584 維潛在空間。而16 個路由專家只處理這份半寬表示,結果彙總後,再投影回 7168 維。
未經壓縮的K2需要處理的維度是8 個專家 × 7168 維 = 57,344,經過LatentMoE 壓縮後,K3則是16 個專家 × 3584 維 = 57,344,剛好完全一致。
靠著這一手,專家數量增加了,需要傳遞的材料總量並沒變厚。
這不等於 K3 的整體通訊和 K2 相同。但K3從61層增加到93層,MoE層數量也從約60層增至92層,深度還是增加了的。但K3從61層增加到93層,Token需要經歷更多輪專家分發與結果回收。
但 LatentMoE 消掉的是最危險的一次乘法,專家呼叫翻倍,不再直接乘上完整表示寬度。
KDA 上下文平行,讓上下文的交接變薄
另一個大幅增加的傳輸壓力,來自於上下文平行。原來不到1M的上下文並不需要很多平行,但K3是需要的。
為應對這一點,KDA 在卡間通訊上做了更多最佳化,這就是KDA Context Parallelism,即 KDA 上下文平行。
全域 Attention 做上下文平行時,把長上下文切成小塊分給多個GPU去計算,不同 GPU 要隨時交換隨序列增長的 Key 和 Value。但KDA則要求每張GPU先在本地處理自己負責的那一小段序列片段,然後總結出兩項資訊。一是這一段會怎樣修改此前傳入的記憶狀態,二是假設進入時沒有舊記憶,這一段自己會生成什麼狀態。
這像每位研究員不再複印整章逐句索引,而只提交一份格式固定的交接表,裡面寫著這一章會怎樣修改前面的結論,以及新增了那些結論。
一章是1萬字還是10萬字,GPU在本地需要做的閱讀工作會增加,但最終交出的交接表大小基本不變。
然後總編按章節順序合併這兩類資訊,便能恢復出每一章之前的精準筆記。技術上,這個順序合併叫 Prefix Scan,也就是前綴掃描。
這樣,模型計算需要交換的對象就變得大小固定,不再隨本段 Token 數量一起增長。這在長上下文訓練情況下大幅同樣大幅降低了跨GPU通訊的壓力。
Quantile Balancing,解決線路堵車問題
平均通訊量被壓下來,MoE的網路仍然可能會被堵死。
路由器不會自然把 Token 均勻分給 896 個專家。某批程式碼資料可能讓一組專家特別熱門,另一組專家幾乎無人訪問。如果幾個熱門專家恰好在同一張 GPU 上,這張卡就會收到大量 Token。其他卡已經算完,也只能等它。
DeepSeek-V3之前,MoE通常會在主訓練目標之外增加一個負載平衡損失,迫使Token平均選擇專家。但這個額外目標可能干擾模型學習,路由器為了平均分配任務,不一定把Token交給最合適的專家。
DeepSeek-V3改成給每個專家增加一個路由偏置。熱門專家的偏置降低,冷門專家的偏置提高。這個偏置隻影響專家能否進入Top-k,不改變專家入選後的混合權重,因此不會通過輔助損失直接干擾模型主目標。
它的更新方法很像手動調節水龍頭。專家過載,就把偏置降低固定的一小步。專家負載不足,就把偏置提高固定的一小步。
DeepSeek-V3隻有256個路由專家,已經可以用這種辦法維持大致均衡。
K3擴大到896個路由專家以後,固定步長的問題更加明顯。Kimi因此提出Quantile Balancing,中文可以譯為分位數負載平衡。
比起擰水龍頭,它直接開始看水表。查看當前全域Batch中的路由分數分佈,計算每個專家應該設定多高的錄取線,才能大約收到目標數量的Token,一次性整體調節,讓長期負載靠近目標水平。
到這裡,「傳得動」的分工就清楚了。KDA 減負長上下文平行帶來的流量, LatentMoE 壓縮專家溝通帶來的流量,減負。而Quantile Balancing 調整長期流量。
04
第三關,集體底座調整,解決算得滿
訓練系統常說峰值 FLOPs。FLOPs 是浮點運算次數,可以粗略表示 GPU 做矩陣計算的能力。把幾千張卡的峰值 FLOPs 相加,得到的只是理論上限。
真實訓練速度取決於這些計算單元有多少時間在幹活。
一張 GPU 可能因為等待遠端 Token 而空著,也可能已經拿到資料,卻只分到一個很小的矩陣。前一種是通訊飢餓,後一種是任務顆粒太碎。兩者都會讓硬體利用率遠低於卡的標稱性能。
可以把 GPU 想成餐廳後廚。廚師很多不代表出菜快。食材沒送到,廚師只能等。
Megatron-Core 提供了大模型工廠的通用排產框架,但 K3 的三種新架構改變了原料形狀。KDA 帶來遞迴狀態,AttnRes 增加跨 Block 表示,LatentMoE 又產生接近一千個動態專家。
(Kimi K3的總排程圖)
所以一番改造,才能讓模型算得滿。
MoonEP,讓GPU裡的專家都有活兒干
比如說Quantile Balancing根據整個全域Batch的路由統計,計算下一步應該使用的專家偏置。
它像根據全市一天的平均車流調整紅綠燈,卻無法預先知道下一分鐘會不會突然來一大隊40輛聯排婚車。
而一個全域Batch通常由許多Micro-batch組成。假設整個Batch同時包含程式碼、數學和普通文字,彙總起來,每個專家收到的Token可能很均勻。但其中某個Micro-batch可能恰好以程式碼為主,大量Token會同時選擇擅長程式碼的幾名專家。
後面的數學和文字Micro-batch能夠把全天平均數拉平,卻無法消除當前這一步造成的部分GPU的空耗。
MoonEP 就是在系統層處理已經發生的擁堵。MoonEP在Quantile Balancing的路由形成之後、真正堵車之前,讀取當前 Micro-batch 的真實分配情況。
發現某些 GPU 上的專家過熱後,它會在其他 GPU 上臨時複製這些專家,並把部分 Token 分流給副本。由此保證每個專家平行裝置(通常對應一張 GPU)最終收到完全相同數量的Token。
如果 Quantile Balancing 是調整各收費站的長期准入政策,MoonEP 就是即時交通指揮。某個收費站前已經排起長隊,系統會在空閒車道臨時開一個相同窗口,把後續車輛導過去。
完全配平會帶來幾項連鎖收益。每張卡的專家工作量一致,訓練不再等待最忙裝置。每個裝置接收的 Token 總數固定,通訊緩衝區可以按固定大小準備。
MoonEP 還使用 Zero-copy Communication,即零額外複製通訊。規劃器提前知道每個 Token 在遠端屬於那個專家,於是資料可以直接落到已經按專家分組的目標位置,不必在視訊記憶體裡搬運一次。
專家調度器,把零碎專家任務拼成 GPU 喜歡的大矩陣
經過上面的MoonEP 和Quantile Balancing,堵車問題就不會出現了。
但專家負載即使在 GPU 之間完全配平,同一張 GPU 內部的專家也未必同樣忙。一個專家收到 200 個 Token,另一個只收到 5 個。如果系統按固定順序逐個計算,部分計算單元處理大任務,其他計算單元很快結束,出現的情況就是算不滿。
K3 在此基礎上又增加了 Workload-aware Scheduler,即負載感知的專家計算調度器。
它會在計算開始前讀取當前各專家收到的Token數,再根據硬體成本模型調整任務安排。熱門專家的計算得到更多處理資源,小專家則穿插執行。總計算量沒有減少,但計算單元的空等時間縮短了。
這就像物流中心已經保證每個倉庫收到 1000 箱貨,但倉庫內部各貨架的箱數仍不同。調度器要根據這一批真實貨物重新安排叉車,不能永遠按固定貨架順序搬。
FlashKDA ,讓線性計算也能沾上平行的光
KDA 讓歷史狀態變小,卻引入了 GPU 不喜歡的先後依賴。
線性注意力下,一個序列塊的出口狀態要傳給下一個塊,後一個塊才能得到精準結果。若系統先平行計算塊內 Token,再停下來序列傳播狀態,GPU 會在傳播階段閒置。
FlashKDA 是 Kimi 為 KDA 編寫的兩個專用 Kernel,也就是一張交給GPU如何去計算的工單。
他會先把每段Token會怎樣修改記憶,預先整理成一張「更新卡」,包括遺忘門計算、Query和Key歸一化、衰減處理,以及塊內糾錯所需的小矩陣構造。這些更新卡互不依賴,可以同時計算。
等全部準備好後,模型再帶著記憶按順序經過每張卡,完成狀態更新、輸出讀取和最終狀態累積。
它沒有消除KDA的前後依賴,而是把大部分可以平行的準備工作從依賴鏈中拆了出來,只把最後的記憶交接留在順序流程裡。這樣,GPU不會每處理一小段Token就停下來等待一次狀態更新。
KDA 省下的狀態,只有經過 FlashKDA、KCP 和數值參數化改造,才會真正變成訓練吞吐。否則模型少搬了資料,卻可能在遞迴上把時間重新花回去。
這些方法聽起來分散,實際都在解決同一件事:不要讓所有資料在同一時間出現在同一張卡上,也不要讓搬運成為一段純等待。讓GPU儘可能的全跑滿。
05
第四關,殘差最佳化,影響學得快
都算的滿了,還不能證明 2.8T 值得訓練。
K3 最重要的訓練效率指標是 Scaling Efficiency,中文可以譯作規模擴展效率。它問的不是單張卡峰值有多高,而是達到同一個驗證 Loss,整場訓練總共需要多少 FLOPs。
可以把它理解成模型的燃油效率。前面算得滿,解決了發動機能轉多快,而Scaling Efficiency 決定燒掉同樣一桶油能走多遠,也就是影響達到目標質量需要支付多少總計算。
K3 報告稱,新架構、資料和訓練配方共同帶來約 2.5 倍整體 Scaling Efficiency。也就是說,如果 K2 路線達到某個效果需要1的計算量,K3 模型家族達到這個效果,大約只需要0.4的計算量。
前面提到的很多工作,其實已經大幅增加了K3的Scaling Efficiency。比如 Kimi Linear,在它的論文裡把全 MLA 換成K3用的這種 3∶1 的 KDA—MLA 混合結構,就可以帶來1.16 倍計算最優效率。
下面要介紹的 AttnRes 其論文中稱,能帶來1.25倍的Scaling Efficiency。
兩項合在一起,能解釋大概50%左右的效率提升。
而 Stable LatentMoE 的壓縮功力,也可以給它帶來一定的收益。
剩下的部分,則來自於其餘架構、資料和訓練配方,以及它們之間的協同作用。
AttnRes,用分層殘差穿透深層網路
從 2017 年至今,主流 Transformer 的學習機制主要是殘差連接。每一層完成計算後,把新產生的結果直接加到原來的隱藏狀態上:新的狀態 = 原來的狀態 + 本層產生的資訊。
這個設計非常簡單,卻解決了深層網路最棘手的訓練問題。即使某一層暫時什麼都沒有學到,資訊和梯度也可以沿著殘差通道繼續向前傳播。沒有殘差連接,今天上百層的大模型很可能根本訓練不起來。
問題在於,殘差連接只負責把資訊傳下去,卻不負責判斷那些資訊值得保留。
把殘差公式逐層展開,就會發現最終的隱藏狀態,本質上是許多歷史層輸出的持續累加。淺層提取的詞法特徵、中層形成的句法關係、深層產生的推理表示,都被塞進同一條殘差流中。
無論某一層提供的是關鍵線索、重複資訊還是噪聲,它們進入主幹道時使用的都是近似相同的加法規則。
層數較少時,這種粗糙的方式尚可工作。但隨著模型越來越深,殘差流中累計的歷史訊號不斷增大,每一層新產生的變化反而顯得越來越微弱。
到了90多層這樣的的位置,一層即使進行了大量矩陣計算,最終對隱藏狀態造成的改變也可能非常有限。
輸入和輸出越來越相似,這一層便逐漸接近恆等對應。
這就是所謂的「深度詛咒」,即模型增加了層數和參數,卻沒有獲得相同比例的有效深度。
一些研究發現,在32層模型中,接近44%的層可能只產生非常有限的有效變換。模型看起來變深了,真正參與表示學習的層數卻增長得很慢。
Transformer 的每一層都會在輸入表示上計算一個新變化,再通過殘差連接把變化加回主幹。殘差連接讓深層網路更容易訓練,因為資訊和梯度可以沿一條直接通道前後傳播。
問題在於,普通殘差把此前所有加工結果不斷混進同一份狀態。
K3 改採用的 Attention Residuals,也就是 AttnRes 就是要終結這種「深度詛咒」,讓殘差的學習變得更有效率。
既然注意力可以決定一個 Token 應該讀取那些 Token,為什麼不能讓它決定當前層應該讀取那些歷史層?
在標準殘差連接中,歷史資訊通過固定加法進入當前狀態。AttnRes 則把不同層產生的表示視為一組候選資訊。
模型進入新一層時,會根據當前狀態生成查詢,再通過注意力計算判斷,此刻更需要淺層保存的局部特徵、中層形成的結構資訊,還是最近幾層產生的高階語義。
換句話說,標準殘差連接只有累加,AttnRes 增加了檢索和選擇。
深層不再只能拿到一杯經過幾十次混合的「資訊果汁」,而是可以回到歷史層中,直接選擇當前真正需要的那部分表示。層間資訊傳遞由固定的資料通道,變成了一個可學習的動態路由系統。
這種改變還帶來一個容易被忽略的能力:遺忘。
傳統殘差連接幾乎只進不出。早期資訊一旦進入殘差流,就會繼續參與後面的計算。AttnRes 則可以降低無用層的權重,讓模型不必始終攜帶全部歷史資訊。它解決的因此不只是淺層訊號被稀釋的問題,也是在幫助模型控制殘差流中的資訊密度。
當然,直接讓每一層關注此前所有層,會帶來額外的計算和記憶體成本。模型越深,需要參與注意力計算的歷史狀態就越多。
為此,Kimi 又提出了 Block AttnRes,把連續層劃分為若干塊。這樣既保留了深度檢索能力,又避免計算量隨著層數迅速膨脹。K3中,93 層被組織成大約 8 個 Block,每個 Block 約 12 層。
靠著這種新的縱向注意力系統,AttnRes 能更有效的使用殘差,讓 93 層神經網路這樣的深度下,更容易產生有效表示。
後層可以直接呼叫淺層細節和中層關係,不必完全依賴一份高度混合的殘差狀態。其中的損失訊號也獲得了更直接通往早期階段表示的路徑。
AttnRes 論文的實驗顯示,這項改動的收益能隨模型規模保持,並在 48B 總參數、3B 啟動參數的 Kimi Linear 模型上獲得了約 1.25 倍的 Scaling Efficiency。
學得快的前提,是數值不能中途爆掉
3T 訓練運行數周乃至數月,偶爾出現一次極端啟動都可能造成昂貴損失。Scaling Efficiency 再好,訓練頻繁溢出或回滾也沒有意義。
模型需要一整套穩定性配方。
K3 在專家彙總後加入 RMSNorm,也就是均方根歸一化,先把潛在表示的整體尺度拉回穩定範圍;又用 SiTU-GLU 替換常用的 SwiGLU。SwiGLU 兩個分支都沒有嚴格上界,異常大值相乘後可能繼續放大。SiTU-GLU 用平滑的雙曲正切上限壓住極端值,在常用區間仍保持相近形狀。
可以把它理解成給專業生產線安裝限壓閥。正常壓力下閥門不影響工作,壓力突然沖高時才介入,避免一次異常把後續裝置全部頂壞。
KDA 的衰減下限也同時服務於訓練穩定和 GPU 效率。Per-Head Muon,即按注意力頭分別執行 Muon 更新,則避免梯度尺度較大的 Attention Head 主導整個投影矩陣。
不同注意力頭分別歸一更新,更像讓不同車道各自校準方向,不能讓一條最擁擠的車道決定整條道路怎麼轉彎。
這些穩定性改動未必直接貢獻一個顯眼的“1.x 倍”,卻決定 Scaling Law 曲線能否在大規模訓練中兌現。一個架構在小模型上更省 FLOPs,到了 2.8T 卻頻繁出現異常值,它的理論效率沒有實際價值。
所以,K3 的 2.5 倍 Scaling Efficiency 應該被看作整套系統的訓練總帳。KDA、AttnRes 和 Stable LatentMoE 核心改善模型怎樣計算,其他的底座 Infra 則保證硬體能持續交付這些 FLOPs。
算的動、傳得動、算得滿與學得快,最後會在這裡匯合。
06
3T級模型,不再是魔法
回頭看DeepSeek-V3、V4和Kimi K3,它們的技術路徑存在大量重疊。
1)用MoE擴大總參數,同時控制單Token啟動成本。
2)用MLA、稀疏注意力或者線性注意力降低長上下文成本。
3)用低精度訓練減少視訊記憶體和通訊壓力。通過專家負載平衡、通訊計算重疊和專用Kernel提高GPU利用率
4)模型變深以後,再改造殘差流、最佳化器和數值穩定機制,提高每單位FLOPs換來的模型質量。
具體招式可以不同,但往大裡訓練的方向已經相當清楚。
從研究上看,它沒有單純把K2繼續放大,而是抓住了模型擴大以後最關鍵的三條資訊通道。KDA改造Token與歷史Token之間的資訊流,讓百萬上下文不必承受全域注意力的平方成本。
AttnRes改造不同網路層之間的資訊流,讓93層網路不再只是不斷累加和稀釋歷史表示。
LatentMoE則壓縮Token與專家之間的資訊流,使每Token啟動專家數量翻倍後,單層通訊量不必同步翻倍。
這三項設計表現出了非常好的研究審美。不是無限增加複雜度,而是精準找到系統中最危險的乘法項,再用克制的結構修改把它消掉。
但要讓近千個專家在數千張GPU上連續運行,讓通訊、視訊記憶體、調度和數值穩定不在任何一個局部崩掉,仍然需要極強的工程能力。
Kimi靠的是 FlashKDA、KDA上下文平行、MoonEP、Quantile Balancing、統一啟動管理器和負載感知調度器,共同把架構上的理論收益兌現成真實訓練吞吐。
研究負責找到方向,Infra負責讓方向跑起來。
研究品味,工程能力兩手抓,K3則證明了中國實驗室同樣有能力重新設計前沿模型。(騰訊科技)
