Kimi K3:人物、神話與傳奇

AI速讀
Kimi K3 透過創新地將 KDA 線性注意力與 MLA 全注意力按 3:1 比例交錯,成功實現了預填充線性擴展與解碼恆定複雜度,顯著降低了長上下文的計算壓力。技術核心在於引入 FlashKDA 演算法與注意力殘差機制,使模型能選擇性訪問早期表徵,並在 LatentMoE 結構下透過分位數負載平衡(QB)優化專家路由。性能測試顯示,在 B300 節點配置 DRAM 解除安裝後,KV 快取容量提升近 5 倍,大幅降低了快取抖動。分析指出,Kimi K3 的推理成本極低,但在智能體工作負載下,MLA 的預填充成本仍有優化空間,預測未來版本將朝向 GQA 等機制演進。

太長不看

1.Kimi K3以KDA線性注意力與MLA全注意力按3∶1交錯,既保留全域建模能力,又壓縮歷史記憶,實現預填充線性擴展和解碼恆定複雜度。

2.逐通道遺忘門、Delta規則和FlashKDA分塊平行可穩定更新關聯記憶,減輕長上下文的計算與快取壓力;但MLA會增加預填充成本,智能體負載下仍有最佳化空間。


Kimi K3以KDA線性注意力與MLA全注意力按3∶1交錯,既保留全域建模能力,又壓縮歷史記憶,實現預填充線性擴展和解碼恆定複雜度。逐通道遺忘門、Delta規則和FlashKDA分塊平行可穩定更新關聯記憶,減輕長上下文的計算與快取壓力。

一、Kimi K3:其人、其神話、其傳奇

Kimi K3 的架構:壓縮記憶、跨深度注意力、潛在專家路由與服務性能

Shubham Choudhari、Bryan Shan 和 Dylan Patel。Kimi K3 一經發佈便席捲全球,橫掃各大排行榜,並確立了其開源前沿模型的地位。儘管社區迫切希望瞭解 Kimi K3 的工作原理,但許多人對支撐其性能的非傳統技術感到驚訝。本文將作為一篇入門指南,幫助讀者理解 Kimi K3 模型架構的核心技術。

二、Kimi Delta 注意力

Kimi Delta Attention(KDA)是 Kimi K3 混合注意力機制中的線性注意力層。我們將追溯 KDA 的起源,從線性注意力、DeltaNet、Gated DeltaNet(GDN)一直講到 KDA。

三、線性注意力

線性注意力的推導源於移除標準 softmax 注意力中的 softmax 運算。下面我們對比迭代推理公式,這些公式展示了 token 位置 t 處輸出向量的計算過程:

通過移除 softmax 運算,我們可以重新排列運算順序,將注意力的計算複雜度從二次降低至線性:

新的方程如下:

向量 q、k、v 的維度均為 L × d。兩個方程的計算複雜度均為 O(Ld²),因此計算複雜度為線性。對比新方程與 softmax 注意力方程可以看出,softmax 注意力需要訪問過去所有的鍵向量和值向量,而線性注意力則將過去所有的鍵向量和值向量壓縮到一個隱藏狀態 S 中。

我們可以將這些新方程重新解釋為一個線上學習目標。我們把矩陣 S 視為關聯記憶,用於記憶體鍵向量 k 與值向量 v 之間的關聯,並通過將 S 與 k 相乘來檢索 v。這樣一來,第一個方程就可以解釋為在每個位置持續更新矩陣 S,以完善檢索。最後,v_t @ k_t.T 項可以解釋為損失函數 −(S @ k_t.T) @ v_t 關於 S 的梯度。

目標函數:L_t(S) = −⟨Sk_t, v_t⟩

SGD 更新:

S_t = S_{t−1} − β_t∇L_t(S_{t−1})

= S_{t−1} + β_t v_t k_t^⊤

四、DeltaNet

從線上學習目標的視角來看,矩陣 S 的值會無限增長:隨著序列變長,新舊資訊在 S 中混雜在一起,導致學習過程不穩定。由於缺少 softmax 來提供尺度適當且有界的輸出,線性注意力在長程回憶任務上的表現通常落後於 softmax 注意力。

DeltaNet 通過將損失函數改為最小化值檢索結果的 L2 范數,對線性注意力進行了改進。與線性注意力的損失函數不同,DeltaNet 的損失函數會對 S 的增長進行正則化。由此產生了一種新的矩陣 S 更新規則,即如下所示的 Delta Rule:

目標函數:

L_t(S) = 1/2 ‖Sk_t − v_t‖²

SGD 更新:

S_t = S_{t−1} − β_t∇L_t(S_{t−1})

= S_{t−1} − β_t(S_{t−1}k_t − v_t)k_t^⊤

來源:Linear Attention and Beyond(Songlin Yang 的互動式教學)

Delta Rule 構成了 DeltaNet 注意力方程的基礎:

S_t = S_{t−1} − β_t(S_{t−1}k_t − v_t)k_t^⊤

從概念上講,Sₜ₋₁ @ kₜ − vₜ 表示與當前鍵和值無關的關聯,而 DeltaNet 會有針對性地移除這些關聯。

五、門控 DeltaNet

GDN 和 KDA 都是 DeltaNet 的改進形式。Gated DeltaNet 將 LSTM 的遺忘門 alpha 應用於矩陣 S,使模型能夠通過權重衰減控制記憶的存續時間。KDA 進一步將 alpha 擴展為對角矩陣,從而實現細粒度的逐通道記憶衰減和位置感知。

六、FlashKDA 演算法

Moonshot 開發了用於 KDA 的定製核心 FlashKDA,並將其開源。下面我們將解釋該演算法並推導其算術強度。

演算法

首先,我們從遞推公式的另一種表達形式入手:

u_t = beta_t × (v_t − (D_t @ S_{t−1}).T @ k_t)

S_t = D_t @ S_{t−1} + k_t @ u_t.T

o_t.T = q_t.T @ S_t

其中,D_t 是 alpha 遺忘門的對角矩陣,u_t 是 Delta Rule 中的增量。在解碼階段,核心大致遵循該公式。在預填充階段,為了在 GPU 上高效執行運算,我們通過按 token 分塊展開遞推公式,使運算平行化。假設我們展開從 token i 到 j 的區間,起始狀態為 S_{i−1},則得到:

S_j = D_{j:i} @ S_{i−1} + sum(D_{j:t+1} @ k_t @ u_t.T, t = i:j)

o_j.T = q_j.T @ S_j

= q_j.T @ D_{j:i} @ S_{i−1} + sum(q_j.T @ D_{j:t+1} @ k_t @ u_t.T, t = i:j)

D_{j:i} 表示從 token i 到 j 的累積衰減:

D_j @ D_{j−1} @ D_{j−2} @ … @ D_i

在 FlashKDA 的矩陣形式中,該公式變為:

S_out = D_{j:i} @ S_in + K_restore.T @ U

M_qk = tril(Q_decay @ K_inv.T)

O = Q_decay @ S_in + M_qk @ U

向量與矩陣之間的對應如下:

1.S_in 表示一個分塊起始位置處的狀態。

2.S_out 表示一個分塊結束位置處的狀態。

3.K_restore 是 D_j:t+1 @ k_t 的矩陣形式。

4.Q_decay 是 q_j.T @ D_j:i 的矩陣形式。

5.Q_decay @ K_inv.T 是 q_j.T @ D_j:t+1 @ k_t 的矩陣形式,由 (q_j.T @ D_j:i) @ (D_t:i^-1 @ k_t) 推導得出。

6.M_qk 是因果掩碼,因此是一個下三角矩陣。

U 是展開後的 u_t 的矩陣形式。為計算該矩陣,我們應用 UT 變換並進行以下計算:

B = Diag(beta) @ (V - K_decay @ S_in)

L = StrictTril(Diag(beta) @ K_decay @ K_inv.T)

U = (I + L) ^- 1 @ B

完整推導請參閱 Songlin Yang 的部落格文章和 Kimi Linear 論文第 3.1 節。請注意,此處的 U 對應 Kimi Linear 論文中的偽值項。

在實現方面,FlashKDA 會啟動 2 個核心:K1 和 K2。K1 平行準備塊級張量,包括:

a = exp2(cumsum(g))

K_decay = Diag(a) @ K

Q_decay = Diag(a) @ Q

K_inv = Diag(a) ^- 1 @ K

K_restore = a[-1] * K_inv

L = StrictTril(Diag(beta) @ K_decay @ K_inv.T);

INV = (I + L) ^- 100萬_qk = tril(Q_decay @ K_inv.T)

這裡,a 是累積衰減,其中每個元素表示相應 token 位置處的累積衰減。

K2 執行塊級循環計算:

U = INV @ Diag(beta) @ (V - K_decay @ S)

O = Q_decay @ S + M_qk @ U

S = Diag(a[-1]) @ S + K_restore.T @ U

複雜度分析

這裡我們分析一個注意力頭的複雜度。對於解碼,關鍵路徑上的計算為:

1.D_t @ S_t-1:逐元素乘法,D × D

2.S_t-1.T @ k_t:D × D × 1

3.k_t @ u_t.T:D × 1 × D

4.q_t.T @ S_t:1 D × D

解碼核心大約執行 7*D² FLOPs。

FP32 循環狀態的讀取和寫入佔據了大部分記憶體流量,因此記憶體流量約為 8*D² 字節。

對於預填充,K1 的關鍵路徑是計算 L、INV 和 M_qk。

1.L:C × D × C

2.INV:諾伊曼分解,執行 6 次 C × C × C 矩陣乘法

3.M_qk:C × D × C

對於 K2,

1.K_decay @ S:C × D × D

2.Q_decay @ S:C × D × D

3.M_qk @ U:C × C × D

4.INV @ B:C × C × D

5.K_restore.T @ U:D × C × D

綜合 K1 和 K2,FlashKDA 執行 12C^3 + 8D + 6CD² FLOPs。由於我們是在塊等級進行分析(塊大小為 C),假設序列長度 T >> C,則總體 FLOPs 為 T/C O(CD²) = O(TD²)。

對於記憶體流量:

1.K1 讀取 Q、K、g:C × D

2.K1 寫入且 K2 讀取 Q_decay、K_decay、K_restore:C × D

3.K1 寫入且 K2 讀取 INV、M_qk:C × C

4.K2 讀取 V 並寫入 O:C × D

5.每個核心中,K2 對 S 進行一次讀取和寫入:D × D

總計而言,FlashKDA 訪問 3 2CD + 2 (3 2CD + 2 2CC) + 2 2CD = 8C² + 22CD 字節。在核心層面,其訪問量為 T/C (8C² + 22CD) + 8*D² ~ O(TC + TD + D²)。

這具體表明,KDA 的計算複雜度為:

1.預填充:計算和記憶體複雜度均與序列長度呈線性關係

2.解碼:計算和記憶體複雜度均不隨序列長度變化,保持常數級

七、Kimi Linear

月之暗面訓練了 Kimi Linear 模型,作為其 KDA 設計的概念驗證,因此我們可以從 Kimi Linear 推斷 Kimi K3 的架構設計。對比 K3 發佈技術部落格與 Kimi Linear,可以看到 Kimi K3 在共享專家數量、混合線性注意力比例以及總體注意力模組設計上均與 Kimi Linear 相同。


上圖展示了對 KDA 輸入執行的操作。對於查詢、鍵和值,我們應用線性變換和短摺積。應用短摺積可以有效捕捉局部 token 依賴關係,而採用左側填充摺積可以避免破壞因果性。我們還對查詢和鍵應用 L2 歸一化,以穩定轉移矩陣和輸出矩陣的特徵向量。對於衰減記憶門,alpha 採用低秩投影,beta 採用降維投影。KDA 的輸出按頭歸一化,並由輸出遺忘門控制;在 K3 中,該門通過線性變換實現,而 Kimi Linear 使用的是低秩投影。最後,我們應用一個線性層來混合各個頭的資訊。

Kimi Linear 將 KDA 與全注意力的多頭潛在注意力(MLA)交錯排列。Kimi Linear 表明,3:1 是兼顧性能與效率的理想 KDA 與 MLA 比例。KDA 還可充當強大的位置感知算子,取代 MLA 中的 RoPE。

保留 MLA 作為全注意力是一項有趣的選擇,因為其他所有開放權重模型都在轉向分組查詢注意力(GQA)。MLA 使用吸收技巧降低解碼步驟的計算量,代價是增加預填充步驟的計算量。對於以解碼為主的推理工作負載,這是合理的權衡;但對於以預填充為主的智能體工作負載,額外計算會帶來高昂成本,卻幾乎沒有收益。因此,所有前沿開放權重模型都採用基於 GQA 的注意力機制:GLM 5.2 的 DeepSeek Sparse Attention、DeepSeek V4 的 Compressed Sparse Attention、MiniMax M3 的 MiniMax Sparse Attention,以及 MiMo V3 的 HySparse,均以 GQA 為基礎。我們推測,月之暗面未來的模型(如 Kimi K4)將採用取代 MLA 的注意力機制。

八、KV 快取效率

我們認為,不應僅根據 KV 快取的空間複雜度來推斷其效率。KV 快取大小並非獨立因素,而是模型設計的一項屬性:目前沒有開放權重模型採用靜態 KV 快取壓縮技術發佈,而模型架構的推理效率也會影響 KV 快取效率。KV 快取大小的影響還會因已部署模型實例的總記憶體容量而異。例如,採用寬專家平行部署模型與採用張量平行部署模型的記憶體分佈截然不同,這會影響可供 KV 快取使用的剩餘記憶體容量。因此,我們建議同時考慮模型架構的系統效率和 KV 快取大小,以理解 KV 快取效率,並使用 KV 吞吐量對其進行量化。

九、KV 吞吐量

在給定特定序列長度的情況下,KV 吞吐量定義為 KV 快取大小除以預填充時間(首 token 延遲)。KV 吞吐量代表採用預填充與解碼分離架構可靠服務模型所需的最低頻寬,同時也是理解 KV 快取效率的良好替代指標。預填充時間涵蓋了模型架構的效率;隨著序列長度增加,我們將看到記憶體受限和計算受限兩種情況。如下表所示,隨著序列長度增加,混合線性注意力的優勢會變得更加明顯。

這也是理解將 KV 快取解除安裝至叢集中不同記憶體層級時所需頻寬的一種良好方式。

十、KV 快取駐留

KV 快取的記憶體位置遵循記憶體層級結構。首先,KV 快取駐留在高頻寬記憶體中,這是 GPU 叢集內速度最快的記憶體,並使用模型權重和啟動值佔用後剩餘的容量。當 KV 快取大小超過高頻寬記憶體容量時,就會溢出至伺服器 DRAM;DRAM 容量更高,但頻寬更低。最後,當 KV 快取超過 DRAM 容量時,就會溢出至 SSD 等磁碟記憶體。這類似於電腦架構中的快取層級:暫存器、快取、主記憶體和磁碟記憶體。

這一類比也適用於記憶體一致性。流行的分佈式 KV 快取框架 Mooncake Store 支援 KV 快取載入的直寫和回寫策略。Mooncake Store 提供一個分佈式 KV 快取池,使所有 KV 快取對全部工作節點可見。在 DRAM 與更低層級的分佈式 KV 快取池之間實施直寫策略,可在多節點場景中帶來多項優勢,包括跨節點共享前綴快取、避免採用張量平行的 MLA 出現 KV 快取重複,以及在節點當機時提供 KV 快取冗餘。

11、KDA 前綴快取管理

在一次請求的每個 token 位置,Kimi K3 KDA 的循環狀態大小固定,而標準注意力的 KV 快取會隨序列長度增長。這種 KV 快取空間的縮減會增加前綴快取的複雜度,尤其是 Kimi K3 混合使用 KDA 和 MLA 注意力時。

粗略而言,現代推理引擎通過匹配現有快取中最長的 token 前綴來識別前綴快取命中。

對 KDA 等線性注意力而言,識別最長前綴會成為一個問題。如果事先不知道前綴邊界位於何處,就必須在每個 token 位置快取 KDA 的循環狀態。這意味著每個 token 都有一份快取,KV 快取的記憶體用量會退化為隨序列長度增長,從而違背使用線性注意力的初衷。為解決這一問題,月之暗面以較粗的粒度保存循環狀態,例如 vLLM 每 32K 個 token 快取一次。此外,vLLM 還會在提示詞邊界處進行快取,因為對於智能體工作負載,新一輪互動通常從提示詞末尾開始。

這表明,儘管 KDA 等線性注意力大幅降低了 KV 快取的記憶體消耗,但在實際服務過程中,它們並非只消耗恆定大小的 KV 快取記憶體。

12、注意力殘差

13、殘差連接

殘差連接是關鍵創新之一,它使我們能夠通過增加模型深度來建構更大的深度神經網路。神經網路越深,表達能力就越強,但直接訓練深層網路十分困難。來自較早層的訊號需要一直保留到最後一層,梯度也需要從輸出層傳遞到第一層而不消失。

殘差網路並不將整個網路建模為單一函數、僅通過非線性變換傳遞資訊,而是使用恆等路徑連接較小的模組。每個模組 \(f_i\) 學習對其輸入 \(x_i\) 施加的變化,其遞推關係為:

\[

x_{l+1}=x_l+f_l(x_l)

\]

恆等對應使特徵能夠從較淺單元傳遞到任意更深單元,同時為梯度提供一條高速通路,使其不會消失。

\[

\frac{\partial x_{l+1}}{\partial x_l}=I+f_l'(x_l)

\]

儘管殘差連接使我們能夠建構更深的網路,但它也帶來了一些挑戰。

為了對最終輸出產生影響,早期層會對殘差流產生很大作用。因此,隨著深度增加,殘差流會出現不可逆的資訊損失。後續層會提高輸出增益,以便對經過修改的殘差流產生影響,而這可能導致訓練不穩定。高速公路網路等其他變體允許通過門控機制控制資訊流,但也面臨同一個關鍵問題:各層無法選擇性地訪問早期層的資訊。

14、時間與深度維度上的遞推

曾經主導序列建模的循環神經網路也採用相同的遞推形式。

\[

h_{t+1}=h_t+f(h_t,x_{t+1})

\]

其中,每一步都通過與前一狀態之間的恆等對應直接傳遞資訊,而序列模型也面臨相同的挑戰:時間軸上的深度會稀釋訊號。

Transformer 注意力機制通過功能強大但成本高昂的注意力機制檢索過去的任意詞元,消除了這一限制。

15、殘差流上的注意力

受序列建模中注意力機制的啟發,Kimi 開發了注意力殘差,對深度維度上的模組執行注意力計算。

標準因果自注意力將詞元 \(t\) 的輸出計算為此前詞元表徵的加權和:

\[

o_t=\sum_{i=1}^{t}\alpha_{i\to t}v_i,\qquad

\alpha_{i\to t}=

\frac{\phi(q_t,k_i)}

{\sum_{j=1}^{t}\phi(q_t,k_j)}

\]

注意力殘差採用相同的注意力機制,但將序列維度取代為深度維度。每一層不再關注此前的詞元,而是關注此前各層生成的表徵。

與標準注意力不同,查詢是每一層的可學習參數,而不是根據當前詞元生成的。

\[

\alpha_{i\to l}=

\frac{\phi(q_l,k_i)}

{\sum_{j=0}^{l-1}\phi(q_l,k_j)}

\]

對於每一層 \(\ell\),定義:

\[

q_l=w_l,\qquad

k_i=v_i=

\begin{cases}

h_1, & i=0,\\

f_i(h_i), & 1\le i

\end{cases}

\]

每個彩色模組都表示此前某個 Transformer 層輸出的詞元表徵。正如標準因果自注意力會對序列中的詞元執行 softmax 注意力計算,注意力殘差也會對此前各層生成的表徵執行 softmax 注意力計算。

注意力殘差使模型能夠精細控制從過去各層選取那些輸入,從而增強模型的表達能力。

16、塊注意力殘差

注意力殘差需要使用此前所有層的輸出進行注意力計算。對於分佈在多塊 GPU 上的大型模型,這會產生 \(O(Ld)\) 的通訊開銷。為解決這一問題,塊注意力殘差將 \(L\) 層劃分為 \(N\) 個塊,每個塊包含 \(S\) 層。塊注意力殘差對已完成塊的輸出執行注意力計算,並將當前塊不斷演化的部分和納入計算。

塊注意力與完整注意力殘差之間的權衡很小,但可以將通訊開銷從 \(O(Ld)\) 降至 \(O(Nd)\)。

令 \(b_n^i\) 表示塊 \(n\) 中前 \(i\) 層的部分和,其中 \(b_n=b_n^S\),\(b_0=h_1\)。

對於塊 \(n\) 中的第 \(i\) 層,可用的塊表徵為:

\[

V_l=

\begin{cases}

[b_0,b_1,\ldots,b_{n-1}]^\top, & i=1,\\

[b_0,b_1,\ldots,b_{n-1},b_n^{i-1}]^\top, & i>1.

\end{cases}

\]

與標準注意力不同,查詢並不依賴輸入。每一層都會學習一個查詢向量:

\[

q_l=w_l

\]

針對可用塊表徵的注意力權重計算如下:

\[

\alpha_l=\operatorname{softmax}(K_lw_l).

\]

輸出是此前各層表徵的加權和:

\[

h_l=\alpha_l^\top V_l.

\]

注意力殘差不再僅依賴殘差流來保留資訊,而是讓每一層都能直接、選擇性地訪問早期表徵。注意力殘差的這種分塊變體大幅降低了通訊開銷,同時保持了具有競爭力的性能。

與標準殘差連接相比,塊殘差展現出更好的擴展能力,實現了 1.25 倍的計算效率。其驗證損失始終低於基線,而且差距在衰減階段進一步擴大。標準殘差網路的輸出幅度會隨著深度增加而增大,而塊注意力的選擇性聚合使輸出保持有界,梯度幅度也更加穩定。

17、訓練

與標準殘差網路不同,注意力殘差在計算第 \(N\) 層時需要此前全部 \(N-1\) 個塊的輸入。這會給流水線平行帶來問題,因為全部 \(N\) 個層塊的輸出都需要跨階段傳輸。

通過巧妙的跨階段快取和啟動檢查點技術,與採用流水線平行的標準架構相比,Kimi 將額外開銷降至僅 4%。

跨階段快取

對於 P 個物理階段和 V 個虛擬階段,每個塊 N 的每個分塊都需要進行 C=PV 次通訊。樸素方法需要為每個階段傳輸此前累積的所有塊,其成本隨物理階段和虛擬階段的數量呈二次增長。

樸素通訊量:

Comm_naive = ∑_{j=1}^{C−1} jNₚ·d = C(C−1)/2·Nₚd

這種高通訊量可以通過跨虛擬階段快取輸入來降低。較早層中計算出的塊可以記憶體在本地記憶體中。

對於第 1 個虛擬階段,所有塊嵌入都需要在物理階段之間傳輸,每個完成的塊都會記憶體在相應的 rank 上。對於後續所有虛擬階段,全部快取塊都可以復用於計算。只有 rank 上不存在的塊才需要傳輸,以完成從注意力到殘差的計算。

這將通訊成本拆分為第 1 個虛擬階段和後續虛擬階段兩部分。第 1 個虛擬階段仍需為所有物理層承擔相同的二次通訊成本。在後續虛擬階段,我們可以從本地裝置獲取快取輸入,只需傳輸 PNₚ 個分塊,從而將總通訊量從 O(C) 降至 O(P)。

快取後的通訊量:

Comm_cached = P(P−1)/2·Nₚd(第 1 個虛擬階段)+ (V−1)P²Nₚd(後續虛擬階段)

通訊量的降幅與虛擬階段數 V 成正比。因此,在一個完整階段的一次前向和反向傳播過程中,所有計算與通訊都可以重疊執行。

記憶體開銷

得益於跨階段快取,所有塊在全部 V 個虛擬階段中只需記憶體一次。通過啟動檢查點,所有用於注意力計算的塊間分塊都可被消除。每個階段的啟動檢查點 Pₗ 與標準架構中 Hₗ 的記憶體大小相同,不會產生額外的記憶體成本。

18、推理

由於注意力殘差需要此前所有塊的輸出來計算注意力,樸素實現會產生過多的記憶體訪問。為降低開銷,推理被拆分為兩個階段,分別對應自回歸注意力的預填充和解碼階段。該計算分為針對已完成塊的塊間注意力,以及針對當前運行塊中持續演進的注意力所執行的塊內注意力。

#### 階段 1:平行塊間注意力

解碼期間,我們需要輸出已完成的塊以及每層學習到的查詢向量。所有塊間層同時使用一個批次查詢對已完成塊的表示進行計算,返回輸出和可復用於後續計算的 softmax 統計量。該階段類似於預填充階段的解碼。

#### 階段 2:順序塊內注意力

該階段類似於解碼階段。與 FlashAttention 類似,塊內持續變化的累加結果可以通過線上 softmax 計算,並與預先計算的塊間結果結合,從而減少冗餘的記憶體訪問。

採用這種兩階段設計後,其 I/O 佔用與標準殘差架構相近,唯一增加的是階段 1 的塊間計算,而將塊內所有查詢進行批處理可以攤薄這部分成本。

19、LatentMoE

LatentMoE 在派發操作前壓縮已路由的 token,並在聚合操作後將其解壓縮。在 Kimi K3 的 Stable LatentMoE 中,他們在上投影(解壓縮)操作前應用 RMSNorm,以降低模型對尺度變化的敏感度並提升模型性能。

下面從 MoE 通訊的角度解釋 LatentMoE 背後的設計原則。如 LatentMoE 論文所示,通訊量與已路由 token 總數 t、活躍專家數 K 和專家輸入維度 d 成正比,與專家平行規模 E 成反比。這可能是 Kimi K3 採用相應 LatentMoE 維度大小和活躍專家數量配置的原因。Kimi K2 系列採用 8 個活躍專家,輸入維度為 7168,因此 Kimi K3 將潛在輸入維度設為 3584(7168 的一半),便可在不增加通訊量的情況下,將活躍專家數量翻倍至 16 個。

然而,在估算系統效率時,通訊時間與計算時間之比可能更為重要(相關討論見此處和此處)。該比率表明,在受吞吐量約束的運行區間內,MoE 核心將通訊與計算重疊執行所能達到的性能上限,而專家中間維度大小是唯一會影響該比率的模型配置。具體而言,增大專家中間維度會降低該比率,這意味著理論上可被隱藏的通訊佔比上限更高。下面推導其公式:

1.t:專家平行(EP)域內的輸入 token 總數

2.K:每個 token 的活躍專家數量

3.N:專家總數

4.E:EP 域內的 rank 數量

5.d:專家輸入維度

6.m:專家中間維度

7.P:每個啟動元素的總通訊字節數(派發 + 合併)

8.F:每個 GPU 的有效 FFN 專家計算吞吐量(建模為 SwiGLU),單位為 FLOP/s

9.B:每個 GPU 的有效單向網路頻寬,單位為 B/s

10.假設專家路由均勻,每個 GPU 會被分配 t*K/E 個 token。

11.假設專家路由均勻,平均有 1/E 的 token 位於源 GPU 本地,因此每個 GPU 分發 (tK/E) (1-1/E) 個 token。

12.每個 token 都是一個 d 維向量,因此每個 token 的通訊量為 d * P。

13.每個 GPU 的通訊量為 (tK/E) (1-1/E) P。

14.通訊時間 T_comm = (t P) / (E B) * (1-1/E)。

15.SwiGLU 計算涉及 3 次矩陣乘法:上投影(第一次投影):d 到 m;門控投影:d 到 m;下投影(第二次投影):m 到 d。

因此,每個 token 的計算量為 2dm + 2dm + 2md = 6dm FLOPs。

1.每個 GPU 的計算時間為 T_comp = (6dm) (tK/E) / F。

2.通訊時間與計算時間之比為 T_comm / T_comp = ((t P) / (E B) (1-1/E)) / ((6dm) (tK/E) / F) = (PF) / (6mB) * (1-1/E)。

我們認為,這一公式也解釋了為什麼不僅 Kimi K2 到 K3 將專家中間維度提高至 3072,近期所有開放權重模型也都採取了這一做法,包括 DeepSeek V4 Pro、MiniMax M3、MiMo V2.5 Pro 和 Inkling。隨著硬體性能提升,同時專家權重精度降低以節省記憶體容量,計算吞吐量隨之提高,因此降低該比率的一種方式就是增大專家中間維度。

20、分位數負載平衡(QB)

以往許多負載平衡方法都需要仔細調整超參數。分位數均衡是一種由蘇劍林在 2026 年 2 月的部落格文章中提出的無超參數、無輔助損失負載平衡技術。

QB 的基本原理與無輔助損失負載平衡相同,即根據系統負載動態更新路由器偏置。但 QB 並不像無輔助損失負載平衡那樣使用某個較小的係數更新偏置,而是根據路由器分數相對於路由截斷閾值的分佈,直接計算下一步偏置。當路由器均勻平衡負載時,偏置更新自然會變小。

QB 嘗試尋找在當前截斷值和當前批次路由結果下能夠近似實現均衡的偏置,方法是求解約束最佳化問題,並將這些更新應用於下一個批次。第一個約束是每個 token 必須恰好路由至 k 個專家。第二個約束是,由 m 個 token 組成的批次中,每個 token 選擇 k 個專家,總共產生 mk 次分配;要將負載均勻分配至 n 個專家,每個專家應處理 q=mk/n 個 token。

每個 token 將偏置後路由器分數中第 (k+1) 高的分數作為截斷閾值,並據此計算平衡各專家負載所需的偏置更新。對於每個專家,QB 會對其路由器分數與每個 token 截斷值之間的邊際進行排序。它將偏置設為第 q+1 大邊際值的負值,使恰好 q 個邊際高於閾值。由於 q/m=k/n,因此這對應於邊際的 (1-k/n) 分位數,這也正是其被稱為分位數均衡的原因。

21、推理性能

我們正在 InferenceX 上持續跟蹤 Kimi K3 的推理性能。

截至 7 月 30 日,OpenRouter 上所有提供商的最低價格均為輸入每百萬 token 3 美元、輸出每百萬 token 15 美元。輝達和 AMD 都在首日提供了 vLLM 配置方案,並重點宣傳 DRAM 解除安裝和 DSpark 推測解碼。

在 InferenceX 上,我們直接使用錄製的內部 Claude Code 軌跡對 Kimi K3 的服務性能進行基準測試。我們重放這些軌跡 1 小時,使系統進入穩態。每輪輸入 token 中位數為 142k,輸出 token 中位數為 444,每個會話的輪數中位數為 65。對於智能體框架上的工作負載而言,每輪輸出 token 較少是典型現象,因為智能體會頻繁呼叫工具,甚至編輯操作也屬於工具呼叫。

相比此前的 8k1k/1k1k 基準測試,這項基準測試實現了大幅提升,因為它真正反映了現實世界中的智能體使用場景。從系統角度看,它也更貼近實際情況和生產系統。它能夠反映 KV 快取行為,包括前綴快取和將 KV 解除安裝至 DRAM。

對於 Kimi K3,由於權重發佈前已有更完善的文件和準備工作,首日部署比 DSv4 更容易。適用的鏡像和推測解碼器模型與權重同時發佈。

22、DeepSeekV4 1.6T 從首日至第 43 日的性能變化,華為、GB300 NVL72、MI355X、B200

DeepSeek v4 的發佈標誌著開放模型社區再次向前邁進一步,不出所料,它出自一家中國實驗室。其性能隨時間的演進對 AI 生態系統至關重要。開源 InferenceX 工程團隊連續熬夜,測量該模型在首日、第 1 日、第 2 日及此後的性能結果,並將這些結果帶給全球使用者。

對於 B300,該模型可以裝入 1 個節點,並能良好提供服務。計入權重後,GPU 高頻寬記憶體只能容納 325萬 token。在下圖中,吞吐量會隨著批大小增加而上升,直至並行數超過 8。這與 325萬 token 的 KV 快取預算大致吻合;隨後快取開始抖動,導致命中率從理論上的 95% 降至不足 10%。

但對於每個 rank 配備 219.91 GB CPU DRAM 解除安裝空間的系統,這會額外提供可容納 1576萬 token 的 KV 快取,使 KV 快取可容納的 token 總量達到原來的 4.85 倍。性能提升也非常顯著。在啟用 DRAM 解除安裝但不使用推測解碼的情況下,並行數超過 8 的配置也能運行,而不會發生快取抖動。

出現快取抖動的配置位於吞吐量—互動性圖的左下方,其特徵是快取命中率極低。

23、總擁有成本

從 SemiAnalysis 的 Claude Code 和 Codex 使用情況來看,快取讀取成本佔據了我們支出的大部分。

在 P90 為每使用者 30 tok/s 的情況下,使用 1 個 B300 節點並採用 DSpark 推測解碼進行服務,可以實現每個 GPU 4844.1 tok/s 的輸入吞吐量。按截至 2026 年 7 月的 3 年期租賃價格 2.60 美元/小時計算,每百萬輸入 token 的成本為 0.1712 美元。這意味著提供商為 Kimi K3 服務設定的價格約為成本的 10 倍。在 B200 上,情況要糟糕得多,幾乎不可行。

使用 ISL 與 OSL 比率為 315:1 的 AgentX 資料集,我們估算,在 Moonshot 平台上以每使用者 22 tok/s 使用 Kimi K3 的綜合價格為每百萬 token 0.74 美元。在互動性相近的情況下,我們的 InferenceX 結果顯示,使用 vLLM 在 B300 上為 Kimi K3 提供服務的成本為每百萬 token 0.171 美元,同時互動性超過其 2 倍,成本降低 76.89%。

(404K)