# MiMo-V2.6-Flash-MOPD on vLLM+r39 — the 2026-09-28 experiment (PARKED) Lane: `recipes/mimo26-flash-mopd-4x-vllm` + image `docker-images/mimo26-spark-vllm` (thin FROM wrapper on `jovian-judgement:r39-glm53`, two anchor patches). **Verdict: dead end for now.** Every layer of the vLLM DFlash path had to be forced onto a fork that was qualified for GLM-5.3, not MiMo, and each boot revealed one more incompatibility. None were ours to fix cleanly: 1. **EAGLE3 hook vs Omni wrapper** — MiMo-V2.6 resolves to `MiMoV2OmniForCausalLM` (mm wrapper); `set_eagle3_aux_hidden_state_layers` isinstance-checks the OUTER class and raises. Fixable (and fixed) with a language-model fallback patch; the protocol's own method unwraps the same way. Patched, works: `"Eagle3 interface resolved on MiMoV2FlashForCausalLM inside MiMoV2OmniForCausalLM"`, aux layers (1,12,24,36,48) taken from the draft config. 2. **B12X rejects non-causal attention** — DFlash's block-diffusion draft runs non-causal; b12x in r39 declares it unsupported. Workaround: draft on `TRITON_ATTN` (target keeps B12X). Works, draft loads (2.7 GB, mask embedding loaded). 3. **`ModelOptMxFp8LinearMethod` ImportError** — qwen3_dflash.py hard-imports a class r39's modelopt doesn't ship (fork predates it). Patched to a None-tolerant getattr (bf16 draft unaffected). 4. **KV-layout wall (fatal):** during cudagraph-memory profiling, `validate_kv_cache_layout` refuses: *"KV cache layout LBNHC cannot express this model's mixed page sizes ([131072, 163840]); set VLLM_KV_CACHE_LAYOUT=BLHNC"*. The hint is env-only, but BLHNC is a backend-declared-layout question — b12x in r39 declares LBNHC only. This is the architecture mismatch the whole experiment kept routing around: **the MiMo hybrid stack (SWA-128 + 9 GA layers, different page sizes per group) needs a vLLM/b12x generation qualified for it; r39 is not.** ## External intel (2026-09-28) * `local-inference-lab/lil-catalog` MiMo DFlash entry: "implemented; runtime qualification unverified" — they never ran it either. * madeby561/vllm `mimo-v26-flash-b12x-20260923-rc4`: MiMo RL + b12x + FP8 KV + DFlash-7, with adaptive verification — but **linux/amd64 only** (RTX 6000 Pro). Not runnable here; its compose is a good flag corpus (`enable_adaptive_verification`, `kv_cache_dtype: fp8` for target+draft, `--max-num-scheduled-tokens 2048`, `prefill-compute-share`, `BLHNC`-class layouts would all apply if a Spark-native equivalent appears). * `eugr/spark-vllm-b12x` publishes arm64 nightlies daily (latest 2026-09-28) — first candidate when someone asks whether MiMo landed there. ## How to reopen 1. Rebase the wrapper onto a MiMo-qualified vLLM (eugr nightly that carries MiMo + b12x, or a new lab rev with upstream's MiMo/b12x reconciliation — the upstream PR #46104 lineage) and retry the same recipe. The two patches (eagle3-inner + mxfp8-optional) stay valid until that vLLM ships the equivalents; then delete them. 2. If the new stack boots, run the same long-context slope sweep used for sglang (`~/.cache/sm121/bench/slope-28x`: 77.6 → 23.5 t/s d0→256K) and the serial quality bench (anchor: sglang 168/184, 91/100). 3. sglang 4x (`mimo26-flash-mopd-4x`) is the production lane in the meantime; the FROZEN_KV_MTP experiment is the next sglang-side lever for the long-context cliff.