2026-09-22 · 17 min · llm · mixture-of-experts · reinforcement-learning · agents · inference-optimization · explainer
This site read MiMo-V2-Flash nine months ago as a piece of systems thinking: a 309B MoE that kept 256K context cheap by making five layers in six sliding-window with a 128-token window, and buying back reach with one global layer per block. MiMo-V2.6 keeps that skeleton and changes everything around it. Two models, both natively omnimodal, both open-weighted under MIT, both produced by the same six-day reinforcement-learning run — plus a desktop app, a subscription tier, and a mode called Pro UltraSpeed claiming "up to 20× faster output."
- architecture
- MiMoV2ForCausalLM
- task
- text-generation
- library
- transformers
- license
- mit
- safetensors
- 132 shards
- largest file
- 34.36 GB
- files
- 155
- downloads
- 985
- likes
- 352
- languages
- en, zh
repo last modified 2026-09-22
Three things in this release are worth an engineer's time, and only one of them is a benchmark. Let me take the parameter counts first, because the card's headline number is unusual enough that it is worth confirming it is real.
1.02T, confirmed, and shipped in four bits
The card above reads 524.12B parameters, and that is the first thing to
explain, because it is wrong by almost exactly a factor of two and for an
interesting reason. Hugging Face counts elements per dtype, and this checkpoint
stores its expert weights as MXFP4 packed two values to a byte inside U8
tensors. The Hub sees 500.1B bytes and reports 500.1B parameters; there are
1,000.2B weights in them. Add the FP8 attention projections and the BF16 spine
and the real figure is 1.02T.
The card says "Sparse MoE, 1.02T total / 42B activated." I summed the safetensors headers of all 130 shards.
The weights are stored as MXFP4 — save_format: "mxfp4" in the index
metadata, 4-bit values packed two per byte into U8 tensors with a separate
block scale, alongside FP8 attention projections and BF16 for norms,
embeddings and the output head. Unpacking that packing:
| Pro | Flash | |
|---|---|---|
| stored parameters | 1,024.22B | 310.76B |
| MoE FFN experts | 1,000.19B | 302.80B |
| everything else in the backbone | 21.06B | 5.98B |
| multi-token-prediction module | 1.93B | 0.99B |
| vision encoder | 739M (679M in the 28 blocks) | 729M |
| audio patch encoder + its projector | 268M (101M + 168M) | 261M |
| active per token | 41.90B | 15.45B |
| on disk | 566.0 GB | 172.9 GB |
1,024.22B and 41.90B against the card's "1.02T / 42B": exact. The technical report's Table 1 agrees, and Flash's 310B is the same size class as the V2-Flash this site covered — a 309B model grown by one point and given ears.
The disk figure is the part worth dwelling on. A trillion BF16 parameters is
about 2 TB. Shipping in MXFP4 puts it at 566 GB, which is the difference
between a model you can pull and one you cannot. Xiaomi did not release a BF16
checkpoint and then a quantization; the release is the four-bit checkpoint,
with the attention projections left at FP8 and every layer's o_proj in the
ignored_layers list, untouched. That is a choice about what open weights mean
in 2026, and I think it is the right one.

Pro is 70 layers at hidden 6144, 60 sliding-window and 10 global, window 128, 128 query heads over 8 KV heads, 384 routed experts with top-8 and no shared expert, and a 1M-token position budget. It is the V2-Flash recipe at roughly 3× the width and 5× the expert count.
"Omnimodal" is four encoders and a speech vocabulary
The word gets used loosely, so here is what is actually in the checkpoint.
Vision is a 28-layer ViT at hidden 1280, 24 sliding-window and 4 global layers,
with sink-augmented SWA and alternating row-major/column-major token
serialization so information crosses window boundaries — 679M parameters in the
blocks. Audio is two pieces: a 6-layer patch encoder in the main weights
that folds four frames into one token (25 Hz → 6.25 Hz) — 101M of transformer
plus a 168M two-layer projector up to the 6144-wide backbone, where the report's
127M figure is the encoder alone — and a separate
308M audio tokenizer with 24 encoder and 24 decoder layers and 20 RVQ
codebooks, shipped as its own 1.87 GB audio_tokenizer/model.safetensors in the
same repository.
The piece people miss is speech_embeddings.0 … .19 in the main weights: twenty
tables of (1280 × 1024), one per RVQ codebook. Those are for emitting speech
tokens, not just consuming them. With the tokenizer's decoder in the same repo,
the release is genuinely round-trip audio, not audio-in-text-out. That is more
than most "omni" cards mean.
The RL run, with its unit costs visible
The claim of the release is not the architecture, it is the training. Xiaomi streamed the production run live and published the ledger.
| Pro · 1.02T / 42B | Flash · 310B / 15B | |
|---|---|---|
| RL steps | 30 | 30 |
| trajectories | ~750k | ~750k |
| prompts × rollouts per step | 1,568 × 16 | 1,568 × 16 |
| tokens per step | 2.7–3.7B | 2.7–3.7B |
| max context in training | 1M | 1M |
| wall clock | under 6 days | under 6 days |
| reported cost | $2.62M | $0.85M |
| cost per RL step (total ÷ 30) | $87.3k | $28.3k |
| DeepSWE v1.1, start → end of RL | 58.4 → 72.57 | 48.8 → 65.68 |
| DeepSWE v1.1, released checkpoint (model card, after MOPD2) | 71.9 | 67.9 |
| training-set pass rate | +12% relative | +25% relative |
Two things about this table are unusual. First, 30 steps. A full reinforcement-learning production run on a trillion-parameter model, from the mid-trained checkpoint to the shipped one, is thirty optimizer steps — each one consuming 1,568 prompts × 16 rollouts and 2.7–3.7B tokens. Batch size is doing all the work; the gradient count is tiny. That is worth internalizing if your mental model of RL is PPO on a game.
Second, the router is frozen. The report is explicit: "we freeze the MoE router" to suppress training drift at scale. So the RL run moves expert weights and attention but not the routing distribution, which means the specialization learned in pre-training is held fixed while the experts are re-tuned inside it. Routing collapse is the classic MoE failure, and freezing the router is the bluntest possible defence against it. It also means the RL phase cannot discover that a task wants a different expert — a tradeoff the report states and does not quantify.
The grading is the interesting research contribution. Binary pass/fail cannot rank two solutions that both pass, so Xiaomi scales the reward compute instead: Groupwise Reward Synthesis builds per-task rubrics offline from contrasting rollouts, and Groupwise Advantage Redistribution ranks passing trajectories online and moves advantage toward the better ones. Judged against the policy's own samples, which is what makes it a self-improvement loop rather than a distillation from a fixed teacher. The reported effect is not just accuracy — it "steers the model towards shorter paths and fewer tokens per task," which is the metric agent operators actually pay for.
What the released RL environments actually contain
This is the part of the release I would keep if I could keep only one thing, because almost nobody ships it. The technical report's Table 5:
| Domain | Task family | Tasks | Verifier |
|---|---|---|---|
| Code | Software engineering | ~3k | Executable tests |
| Cyber | Vulnerability reproduction | ~1k | Rule checks |
| General | Knowledge work | ~1k | Rubric-based judging |
| Visual | Web development | ~2k | Visual grading |
About 7,000 graded task environments, each with its verifier, plus roughly
1,000 music-generation tasks, plus MiMo-V2.6-Distill-Qwen-9B — Qwen3.5-9B
supervised-fine-tuned on 77.4B tokens of MiMo-generated trajectories (27.2B of
them loss-bearing) — as a common starting point, plus an end-to-end RL framework
and a composable mini-harness.
And then the thing that makes it a baseline rather than a press release: a reproducible GRPO run on that 9B model, from that SFT checkpoint, on those environments, with denominators printed. SWE-bench Verified 61.1 → 66.2 (avg@3). Terminal Bench 2.1 37.1 → 52.8 (avg@1). Toolathlon-Verified 35.2 → 38.0. OfficeQA Pro 19.5 → 24.8. Eleven evaluations, all improved, metric named on every row. A separate multi-harness experiment improves all 21 dataset-harness pairs.
The benchmark claim that does not survive
MiMo-V2.6-Pro scores 46.32 on the Artificial Analysis Intelligence Index v4.3, and the announcement's framing — "surpassing Kimi K3 and Qwen3.8 Max to become the strongest open-source model to date" — checks out on AA's board as of today: Qwen3.8 Max (0902) at 45.42, GLM-5.3 (max) at 44.78, Kimi K3 (max) at 43.59.

The index number survives. The sentence next to it does not. "On par with Claude Opus 5 and GPT-5.6 Sol across most agent benchmarks" is checkable against the model card's own evaluation table, which is where both comparison columns come from.
| benchmark | MiMo Pro | Opus 5 | GPT-5.6 Sol | vs best |
|---|---|---|---|---|
Code DeepSWE v1.1 | 71.9 | 74 | 73 | behind |
| ProgramBench | 26.5 | 37 | 25 | behind |
| MiMo Code Bench | 63.2 | 68.6 | 59.3 | behind |
General agent AutomationBench v1.0.6 | 53.1 | 50.3 | 45.8 | ahead |
| Toolathlon-Verified | 76.9 | 80.6 | 74.9 | behind |
| GDPval-AA 2.1 (Elo) | 1673 | 1708 | 1588 | behind |
| Agents' Last Exam | 31.6 | 31.6 | 30.8 | ahead |
| Terminal Bench 4.0 | 34.9 | 49 | 39.9 | behind |
| Terminal Bench 2.1 | 89.9 | 89.1 | 88.8 | ahead |
| OSWorld-Verified | 82 | 83.4 | 83 | par |
| JobBench | 62 | 65.7 | 45.4 | behind |
Cyber ExploitGym | 17.8 | 22.1 | 30.3 | behind |
| ExploitBench | 47.9 | 70 | 78.5 | behind |
Visual MiMo VisualCoding | 72.3 | 70 | 73.4 | par |
Three rows ahead, two level, nine behind, out of fourteen where all three models have a score. The single widest gap is Terminal-Bench 4.0 at 34.9 against Opus 5's 49.0 — 14.1 points, and that row is not disputable because all three figures are Artificial Analysis' own measurements under the same mini-swe-agent harness at pass@1 averaged over three repeats, copied into the card. The cybersecurity block is worse: ExploitBench 47.9 against 70.0 and 78.5.
There is a fair version of the claim and the card almost writes it. Pro is ahead of GPT-5.6 Sol on 8 of those 14 rows, and it is ahead of both on AutomationBench and Terminal-Bench 2.1 — the two most workflow-shaped benchmarks in the set. "Competitive with the frontier on general-agent workflows, behind it on terminal work and security" is what the table says, and it is a perfectly good thing to be.
Which is the other half of the story, and the card does not make it: MiMo-V2.6-Pro bills at $0.435 in and $0.87 out per million tokens. Being nine rows behind at that price is a straightforwardly attractive trade. I am not going to put a multiple on it, because the card prints no comparator price and the frontier price lists move — the ratio is for the reader to take from a current one. That is what the Pareto chart on the announcement is for, and it is a stronger argument than parity.
UltraSpeed is a decoder, and its ceiling is 8×
"MiMo-V2.6-Pro-UltraSpeed, delivering up to 20× faster output speed at the same quality." The announcement never says what it is. The repository does.
There is a dflash/ directory in MiMo-V2.6-Pro-RL, holding a config, 14 KB of
modelling code, a mask embedding, and a 5.54 GB dflash_draft_model.safetensors.
The config declares DFlashDraftModel: 5 layers, hidden 6144, sliding window
1024, "is_causal": false, "block_size": 8, "mask_token_id": 151675, and
target_layer_ids: [0, 15, 31, 47, 69].
Read spec_generate and the mechanism is unambiguous. Each decode step:
- Fill the next 8 positions of the output with the mask token.
- Embed them with the target's embedding table, and run the 5-layer drafter bidirectionally over that block — one pass — conditioned on the target's hidden states concatenated from five of its 70 layers and projected down.
- Push the drafter's output through the target's
lm_headto get 7 drafted tokens. - Run the target once over the whole block, sample, and accept the longest matching prefix.
That is a masked-diffusion block draft used as a speculative drafter — one denoising step, verified exactly. And because the target's attention is causal, position i's logits depend only on the accepted prefix, so every emitted token is a sample from the target's own distribution. "At the same quality" is not marketing here; it is true by construction.
What is also true by construction is the ceiling. Eight positions per block, one target forward per block, so at most 8 tokens per target forward, and the draft pass is not free.
dflash/config.json and dflash.py: block_size 8, one draft pass and one verification pass per step. The acceptance rate and the draft-cost fraction are yours to set — I have no way to measure either without serving the model.At any acceptance rate, with any draft cost, the shipped configuration cannot produce 20× fewer target forward passes. Slide acceptance to 100% and draft cost to zero and you get exactly 8×. So the 20× is either measured against something other than the same serving setup, or UltraSpeed runs a larger block than the released config — and the price list is the hint. UltraSpeed bills at $4.35 in / $8.70 out per million tokens: exactly 10× standard Pro.
That is the honest read of speculative decoding in general and it is worth stating plainly: it does not create throughput, it converts throughput into latency. You burn far more compute per token — a target forward on a block of 8 instead of 1, plus the drafter, plus reserved capacity so the batch never fills — and you get the answer sooner. A 10× price for a claimed 20× speed is the exchange rate, printed. It is a real product for latency-sensitive work; it is not a faster model.
The demos, and what they are
The announcement is mostly a showcase — game development, Blender scenes, frontend design, slide decks, an orchestral piece converted to MIDI. Most of it is unfalsifiable from outside. One category is not, because it runs in published benchmark environments with published task specifications:
What makes this worth embedding rather than dismissing is the middle column: the model is reading a wrist camera and a table camera, reasoning in millimetres about where the gripper pads sit relative to the bowl rim, and emitting a delta pose plus a gripper command — a closed-loop VLM policy, not a plan handed to a separate controller. Whether it works is a question the release does not answer: there is no LIBERO success rate, no OSWorld-style denominator for the embodied tasks, and a 6× replay badge on the clip. The claim it supports is "this interface exists," not "this policy is good."
The take
MiMo-V2.6 is three releases stapled together and they have different amounts of evidence behind them. It also lands three weeks after K2-Horizon-MoVA, which made the opposite architectural bet — full attention on every layer, sparsity moved into the value projection — and the pair is a good reminder that "where should attention be cheap?" is still genuinely open.
The model is real and the parameter claim is exact — a trillion stored parameters at 42B active, shipped in four bits so it fits on disks that exist, with an index score that makes it the strongest open-weight entry on the board people actually cite. The parity claim is the weakest sentence in the announcement and the card's own table refutes it; the cost argument underneath it is much stronger and goes unmade. UltraSpeed is a well-built block-diffusion drafter that is lossless by construction and cannot reach the number on the tin with the block size it ships.
And the RL release is the one that will still matter in a year. Seven
thousand environments with verifiers, a distilled 9B to start from, a framework,
and a baseline with avg@3 printed next to the numbers — that is the missing
piece in almost every "we scaled RL" paper, and handing it over is a bigger
contribution than four points of index. The only thing wrong with it is that I
cannot find it yet.
What would change my mind
5 claims above, and what would falsify each
MiMo-V2.6-Pro stores 1,024.2B parameters and activates 41.9B per token.
Summed from the safetensors headers of all 130 shards, unpacking MXFP4
U8tensors at two values per byte and excludingweight_scaletensors. If the packing is not two-per-byte — a different block layout, or scales counted as parameters — the total moves. Load the model and printsum(p.numel() for p in model.parameters()); the card, the report and my count all say 1.02T, so three sources would have to be wrong together.Pro is ahead of Opus 5 and GPT-5.6 Sol on 3 of 14 comparable rows, not 'most'.
Transcribed from the model card's table with a 2% par band that is mine. Widen the band to 5% and the tally becomes more generous; restrict to the "General Agent" section and Pro looks much better. If Xiaomi publishes the benchmark set it meant by "most agent benchmarks" and Pro leads on it, the claim was about a different set and this section is answering a sentence rather than a table.
UltraSpeed cannot exceed 8× fewer target forward passes in its released configuration.
dflash/config.jsonsaysblock_size: 8and the card says 7 drafted tokens per forward. If the served UltraSpeed endpoint uses a larger block, chains several draft blocks per verification, or combines the drafter with a second mechanism, the ceiling is higher and the 20× is reachable. A published tokens-per-second measurement with the block size stated settles it.The ~7k released RL environments are a reproduction kit, not the production training set.
The report gives a task count for the released set and none for the production one, and describes five synthesis pathways plus "thousands of environments" for the latter. If Xiaomi publishes the full production environment set and it is the same 7k, the distinction I am drawing is wrong and the release is considerably more generous than I said.
The RL framework and environments are not yet publicly available.
Checked on 2026-09-22: no matching repository under github.com/XiaomiMiMo, no matching dataset under the XiaomiMiMo Hugging Face org, and the report's only footnote URL is the 9B checkpoint. If they land at a URL I did not look at, this is simply out of date — which is the most likely outcome and the best one.
Parameter counts are Measured: summed from the safetensors headers of all 130
Pro shards and 65 Flash shards, fetched by HTTP range request, with MXFP4 U8
tensors unpacked at two values per byte. The DFlash mechanism is Measured from
the shipped dflash/config.json and dflash.py; the speedup ceiling is
arithmetic on those. Everything else is Reported — from the
MiMo-V2.6 announcement, the
MiMo-V2.6 technical report,
the Pro and
Flash model cards, the
MiMo-V2.6-Distill-Qwen-9B
card, and Artificial Analysis,
all read on 2026-09-22. No model was served and no benchmark was re-run. The
architecture figure and the index chart are Xiaomi's and Artificial Analysis';
the demo clip is Xiaomi's render, re-encoded and trimmed. The three tables and
the speedup curve are mine. Previously on this architecture family:
MiMo-V2-Flash.