models / compare / minimax-m3-vs-gpt-oss-120b
MiniMax-M3 vs gpt-oss-120b
How MiniMax-M3 (MiniMax, June 2026) and gpt-oss-120b (OpenAI, August 2025) are built, drawn on the same November 2026 blueprint. They make different choices on 13 of 27 components. Select a component in either diagram to find it in the table.
--- frontier-llm@2026-11+++ minimax-m3@2026-06+0~4−4
MiniMax-M3
MiniMax, June 2026, 427.0B total, 23.5B active
--- frontier-llm@2026-11+++ gpt-oss-120b@2025-08+0~4−9
gpt-oss-120b
OpenAI, August 2025, 117B total, 5.1B active
Component by component
MiniMax-M3 and gpt-oss-120b differ on 13 of 27 components.
| Blueprint component | MiniMax-M3 | gpt-oss-120b |
|---|---|---|
Same as the blueprintA 32-layer CLIP-style ViT (width 1,280, 16 heads, GELU MLP of 5,120, LayerNorm; 631M parameters) embeds 14 × 14 patches with a Conv3d that spans 2 frames for video, using 3D (time, height, width) RoPE. A GELU MLP lifts each patch to 6,144 and a second fuses each 2 × 2 group into one token (234M projector parameters). MiniMax says M3 trained on mixed modalities from the first step and lists text, image and video inputs. | ||
Same as the blueprintPer-head Gemma-style RMSNorm (ε = 1e-6) on q and k before RoPE, with one 128-dim gain shared by all 64 query heads and one by the 4 key heads; the indexer's queries and key get their own. This replaces M2's layer-wide norm over the concatenated projections (qk_norm_type per_layer → per_head), so head-sharded tensor parallelism no longer needs a cross-rank reduction for it. | ||
Same as the blueprintPartial RoPE in all 60 layers, unchanged from M2: the first 64 of each head's 128 dims rotate (rotate-half layout) and the other 64 carry no position, with base θ = 5,000,000. The indexer's queries and key are rotated the same way. The config allows 1,048,576 positions with no YaRN or other scaling. | Full RoPE with YaRN scalingRotary embeddings on all 64 head dims, θ = 150,000, stretched 32× with YaRN. | |
Full grouped-query attention in blocks 0–2The first three blocks attend over the whole context: 64 query heads share 4 KV heads of dim 128; no indexer, gate or sink. | Dense grouped-query attentionFull causal attention with 64 query heads sharing 8 KV heads, in every other block. | |
MiniMax Sparse Attention (MSA)Per GQA group, a 2-projection indexer picks the top 16 of 128-token KV blocks; exact softmax over ≤ 2,048 keys, in 57 of 60 layers. | ||
Same as the blueprintEvery other block (18 of 36) attends only to a banded window of the last 128 tokens, alternating with the dense blocks; same GQA head layout. | ||
Same as the blueprintNo output gate. Each head instead has a learned sink logit added to the softmax denominator, so it can assign attention mass to nothing. | ||
Same as the blueprintAn FP32 linear router scores 128 experts with sigmoids. A per-expert bias (e_score_correction_bias, FP32) is added only to choose the top 4, the 4 unbiased scores are renormalized to sum to 1, and the routed output is multiplied by 2.0 (routed_scaling_factor) before the shared expert is added. MiniMax has not described how M3's biases are updated or whether an auxiliary balance loss is used. | Softmax top-k routerA linear router picks the top 4 of 128 experts; softmax over those 4 logits gives the weights. | |
Same as the blueprintOne always-active shared expert per MoE layer: a clamped-SwiGLU MLP of width 3,072, the size of one routed expert, added ungated to the scaled routed output. M2 had no shared expert. | ||
Same as the blueprintNot in the released weights: neither the BF16 nor the MXFP8 checkpoint contains MTP tensors, and the Transformers port discards mtp.* keys on load. The configs disagree on the module count (num_mtp_modules = 7 with num_nextn_predict_layers = 1 in the BF16 config, 1 in the MXFP8 config), and MiniMax has not described M3's MTP. M2 used 3 modules. | ||
BF16 weights plus an official MXFP8 checkpointBF16 release with an FP32 router; MiniMax-M3-MXFP8 stores the text stack's linears as E4M3 with one 8-bit scale per 32 weights. | Same as the blueprintMoE weights were post-trained and are released in MXFP4 (block-scaled 4-bit, about 4.25 bits per parameter), which is what lets the 120b run on one 80 GB GPU. Attention, router, embeddings and head are not quantized. | |
Same as the blueprintNo KV compression: MSA selects what to read, not what to store. Per token the stack caches 60 × 1,024 K/V values plus a 128-dim index key in each of the 57 sparse layers, 134.25 KiB in BF16 (M2: 248 KiB), about 144 GB at 1,048,576 tokens. Each decode step reads at most 2,048 tokens per KV group in sparse layers but scans every index key. SGLang's HiSparse offloads the sparse layers' K/V to pinned host memory. |