Skip to content

MiMo-V2.6: 9B works today; Flash (mimo2, 310B MoE) feasibility, gap list and plan #935

Open

Description

@jamesburton

Tracking issue for MiMo-V2.6 (Xiaomi, MIT). Full write-up: local .docs/MIMO_V26_FEASIBILITY_2026-10-12.md (git-ignored). Evidence tags: [M] measured here, [F] read from HF config / GGUF header / llama.cpp source, [E] estimate. Nothing for Flash is implemented or downloaded.

1. 9B (MiMo-V2.6-Distill-Qwen-9B): works today, no code needed [M]

GGUF arch qwen35 -> Qwen3HybridDense (Qwen3.5-9B base). bartowski Q4_K_M, CPU + Vulkan, serve chat API, MiMo's own chat template (renders; generation tags already tolerated), no BOS, eos <|im_end|>.

  • 14-prompt suite (arithmetic, JSON, code, reasoning, single/parallel tool calls, tool-result round trip, multi-turn, thinking on/off, 1872-token needle, streaming): CPU == Vulkan on everything except one near-tie first-token flip; prompt token counts identical to llama.cpp on all 14. llama-server's chat endpoint returns only the first of two parallel tool calls (its raw completion emits both); dotLLM returns both.
  • PPL (1020 scored tokens, shared ids): dotLLM CPU 5.5463 / Vulkan 5.5553 / llama.cpp CPU 5.5888 / Vulkan 5.5718. dotLLM CPU-vs-Vulkan mean KL 0.0099 (median 0.0031), top-1 96.6 %. OmniCoder-9B control shows the same noise vs llama.cpp (PPL -0.25 % vs MiMo -0.76 %, top-1 97.5 % vs 95.8 %).
  • Same-session Vulkan vs llama.cpp b8683 (Edge was open; llama.cpp ranges): pp512 986-1011 vs 661-725, pp2048 898-936 vs 713-722, tg 28.7-31.4 vs 29.2-30.6 (parity).
  • Gap filed: Chat template override missing (--chat-template-file): cannot use ggml-org's patched MiMo template / prefilled <think> #934 (no chat-template override).

2. Flash (mimo2, 309B / 15B active) feasibility

Plain attention + MoE, not a hybrid: 48 layers = 9 global + 39 SWA (window 128, per-head attention sinks on SWA layers only); K head_dim 192 but V head_dim 128; KV heads 4 (global) / 8 (SWA); fused attn_qkv; rotary on the first 64 of 192 dims (theta 1e7 global / 1e4 SWA); V scaled by 0.707; layer 0 dense FFN 16384, layers 1-47: 256 experts top-8, expert ff 2048, sigmoid + selection bias, renormalised, no shared expert; vocab 152576, no BOS; 3 MTP layers in a separate GGUF (SWA + dense FFN + eh_proj; ~1.1 GB reusing trunk emb/lm_head); vision/audio in mmproj (ignore); DFlash drafter is a different artifact (ignore).

What fits the ~77 GiB trunk budget: patrickbdevaney REAP50 Q2_K 61.6 GiB (128/256 experts, gate/up Q2_K, down MXFP4, attn Q8_0; ~10 GiB spare with MTP + KV; quality UNVERIFIED - the card has only calibration saliency retention, no PPL/benchmarks, MTP trained on unpruned experts) and AesSedai BPW2.0 72.07 GiB (full experts IQ1_M/IQ2_XXS, author's PPL 6.545 vs 5.147 = +27 %, KLD 0.37; MTP + scratch marginal). Everything else is 76-163 GiB. KV is cheap: 22.5 KiB/token F16 for the 9 global layers + a ~250 MB SWA ring (a sliding-window ring is required: without it SWA costs 400 KiB/token F32). Bandwidth ceiling REAP50 Q2_K ~19-23 tok/s [E]; attention at Q8_0 is >50 % of bytes/token (requant at load is the first lever).

Reuses: gpt-oss (sink + SWA attention, MXFP4 banks/kernels), GLM-4.7-Flash (sigmoid+bias MoE, leading dense layer, nextn), Gemma-4 (per-layer KV heads / theta / window), qwen4exp + Qwen3-hybrid MoE (packed Q2_K/IQ expert kernels, fused MoE chain, MTP attach/gate/cost model, residency guard).

3. Plan / gap list (checklist)

Effort [E]: ~2-3 agent-weeks to validated CPU + Vulkan decode, ~4-5 with MTP and tuning. Highest risk G2 (new attention geometry across three shader families).

4. Download plan (needs user OK first; nothing > 5 GB fetched for Flash so far)

  1. P0 first: no big download.
  2. Then patrickbdevaney/MiMo-V2.6-Flash-REAP50-GGUF ...-Q2_K.gguf (66.2 GB) + ggml-org/MiMo-V2.6-Flash-RL-GGUF mtp-...-Q8_0.gguf (2.4 GB) via hf download into the hub cache. C: has ~102 GB free (95 % used) -> ~33 GB left; droppable blobs per the handoff if more is needed.
  3. If REAP50 quality disappoints on our PPL/task check, swap for AesSedai BPW2.0 (77.4 GB; cannot coexist with 2 on C:). Skip files >= 98 GiB.
  4. GPU runs only under scripts/gpu-lock.sh; at 62-67 GiB resident no other large GPU job fits alongside.

Related: .docs/MODEL_COVERAGE_PLAN.md row 12 had rated this P2/skip ("Vulkan MXFP4 missing") - that premise is addressed by the #912 branch.

Activity

  1. jamesburton commented on Oct 13, 2026

    @jamesburton
    OwnerAuthor

    Phase 1 landed: PR #940 (closes #936). mimo2 registered, CPU reference with V!=QK head dim (exact V zero-pad), sinks/SWA/GQA/partial-rope/V-scale/sigmoid-bias MoE; tiny random model HF torch == llama.cpp CPU == dotLLM CPU (max logit diff 1.9e-5, KL 9e-12), decode path and quant mix (Q2_K/MXFP4/Q8_0) covered, GPU backends refuse explicitly. Note: llama.cpp b8683 cannot load the fused-attn_qkv mimo2 GGUFs; use a source build >= ba4dd0bc. Phase 2 (real REAP50 Q2_K on CPU) tracked in #943.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    architectureModel architecture support

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions