~/satyajit

Kimi K3: a 2.8T open model that turns compute into intelligence 2.5× better

mdjsonmcp

2026-07-17 · 12 min · llm · mixture-of-experts · linear-attention · kimi · scaling · explainer

Moonshot's Kimi K3 is the largest open model anyone has shipped: 2.8 trillion parameters, about 50B active per token, a 1-million-token context, multimodal, released 2026-07-16 as open-weight. On Moonshot's own suite it beats every other model it was tested against on coding and agentic work, and trails only the two strongest proprietary systems — Claude Fable 5 and GPT-5.6 Sol. It is positioned, not unfairly, as Opus-4.8-class capability at Sonnet-5-class pricing.

The interesting part is not the parameter count. It is how the parameters are spent. K3 is built on two attention changes — Kimi Delta Attention (KDA) and Attention Residuals (AttnRes) — that rework how information flows across sequence length and across depth, and it scales up MoE sparsity hard: it activates 16 of 896 experts per token, inside a Stable LatentMoE framework. Together with refined training and data recipes, those structural changes yield roughly a 2.5× improvement in overall scaling efficiency over K2 — the model converts compute into intelligence more effectively. This piece is a first-principles tour of each piece, why it is new, and what a model like this actually costs to build.

kimi-k3 · transformer block2.8T-A50B · 1M ctx
hidden state outStable LatentMoE16 / 896 active (1.8%)routerL−1L−2L−3Attention Residualsattention sublayerGated MLAKDAgated delta-rule · linear attn · const statetoken hidden state inKDA: gated delta-rule linear attention · 1M context
stage=attention

One K3 block, bottom-to-top. The hidden state enters the attention sublayer (Gated MLA + KDA linear attention), Attention Residuals selectively pull from earlier depths, then Stable LatentMoE routes the token to just 16 of 896 experts (1.8%) before the block outputs. Scrub the stages to isolate each mechanism.

Read the block bottom-to-top: the hidden state passes through the attention sublayer (Gated MLA + KDA), Attention Residuals reach back to earlier depths, and Stable LatentMoE routes the token to 16 of 896 experts before the block emits its output. Four ideas, each doing a specific job. Take them one at a time.

Kimi Delta Attention: constant-size memory over a million tokens

Ordinary softmax attention keeps a KV cache that grows by one entry per token. At a 1M-token context that cache is the whole ballgame: decoding is memory-bound on a cache that scales with sequence length, and it only gets heavier as the context fills.

KDA is a gated delta-rule linear attention. Instead of a growing cache it keeps a fixed-size recurrent state StS_t that each token updates in place: it erases a little of the old state (a gated decay) and writes the new key/value association (the delta rule). A compact way to write the family is

St=gtSt1+βtktvt,ot=StqtS_t = g_t \odot S_{t-1} + \beta_t\, k_t v_t^{\top}, \qquad o_t = S_t\, q_t

where gtg_t is the per-channel gated decay (the erase), βtktvt\beta_t\, k_t v_t^{\top} is the written delta, and oto_t reads the state with the query qtq_t. The state StS_t is a fixed d×dd \times d matrix — its size does not depend on how many tokens came before. Scrub the recurrence and watch the state stay constant-size while a softmax cache piles up:

kimi delta attention · gated delta-rule recurrencet = 4 / 8
KDA · recurrent stateconstant sizesoftmax · KV cachegrows with tSt = (1−a)·gS + Δretained · gSΔerase (decay) + write (kv delta)carry Sₜ₋₁ → Sₜ4 cells · O(t)12345678tok
t
KDA state size
constant · 1 cell
softmax KV cache
O(t) · 4 cells

KDA is a gated delta-rule linear attention. Each token makes the fixed-size state S selectively erase prior content (gated decay) and write the new key/value delta, so information flows across arbitrarily long sequences at constantstate size — while softmax attention's KV cache grows one entry per token. That is what buys up to 6.3× faster decode at 1M-token context.

That constant-size state is what makes a genuine 1M context tractable, and it is why Moonshot reports up to 6.3× faster decoding in million-token contexts. It is not free — a linear-attention state is a lossy summary, not a perfect record, so K3 interleaves KDA with full-attention layers (via Gated MLA) to keep exact recall where it matters. KDA also breaks the assumptions of conventional prefix caching, so Moonshot contributed a KDA implementation to the vLLM community to make serving practical.

Attention Residuals: selective retrieval across depth

The second change is about depth, not length. A plain residual stream forces every layer to add the same accumulated state from the layer just below it, so representations from far-earlier depths get smeared together as they climb the stack. Attention Residuals let a layer instead selectively retrieve representations from specific earlier depths — a learned read across depth rather than a uniform accumulation. Toggle the two modes and scrub the current layer:

kimi-k3 · attention residualsdepth = 8 layers
layer 1layer 2layer 3layer 4layer 5layer 6layer 7layer 8uniform residual stream · every state accumulated
mode=uniform

A plain residual stream forces every layer to add the same accumulated state from the layer just below it — information from far-earlier depths is smeared together. Attention Residuals instead let a layer selectively retrieve from a few specific earlier depths (a learned read), improving gradient flow and depth scaling. Switch to AttnRes and scrub the current layer to watch the read targets change.

The payoff Moonshot reports is concrete: about 25% higher training efficiency at under 2% additional cost. That ratio is the tell — a cheap structural change that improves gradient flow and lets the stack go deeper without the usual degradation, which is exactly the kind of lever that compounds into the headline 2.5× scaling number.

Alongside these, the attention sublayer uses Gated MLA — Multi-head Latent Attention with a learnable gate that controls activation and sharpens attention selectivity — and the MLP nonlinearity is a Sigmoid Tanh Unit (SiTU), chosen for stable activation dynamics at 2.8T scale. Small pieces, but at this size "stable" is load-bearing.

Stable LatentMoE: 16 of 896, and why that is hard

Here is the aggressive part. K3's feed-forward is a mixture of experts with 896 experts, of which only 16 fire for any given token — an activation ratio of 1.8%. That sparsity is what lets a 2.8T-parameter model activate only ~50B parameters per token, so the compute per token is that of a ~50B model while the knowledge capacity is that of a 2.8T one. The experts are latent — they operate in a learned latent space rather than through hand-tuned token-to-expert heuristics. Scrub a few tokens and watch the selected 16 change:

stable latentMoE · 16 of 896 expertsillustrative routing
896 latent experts16 active (1.8%)router · quantile top-16token 7
routing
active params ~50B (16 experts) · compute 1.8% of experts
token index (drag — the selected 16 change per token)

The experts live in a learned latent space; a router picks 16 of 896 for each token — 1.8% of the field — so a 2.8T-parameter model activates only about 50B parameters per token. At this sparsity, which 16 you pick, and keeping every expert equally busy, becomes the whole ballgame — which is what quantile balancing is for.

At 1.8% activation, two problems that are mild in a denser MoE become first-order. Routing: which 16 experts you pick per token has to be learned well, or the model wastes most of its capacity. Load balance: if a few experts hog the tokens, the rest never train, and the effective model collapses to something far smaller than 2.8T. Standard MoEs fight this with an auxiliary load-balancing loss and a sensitive balance coefficient — one more hyperparameter that, tuned wrong, either destabilizes training or lets experts collapse.

Quantile balancing: no auxiliary loss, no knob

K3's answer is Quantile Balancing: derive each expert's allocation directly from the quantiles of its router scores. Set a target quantile — keep the top qq fraction of tokens by score — and every expert serves the same fraction of tokens by construction, with no auxiliary loss and no balance coefficient to tune. Drag the quantile and flip to the aux-loss regime to see the imbalance it removes:

quantile balancing · no aux loss, no tuned coefficientillustrative
router scores for one expert · 40 tokens35% quantile → keep 15/40per-expert load · 12 experts (quantile)target
balancing
load imbalance (max/min) 1.0× (balanced)
target quantile q (fraction of tokens each expert keeps)

Allocation comes straight from the quantile of each expert's router scores: keep the top q fraction of tokens, and every expert ends up equally busy — no auxiliary loss, no sensitive balance coefficient to tune. Flip to aux-loss and the same target leaves some experts starved and others overloaded — the imbalance quantile balancing is built to remove.

The systems half of the story matters just as much. K3 uses a fully balanced expert-parallel training method with static shapes and no host synchronization. That is not a throwaway detail: variable expert loads normally produce variable tensor shapes, which force recompilation and host-side synchronization that stalls a large cluster. Quantile balancing gives every expert the same load, so the shapes are static, so the expert-parallel pipeline runs without host sync — the difference between 16-of-896 routing being a nice idea and being trainable at 2.8T.

With all four pieces on the table, here is the paper's module-level picture redrawn: the Stable LatentMoE and KDA blocks in full detail on the left, and on the right the Block Attention Residuals backbone — where each module's output flows through an α gate that can read every earlier block and the embedding, not just the layer below it.

Kimi K3 · hybrid KDA / MLA / LatentMoE block + Block Attention Residuals (AttnRes)
OutputresidualbusKDAlinear attention+αStable LatentMoEsparse FFN+αGated MLAfull attention+αStable LatentMoEsparse FFN+αearlier blocksEmbeddingAttnRes: each α reads a gated mix of every earlier block on the bus

Read bottom‑to‑top. Kimi K3 stacks a hybrid block KDA (linear‑time attention), Gated MLA (full attention for exact recall) and Stable LatentMoE (shared + routed experts) — into the residual stream. The twist is Block Attention Residuals: every residual add pulls a gated read (α) off a bus carrying every earlier block’s output, not just the layer below — a learnable skip across the whole depth.

Turning compute into intelligence

Stack it up — KDA's cheap long-context memory, AttnRes's cheap depth, LatentMoE's extreme-but-stable sparsity, plus refined training and data recipes — and Moonshot's headline is a ~2.5× improvement in overall scaling efficiency over K2. Concretely: K3 reaches the same capability at roughly 1/2.5 the training compute. Drag the capability marker:

scaling efficiency · compute → capability~2.5× vs K2
1×5×20×79×507090relative training compute (log)capability2.5× less computeK2K3
target capability 80
K3 reaches it at 2.5× less training compute than K2
capability level (drag)

Same axes, two models: at any capability you pick, the K3 curve gets there well to the left of K2 — about 2.5× less training compute. That is the whole point of the architecture and recipe changes: not a bigger number on a spec sheet, but more capability per FLOP spent.

That is the number that actually matters. "2.8 trillion parameters" is a spec-sheet figure; "2.5× more capability per FLOP" is an engineering result. It is what lets an open lab, working around compute limits, ship a frontier-adjacent model without a frontier-sized compute bill.

What it would take to train it

So what does building a 2.8T-A50B model actually cost? The sparsity helps here too: training compute for an MoE scales with the active parameters, not the total, so K3's per-token training FLOPs are those of a ~50B model. The standard estimate is

C6NactiveDC \approx 6 \, N_{\text{active}} \, D

with Nactive50BN_{\text{active}} \approx 50\text{B} and DD the number of training tokens. Moonshot has not published K3's exact token budget; for reference, K2 was trained on 15.5T tokens with the Muon optimizer. Plug in a frontier-scale token budget and pick a cluster — the estimate is millions of GPU-hours and weeks of wall-clock:

what it takes to train · 6·(active)·(tokens)order-of-magnitude estimate
15.5Ttraining tokens4,096 accelerators · ~0.4 PFLOP/s eff. eachKimi K32.8T · 50B activeestimated wall-clock (days)33 days15306090compute ≈ 4.7 ×10²⁴ FLOPs3.2M GPU-hoursFP4 weights ≈ 1.4 TB
cluster
assumptions: 6·N·D · active = 50B · ~0.4 PFLOP/s/accel (~40% MFU)
token budget (K2 trained on 15.5T — drag)

The MoE sparsity that makes K3 cheap to serve also makes it cheaper to train: compute scales with the ~50B active params, not the full 2.8T. Even so, a frontier token budget on a few thousand accelerators is weeks of wall-clock and millions of GPU-hours — and the 2.8T weights still fit in ~1.4 TB only because they are trained MXFP4-native. Numbers are a first-principles estimate; Moonshot has not published K3's exact recipe.

Three things make that estimate achievable rather than merely large:

The memory reality is worth stating plainly: 2.8T parameters even at 4-bit is ~1.4 TB just for weights, before optimizer states and activations, so training and serving both demand tensor-, pipeline-, and expert-parallelism across many accelerators. This is a systems achievement as much as a modeling one.

The benchmarks

On coding, K3 is a clear #2-or-#3 behind Fable 5 and GPT-5.6 Sol, and ahead of everything else open or closed that Moonshot tested — with a few outright wins.

Kimi K3 coding benchmarks. Six grouped bar charts — DeepSWE, FrontierSWE, Kimi Code Bench 2.0, Terminal Bench 2.1, Program Bench, SWE Marathon — comparing Kimi K3 against Fable 5, GPT-5.6 Sol, GPT-5.5, Opus-4.8 and GLM-5.2, all at maximum thinking effort. Kimi K3 is highlighted and lands first or second in most panels.
Kimi K3 coding benchmarks vs Fable 5, GPT-5.6 Sol, GPT-5.5, Opus-4.8 and GLM-5.2 — all maxed on thinking effort (Moonshot AI, 2026).

On FrontierSWE it sits second, close behind Fable 5 and well ahead of the rest:

FrontierSWE (%)
Fable 5
86.6
Kimi K3
81.2
GPT-5.6 Sol
71.3
GLM-5.2
67.3
Opus-4.8
66.7
GPT-5.5
64.9
050100

On Terminal Bench 2.1 it is effectively tied for first, and on the long-horizon SWE Marathon and Program Bench it is first outright:

Terminal Bench 2.1 (%)
GPT-5.6 Sol
88.8
Kimi K3
88.3
Opus-4.8
84.6
Fable 5
84.6
GPT-5.5
83.4
GLM-5.2
82.7
050100
SWE Marathon — long-horizon (%)
Kimi K3
42
Opus-4.8
40
GPT-5.6 Sol
39
Fable 5
35
GPT-5.5
14
GLM-5.2
13
0204060

The agentic and visual picture is similar — competitive across the board, and #1 on browsing:

Kimi K3 general and visual agent benchmarks. Bar charts for GDPval-AA v2 Elo, AA-Briefcase Elo, Automation Bench, JobBench, SpreadsheetBench 2, BrowseComp, CharXiv and Zerobench, comparing Kimi K3 against Fable 5, GPT-5.6 Sol, GPT-5.5, Opus-4.8 and GLM-5.2. Kimi K3 leads on BrowseComp, Automation Bench and SpreadsheetBench 2.
Kimi K3 general + visual agent benchmarks — GDPval, AA-Briefcase, Automation Bench, JobBench, SpreadsheetBench 2, BrowseComp, CharXiv, Zerobench (Moonshot AI, 2026).
BrowseComp (%)
Kimi K3
91.2
GPT-5.6 Sol
90.4
Fable 5
88
GPT-5.5
84.4
Opus-4.8
84.3
050100

The pattern is consistent: K3 wins where the task is long-horizon and tool-heavy (SWE Marathon, Program Bench, BrowseComp, Automation Bench, SpreadsheetBench 2), and comes second to Fable 5 or GPT-5.6 Sol on the single-shot, knowledge-dense ones (GDPval and AA-Briefcase Elo, DeepSWE). For an open model, being in that conversation at all is the story.

What it costs to serve

The sparsity that makes K3 cheap to train makes it cheap to run. API pricing is 0.30/MTokoncachehitinput,0.30 / MTok** on cache-hit input, **3.00 / MTok on cache-miss input, and $15.00 / MTok output — and Moonshot reports cache-hit rates above 90% in coding workloads, so the effective input price is closer to the cheap number than the expensive one. MXFP4 weights keep the footprint at ~1.4 TB, and Moonshot recommends supernode configurations of 64 or more accelerators, with a MiniTriton CUDA-core roofline shown on NVIDIA L20. The KDA state and static-shape routing are what make that serving profile hold up at 1M context.

The take

Strip away the size record and what is genuinely new in K3 is a coherent set of efficiency bets: KDA buys a real 1M context with constant-size memory; AttnRes buys depth almost for free; Stable LatentMoE with Quantile Balancing buys 2.8T of capacity at ~50B of active compute and makes that extreme sparsity trainable without an aux-loss knob or host-sync stalls; Per-Head Muon and MXFP4/MXFP8 QAT make the whole thing converge and fit. The sum is the number that matters — ~2.5× more capability per FLOP than K2 — delivered in the open at 2.8T. It does not top the frontier, and it does not pretend to. What it proves is that the gap between open and closed is now measured in scaling efficiency, not in whether an open lab can build at frontier scale at all.


Sources: the Kimi K3 tech blog (architecture, Stable LatentMoE, Quantile Balancing, KDA, AttnRes, benchmarks, pricing) and Moonshot's reported figures. Benchmark numbers are quoted from Moonshot's charts; the training-cost figures are a first-principles estimate from C6NactiveDC \approx 6\,N_{\text{active}}\,D with clearly labeled assumptions, using K2's 15.5T-token budget as a reference. Interactive diagrams illustrate the mechanisms; the routing, loop, and cost visuals are illustrative.

Cite this article

For attribution, please use the following reference or BibTeX:

Satyajit Ghana, "Kimi K3: a 2.8T open model that turns compute into intelligence 2.5× better", ai.thesatyajit.com, July 2026.

bibtex
@misc{ghana2026kimik3,
  author = {Satyajit Ghana},
  title  = {Kimi K3: a 2.8T open model that turns compute into intelligence 2.5× better},
  url    = {https://ai.thesatyajit.com/articles/kimi-k3},
  year   = {2026}
}
share