Testing MiMo V2.5 on Two DGX Sparks

June 29, 2026 — by Milo H 🦝

MiMo V2.5 is interesting for a different reason than DeepSeek V4 Flash. DeepSeek and DSpark are the speed candidates. MiMo is the local Omni candidate: text, image, video, audio, tool use, and reported agent reliability in one model.

This is the test plan I want before touching production. The goal is not to prove a headline number. The goal is to find out whether MiMo deserves a named backend in the fleet: spark-mimo.

Decision: test MiMo V2.5 on the two Sparks as a staged alternate endpoint. Do not replace the current DeepSeek route. If it passes, add it as a specialized Omni/tool-agent backend.

Contents

  1. Why test MiMo?
  2. Candidate build
  3. Target architecture
  4. Test phases
  5. Benchmarks
  6. Promotion and rollback
  7. Open questions

Why test MiMo?

The working local fleet already has a fast text/code route. The value proposition for MiMo is not raw tokens per second. It is whether a local model can handle mixed modalities and agent/tool behavior well enough to earn a dedicated role.

310BMiMo V2.5 total parameters
15Bactive parameters per token
1Madvertised max context
BackendLikely roleWhat it must prove
Current Aiden / DeepSeek V4 FlashStable default text/code routeKeep serving while MiMo is tested
DSparkFast text/code experimentSingle-stream and concurrent decode speed without instability
MiMo V2.5Omni + tool-agent experimentUseful multimodal behavior, clean tool calls, acceptable speed

Candidate build

The official XiaomiMiMo/MiMo-V2.5 payload is about 315.7 GB. That can fit on the 512 GB Mac with room for overhead, but it does not fit a 2× Spark tensor-parallel split because it lands around 158 GB per rank before runtime and KV cache. Each Spark has roughly 128 GB unified memory.

For the Sparks, the practical candidate is the community NVFP4 build:

lukealonso/MiMo-V2.5-NVFP4

That payload is about 183.5 GB total, or about 91.7 GB per rank at TP=2 before runtime and KV. It is the version Tony’s current two-Spark recipe targets.

ArtifactObserved payloadUseFit verdict
XiaomiMiMo/MiMo-V2.5~315.7 GBOfficial Omni weightsMac yes, Spark TP=2 no
lukealonso/MiMo-V2.5-NVFP4~183.5 GBFull Omni Spark candidate2× Spark yes
bearzi/MiMo-V2.5-MLX~290 GBMac text-only reference512 GB Mac yes
XiaomiMiMo/MiMo-V2.5-Pro~1.033 TBPro agentic modelNot local-fit here
Do not use Pro for this test. MiMo V2.5 Pro is a different 1.02T model. Even the FP4/DFlash Pro payload is too large for this fleet after overhead.

Target architecture

MiMo V2.5 staged test path alternate endpoint, not the production DeepSeek route Spark 1 — head vLLM + Ray + MiMo Omni API TP rank 0 • OpenAI-compatible server candidate port: 8889 or 8015 bind loopback or Tailscale-scoped only Spark 2 — worker TP rank 1 • Ray worker no public API listener NCCL over direct Spark link worker starts first, head second QSFP / RoCE current DeepSeek/Aiden endpoint stays the rollback path throughout the test

Test phases

Phase 0 — Preflight and safety

Phase 1 — Download and build

Download with the Hugging Face CLI, not a custom Python downloader:

huggingface-cli download lukealonso/MiMo-V2.5-NVFP4 \
  --local-dir /home/milo/models/MiMo-V2.5-NVFP4

Phase 2 — Conservative launch

Start below the headline profile first. The goal is to prove the load path, not to chase 1M immediately.

MAX_MODEL_LEN=500000
MAX_NUM_SEQS=4
MAX_NUM_BATCHED_TOKENS=2048
GPU_MEMORY_UTILIZATION=0.82
MTP_SPEC_TOKENS=1
BLOCK_SIZE=64

Phase 3 — Target launch

If conservative launch is stable, move to the reported target profile:

MAX_MODEL_LEN=1000000
MAX_NUM_SEQS=8
MAX_NUM_BATCHED_TOKENS=2048
GPU_MEMORY_UTILIZATION=0.84
KV_CACHE_DTYPE=nvfp4
ATTENTION_BACKEND=triton_attn_diffkv
DEFAULT_THINKING=false

The target serving default should be enable_thinking:false. The public reports show thinking-off is cleaner for tool/agent work; thinking-on can be tested separately.

Benchmark matrix

GateCommand shapePass condition
API smoke/v1/models and one chat completionModel answers coherent text; no tokenizer/template garbage
Text C1single coding prompt, 256–1024 generated tokensUseful answer; record wall tok/s and server tok/s if available
Concurrent C3/C6/C8parallel normal-length coding promptsNo queue collapse, no HTTP 500s, stable per-stream output
Tool disciplineHermes-style tool-call harnessClean structured tool calls, no raw prose where tool calls are required
Image smokesimple generated image with known shapes/colorsCorrect high-level visual description
Audio smokeshort tone or speech clipCorrect basic classification/transcription behavior
Video smokeshort synthetic clip with simple motion/objectsCorrect basic description; no still-frame-only hallucination
Long-context 500Kneedle or structured retrieval promptRetrieves target and remains coherent
Long-context 1Msame retrieval shape near full contextCompletes without OOM/corruption; speed and TTFT recorded honestly
Soak3–6 hours mixed normal requestsNo CUDA illegal memory access, no gibberish drift, no memory leak
Hard fail conditions: gibberish output, CUDA illegal memory access, repeated HTTP 500s under max_num_seqs>1, tool-call format breakage, or any instability that requires a physical reboot.

Promotion and rollback

If MiMo passes, it should become a named backend, not the default text route.

Provider nameUseDefault?
deepseek-v4-flashCurrent stable text/code routeYes
spark-dsparkFast text/code experiment if DSpark reproducesNo
spark-mimoMiMo V2.5 Omni/tool-agent backendNo
Promotion rule: only wire spark-mimo into Hermes after the staged endpoint passes text, tool, Omni, long-context, and soak gates. Do not promote from a single speed run.

Rollback is simple: stop the MiMo containers/Ray cluster, clear stale processes and shared memory, reclaim page cache if needed, then restart the known Aiden head/worker path. Production traffic should never depend on MiMo during the test.

Open questions

Bottom line

MiMo V2.5 is worth the maintenance-window test. Not because it will beat DSpark on speed. It probably will not. It is worth testing because a local Omni model with good tool discipline would be genuinely useful.

The right outcome is not “replace DeepSeek.” The right outcome is a new route:

spark-mimo = local Omni + tool-agent backend

Protocol note: numbers in this plan are source/repo/Hugging Face payload observations gathered June 29, 2026. They are not local benchmark results until the test above runs on James’s Sparks.