# XiaomiMiMo/MiMo-V2.5 — vLLM serving recipe

> MiMo-V2.5 is a native omnimodal model with strong agentic capabilities, supporting text, image, video, and audio understanding within a unified architecture

Configuration: hardware `h200` (8× H200) · strategy `single_node_tp` (Tensor Parallel) · variant `default` (FP8) · features `tool_calling`, `reasoning`

- Interactive page: https://recipes.vllm.ai/XiaomiMiMo/MiMo-V2.5
- This configuration as JSON: https://recipes.vllm.ai/XiaomiMiMo/MiMo-V2.5.json?hardware=h200

The commands below were rendered for exactly this configuration and take precedence over any example in the guide.

## Other configurations

Change the query string (the same parameters as the page URL) and fetch this URL again. Unknown or incompatible values fall back to the recipe default, so check the Configuration line.

- `hardware`: `h100`, `h200`, `b200`, `gb200`, `b300`, `gb300`, `mi300x`, `mi325x`, `mi350x`, `mi355x`
- `variant`: `default`
- `strategy`: `single_node_tp`, `single_node_tep`, `multi_node_tp`, `multi_node_tep`, `multi_node_dep`, `pd_cluster` (multi-node strategies also need `nodes=<n>`)
- `features`: comma-separated list of `tool_calling`, `reasoning`, `spec_decoding` (default: `tool_calling`, `reasoning`)

## Install

Requires vLLM >= 0.21.0.

```bash
uv venv
source .venv/bin/activate
uv pip install -U vllm --torch-backend auto
```

Docker image: `vllm/vllm-openai:latest`

## Serve

```bash
vllm serve XiaomiMiMo/MiMo-V2.5 \
  --trust-remote-code \
  --generation-config vllm \
  --gpu-memory-utilization 0.95 \
  --max-model-len auto \
  --tensor-parallel-size 4 \
  --tool-call-parser mimo \
  --enable-auto-tool-choice \
  --reasoning-parser mimo
```

Docker equivalent:

```bash
docker run --gpus all \
  --privileged --ipc=host -p 8000:8000 \
  -v ~/.cache/huggingface:/root/.cache/huggingface \
  vllm/vllm-openai:latest XiaomiMiMo/MiMo-V2.5 \
  --trust-remote-code \
  --generation-config vllm \
  --gpu-memory-utilization 0.95 \
  --max-model-len auto \
  --tensor-parallel-size 4 \
  --tool-call-parser mimo \
  --enable-auto-tool-choice \
  --reasoning-parser mimo
```

## Guide

> Background reference. Commands in it are examples and may target another configuration — use the Serve section above.

### Overview

MiMo-V2.5 is Xiaomi's native omnimodal MoE model with 310B total parameters
and 15B active per token, supporting text, image, video, and audio understanding
within a unified architecture. Built on the MiMo-V2-Flash backbone with dedicated
vision (729M) and audio (261M) encoders, it uses 256 routed experts (top-8) with
hybrid attention (SWA-128 + full-attention at 5:1 ratio) over 48 layers
(1 dense + 47 MoE) and ships with native FP8 (block-wise e4m3) weights.
A 3-layer Multi-Token Prediction (MTP) head is included for speculative decoding.

### Prerequisites

- Hardware: 4x H200 (TP4)

#### Pull the vLLM docker image

Stable vLLM does not yet support MiMo V2.5. Use the pre-built image:

```bash
docker pull vllm/vllm-openai:mimov25-cu129
```

### Launch commands

Single-node TP4 (H200):

```bash
vllm serve XiaomiMiMo/MiMo-V2.5 \
  --tensor-parallel-size 4 \
  --trust-remote-code \
  --gpu-memory-utilization 0.95 \
  --max-model-len auto \
  --generation-config vllm
```

With tool calling + reasoning:

```bash
vllm serve XiaomiMiMo/MiMo-V2.5 \
  --tensor-parallel-size 4 \
  --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
```

Tunable flags:
- `--max-model-len` — full context is 1,048,576; use `auto` to size to KV budget.
- `--max-num-batched-tokens=32768` for prompt-heavy workloads; lower for latency.
- `--gpu-memory-utilization=0.95` to maximize KV cache.

### Client Usage

```bash
curl -X POST http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "XiaomiMiMo/MiMo-V2.5",
    "messages": [{"role": "user", "content": "Hello MiMo!"}],
    "chat_template_kwargs": {"enable_thinking": true}
  }'
```

Set `"enable_thinking": false` (or omit the kwargs) to disable thinking mode.

### Benchmarking

Launch the server with `--no-enable-prefix-caching` to get consistent measurements.

#### VisionArena-Chat
```
vllm bench serve \
  --model XiaomiMiMo/MiMo-V2.5 \
  --backend openai-chat \
  --endpoint /v1/chat/completions \
  --dataset-name hf \
  --dataset-path lmarena-ai/VisionArena-Chat \
  --num-prompts 128
```

#### Random Synthetic
```bash
vllm bench serve \
  --model XiaomiMiMo/MiMo-V2.5 \
  --dataset-name random --random-input-len 8000 --random-output-len 1000 \
  --request-rate 3 --num-prompts 1800 --ignore-eos
```

### References

- [MiMo-V2.5 on Hugging Face](https://huggingface.co/XiaomiMiMo/MiMo-V2.5)
