Signed-off-by: esmeetu <jasonailu87@gmail.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
284 lines
11 KiB
YAML
284 lines
11 KiB
YAML
meta:
|
|
title: "MiMo-V2.6-Pro-RL"
|
|
slug: "mimo-v2-6-pro-rl"
|
|
provider: "MiMo (Xiaomi)"
|
|
description: "Xiaomi's flagship omnimodal MoE (1.02T total / 42B active) with hybrid attention, FP8-compute/mxfp4-stored weights, 1M context, and a DFlash speculative decoder — the default MOPD checkpoint fixes the RL release's tool-call repetition"
|
|
date_added: 2026-09-22
|
|
date_updated: 2026-10-07
|
|
tasks:
|
|
- text
|
|
- multimodal
|
|
related_recipes:
|
|
- "XiaomiMiMo/MiMo-V2.6-Flash-RL"
|
|
- "XiaomiMiMo/MiMo-V2.5-Pro"
|
|
hardware:
|
|
h200: verified
|
|
gb300: verified
|
|
mi355x: verified
|
|
|
|
model:
|
|
model_id: "XiaomiMiMo/MiMo-V2.6-Pro-RL"
|
|
min_vllm_version: "0.31.0"
|
|
docker_image:
|
|
nvidia: "vllm/vllm-openai:v0.31.0"
|
|
# AMD stays on the ROCm nightly the MI355X verification ran against.
|
|
amd: "vllm/vllm-openai-rocm:nightly"
|
|
architecture: moe
|
|
parameter_count: "1T"
|
|
active_parameters: "42B"
|
|
context_length: 1048576
|
|
base_args:
|
|
- "--trust-remote-code"
|
|
- "--max-model-len"
|
|
- "auto"
|
|
- "--generation-config"
|
|
- "vllm"
|
|
base_env: {}
|
|
|
|
features:
|
|
tool_calling:
|
|
description: "MiMo tool-call parser"
|
|
args:
|
|
- "--tool-call-parser"
|
|
- "mimo"
|
|
- "--enable-auto-tool-choice"
|
|
reasoning:
|
|
description: "MiMo reasoning parser"
|
|
args:
|
|
- "--reasoning-parser"
|
|
- "mimo"
|
|
spec_decoding:
|
|
description: "DFlash 5-layer MTP drafter (predicts 7 tokens); ships in the dflash/ subfolder of every checkpoint. Set DFLASH_DIR to that directory first (see the guide)"
|
|
args:
|
|
- "--speculative-config"
|
|
- '{"method":"dflash","model":"$DFLASH_DIR","num_speculative_tokens":7}'
|
|
|
|
opt_in_features:
|
|
- spec_decoding
|
|
|
|
variants:
|
|
# MOPD supersedes the RL release as the default served checkpoint (same
|
|
# architecture and weight format; the RL checkpoint stays selectable below),
|
|
# mirroring how the DeepSeek-V4-Pro recipe rolled its 0813 release to default.
|
|
default:
|
|
model_id: "XiaomiMiMo/MiMo-V2.6-Pro-MOPD"
|
|
label: "MOPD"
|
|
precision: fp8
|
|
vram_minimum_gb: 680
|
|
description: "FP8 (e4m3) compute with mxfp4-stored MoE weights; 566 GB checkpoint — 8x H200 with TP8, or 4x MI355X with TP4. MOPD2-distilled upgrade that fixes tool-call repetition; recommended."
|
|
tp:
|
|
mi355x: 4
|
|
extra_args:
|
|
- "--tensor-parallel-size"
|
|
- "8"
|
|
- "--gpu-memory-utilization"
|
|
- "0.95"
|
|
rl:
|
|
# The original 2026-09-22 RL checkpoint. No `model_id` override: it serves
|
|
# the recipe's own repo, like DeepSeek-V4-Pro's "FP8 (Preview)" variant.
|
|
label: "RL (original)"
|
|
precision: fp8
|
|
vram_minimum_gb: 680
|
|
description: "Same shape as the MOPD variant (566 GB, FP8-compute/mxfp4-stored) — the original RL release, kept for reproducing earlier results. Suffers from tool-call repetition; prefer MOPD for agentic workloads."
|
|
tp:
|
|
mi355x: 4
|
|
extra_args:
|
|
- "--tensor-parallel-size"
|
|
- "8"
|
|
- "--gpu-memory-utilization"
|
|
- "0.95"
|
|
|
|
compatible_strategies:
|
|
- single_node_tp
|
|
- single_node_tep
|
|
- pd_cluster
|
|
|
|
hardware_overrides:
|
|
amd:
|
|
# AITER is opt-in on ROCm and the image does not set it; without it the MoE
|
|
# falls back off the native CDNA 4 MXFP4 path. INT4 quick-reduce quantizes the
|
|
# allreduce, which is a real cost at this TP. Verified 2026-09-23 on an
|
|
# 8x MI355X node, vllm/vllm-openai-rocm:nightly @ 0961bbae2.
|
|
extra_args:
|
|
- "--gpu-memory-utilization"
|
|
- "0.93"
|
|
- "--kv-cache-dtype"
|
|
- "fp8"
|
|
extra_env:
|
|
VLLM_ROCM_USE_AITER: "1"
|
|
VLLM_ROCM_QUICK_REDUCE_QUANTIZATION: "INT4"
|
|
strategy_overrides: {}
|
|
|
|
guide: |
|
|
## Overview
|
|
|
|
This recipe serves the MiMo-V2.6-Pro family from two checkpoints on the
|
|
Variant row:
|
|
|
|
- **MOPD** (default) — [XiaomiMiMo/MiMo-V2.6-Pro-MOPD](https://huggingface.co/XiaomiMiMo/MiMo-V2.6-Pro-MOPD),
|
|
the MOPD2-distilled upgrade and the recommended starting point for new
|
|
deployments. It fixes the RL release's most visible agentic failure mode —
|
|
tool-call repetition, where the model keeps re-issuing the same or highly
|
|
similar tool calls while making no progress — with benchmark quality
|
|
unchanged, folded into a regular MOPD2 pass via a short specialized-teacher
|
|
run ([diagnosis blog](https://mimo.xiaomi.com/blog/mimo-v2-6-tool-call-repetition)).
|
|
- **RL (original)** — [XiaomiMiMo/MiMo-V2.6-Pro-RL](https://huggingface.co/XiaomiMiMo/MiMo-V2.6-Pro-RL),
|
|
the 2026-09-22 RL release, kept for reproducing earlier results. It can get
|
|
stuck re-issuing the same tool calls in agentic workloads; prefer **MOPD**
|
|
unless you are reproducing a specific earlier run.
|
|
|
|
MOPD2 (Technical Report §5.6) is multi-teacher on-policy distillation:
|
|
domain-specialized mixRL and SFT teachers supervise the student on three
|
|
on-policy streams (standard MOPD, teacher-prefix OPD, and SFT-prefix OPD).
|
|
|
|
The architecture is shared by both checkpoints: a sparse MoE model with
|
|
1.02T total parameters and 42B active per token — 70 layers (1 dense + 69 MoE)
|
|
with 384 routed experts (top-8), hybrid attention (sliding-window 128 and
|
|
global attention at a 6:1 ratio), and a 5-layer DFlash-style MTP drafter that
|
|
predicts 7 tokens per pass. The model is natively omnimodal (text, image,
|
|
video, audio via a 681M-param MiMo ViT and audio encoders) and supports up to
|
|
1M tokens of context.
|
|
|
|
Weights are stored as mxfp4 and computed as FP8 (block-wise e4m3, 128x128),
|
|
so the checkpoint is 566 GB on disk. Loading this mixed storage format
|
|
requires vLLM with the MiMo V2 mxfp4/bf16-router support
|
|
([vllm-project/vllm#57784](https://github.com/vllm-project/vllm/pull/57784)),
|
|
first shipped in the v0.31.0 stable release.
|
|
|
|
## Prerequisites
|
|
|
|
- Hardware: 8x H200 (TP8), 4x MI355X (TP4), or equivalent aggregate VRAM (>= 680 GB)
|
|
|
|
### Pull the vLLM docker image
|
|
|
|
vLLM 0.31.0 is the first stable release that can load the mxfp4-stored
|
|
weights ([vllm-project/vllm#57784](https://github.com/vllm-project/vllm/pull/57784));
|
|
earlier stable releases cannot:
|
|
|
|
```bash
|
|
docker pull vllm/vllm-openai:v0.31.0
|
|
```
|
|
|
|
A vLLM nightly wheel built after 2026-09-20 also works (`uv pip install -U
|
|
vllm --extra-index-url https://wheels.vllm.ai/nightly/cu130`).
|
|
|
|
The Hugging Face model cards point at `vllm/vllm-openai:mimov25-cu129`, the
|
|
V2.5-era image; that tag predates the mxfp4-stored-weight support linked above,
|
|
so use the v0.31.0 image recommended above.
|
|
|
|
This release also registers the `mimo` tool-call and reasoning parsers with
|
|
the Rust frontend
|
|
([vllm-project/vllm#57933](https://github.com/vllm-project/vllm/pull/57933)).
|
|
|
|
## Launch command
|
|
|
|
Single-node TP8 (H200). Selecting the **RL (original)** variant in the builder
|
|
swaps only the checkpoint id (`XiaomiMiMo/MiMo-V2.6-Pro-RL`); everything else
|
|
is identical:
|
|
|
|
```bash
|
|
vllm serve XiaomiMiMo/MiMo-V2.6-Pro-MOPD \
|
|
--tensor-parallel-size 8 \
|
|
--trust-remote-code \
|
|
--gpu-memory-utilization 0.95 \
|
|
--max-model-len auto \
|
|
--reasoning-parser mimo \
|
|
--tool-call-parser mimo \
|
|
--enable-auto-tool-choice \
|
|
--generation-config vllm
|
|
```
|
|
|
|
### AMD (MI355X, TP4)
|
|
|
|
```bash
|
|
VLLM_ROCM_USE_AITER=1 \
|
|
VLLM_ROCM_QUICK_REDUCE_QUANTIZATION=INT4 \
|
|
vllm serve XiaomiMiMo/MiMo-V2.6-Pro-MOPD \
|
|
--tensor-parallel-size 4 \
|
|
--trust-remote-code \
|
|
--gpu-memory-utilization 0.93 \
|
|
--kv-cache-dtype fp8 \
|
|
--max-model-len auto \
|
|
--reasoning-parser mimo \
|
|
--tool-call-parser mimo \
|
|
--enable-auto-tool-choice \
|
|
--generation-config vllm
|
|
```
|
|
|
|
MXFP4 MoE weights run natively on CDNA 4, so no load-time requantization is
|
|
needed. `VLLM_ROCM_USE_AITER=1` is off by default and is required to reach
|
|
the AITER MXFP4 MoE and FP8 block-scaled GEMM kernels. Attention resolves to
|
|
`TRITON_ATTN_DIFFKV`, the only backend covering this model's asymmetric head
|
|
dims (QK 192 / V 128) together with attention sinks and sliding-window
|
|
attention.
|
|
|
|
On MI355X, **Tensor Parallel** defaults to **TP4**: 4x288 GiB clears the 680 GiB
|
|
requirement, so TP4 halves the GPUs per server and doubles the servers per node.
|
|
For TP8, pass `--tensor-parallel-size 8`.
|
|
|
|
The checkpoint pre-shards its fused QKV into `num_key_value_heads` (8) chunks,
|
|
each carrying its own FP8 scales. TP8 consumes them directly; TP4 merges two
|
|
chunks per rank, which vLLM handles by dequantizing, reordering and
|
|
re-quantizing at load time. TP4 costs no accuracy.
|
|
|
|
With DFlash speculative decoding (drafter ships inside the checkpoint).
|
|
vLLM does not resolve a `<repo>/dflash` Hub subfolder as the draft model —
|
|
`model` must be a concrete local path to the `dflash/` directory inside the
|
|
downloaded snapshot. Resolve it per checkpoint (run `hf download
|
|
<checkpoint>` first if it is not cached yet):
|
|
|
|
```bash
|
|
# MOPD variant
|
|
DFLASH_DIR=$(ls -d ~/.cache/huggingface/hub/models--XiaomiMiMo--MiMo-V2.6-Pro-MOPD/snapshots/*/dflash)
|
|
# RL (original) variant
|
|
# DFLASH_DIR=$(ls -d ~/.cache/huggingface/hub/models--XiaomiMiMo--MiMo-V2.6-Pro-RL/snapshots/*/dflash)
|
|
echo "$DFLASH_DIR"
|
|
```
|
|
|
|
```bash
|
|
vllm serve XiaomiMiMo/MiMo-V2.6-Pro-MOPD \
|
|
--tensor-parallel-size 8 \
|
|
--trust-remote-code \
|
|
--gpu-memory-utilization 0.95 \
|
|
--max-model-len auto \
|
|
--speculative-config "{\"method\":\"dflash\",\"model\":\"$DFLASH_DIR\",\"num_speculative_tokens\":7}" \
|
|
--compilation-config '{"cudagraph_mode":"FULL_DECODE_ONLY"}' \
|
|
--reasoning-parser mimo \
|
|
--tool-call-parser mimo \
|
|
--enable-auto-tool-choice \
|
|
--generation-config vllm
|
|
```
|
|
|
|
The drafter inherits the target's tensor-parallel size by default. To pin it
|
|
explicitly, add `"draft_tensor_parallel_size": 8` to the speculative config
|
|
(useful if you want the draft on fewer GPUs than the target, or to silence
|
|
mis-detection on asymmetric topologies).
|
|
|
|
## Client Usage
|
|
|
|
```bash
|
|
curl -X POST http://localhost:8000/v1/chat/completions \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"model": "XiaomiMiMo/MiMo-V2.6-Pro-MOPD",
|
|
"messages": [{"role": "user", "content": "Hello MiMo!"}],
|
|
"temperature": 1.0,
|
|
"top_p": 0.95,
|
|
"chat_template_kwargs": {"enable_thinking": true}
|
|
}'
|
|
```
|
|
|
|
Recommended sampling: `temperature=1.0`, `top_p=0.95`.
|
|
Set `"enable_thinking": false` (or omit the kwargs) to disable thinking mode.
|
|
|
|
## References
|
|
|
|
- [MiMo-V2.6-Pro-MOPD on Hugging Face](https://huggingface.co/XiaomiMiMo/MiMo-V2.6-Pro-MOPD)
|
|
- [MiMo-V2.6-Pro-RL on Hugging Face](https://huggingface.co/XiaomiMiMo/MiMo-V2.6-Pro-RL)
|
|
- [MiMo-V2.6 technical report](https://huggingface.co/XiaomiMiMo/MiMo-V2.6-Pro-RL/blob/main/MiMo_V2_6_technical_report.pdf) (§5.6 covers MOPD2)
|
|
- [Diagnosing and Mitigating Tool-Call Repetition in MiMo-V2.6](https://mimo.xiaomi.com/blog/mimo-v2-6-tool-call-repetition)
|
|
- [MiMo-V2.6 blog post](https://mimo.xiaomi.com/mimo-v2-6)
|
|
- [vLLM PR #57784 — mxfp4 MoE / bf16 router / DFlash for MiMo V2](https://github.com/vllm-project/vllm/pull/57784)
|
|
- [vLLM PR #57933 — MiMo tool-call/reasoning parsers for the Rust frontend](https://github.com/vllm-project/vllm/pull/57933)
|
|
- [SGLang MiMo cookbook](https://docs.sglang.io/cookbook/autoregressive/Xiaomi/MiMo-V2.5)
|
|
- [vLLM ROCm GPU install docs](https://docs.vllm.ai/en/latest/getting_started/installation/gpu/?device=rocm) |