引言
XiaomiMiMo/MiMo-V2-Flash模型总参数309B,激活参数15B,是专为推理优化的新型模型,旨在最大化解码效率。其两大关键设计为sliding window attention (SWA)和multi-layer MTP。MiMo-V2-Flash针对真实服务场景量身定制,支持在不同硬件上灵活平衡吞吐量与延迟。搭配SGLang优化的Spec v2运行时,几乎零开销支持多层MTP和高效SWA执行,在H200上展现均衡TPOT与吞吐量。本文将介绍模型架构及SGLang的高效支持。
推理高效建模
MiMo-V2-Flash遵循推理效率原则,采用两大核心设计:
- Sliding Window Attention (SWA):每个token的感受野限定在固定大小的常数窗口内,将注意力复杂度从序列维度的O(N²)降至O(Nw),w为窗口大小。
- MTP:多层MTP使用预测头链条,逐层顺序预测下一token,随后并行验证草稿token,使用扩展query。
下图展示MiMo-V2-Flash整体架构:
MiMo-V2-Flash整体架构
SWA
MiMo-V2-Flash每五层SWA注意力层交替一层密集GQA。SWA从多角度提升推理效率:在预填充阶段,计算主导成本,长序列下O(N²)注意力成瓶颈,SWA降至线性复杂度,大幅缩短TTFT。同时,KV缓存复杂度降至常数级,释放资源支持更大批次,减少KV加载操作,提升TPOT。
下图为预填充基准测试结果:
MiMo-V2-Flash预填充基准测试(Radix Cache禁用)
MTP
MiMo-V2-Flash的关键设计是3层多层MTP。在解码场景中,大多内核内存绑定,query长度恒为1,增加并行解码token是最直观提升吞吐量的途径。但批次增大后,KV缓存访问线性增长成瓶颈,此时计算潜力未饱和,单纯增批次难以为继。
MTP利用剩余计算:多token由顺序预测头同时生成,同query并行验证,延长query长度而不增KV访问,提升算术强度。在内存绑定且批次效应边际时,激进MTP策略(高接受率)可充分利用设备潜力,优化TPOT。
硬件感知MTP配置
MTP受益于未饱和算术强度,MiMo-V2-Flash的GQA注意力天然适配。但部署时需选对批次大小与MTP深度,实现最优计算-内存平衡。高屋顶线设备(如训练向GPU)更宜激进MTP,利用丰沛计算;推理加速器(如H20)FLOPs有限,MTP需谨慎,避免转计算绑定降吞吐。
H200基准显示,MiMo-V2-Flash兼顾吞吐与每请求TPS。即使64K长上下文、每DP rank批次16,解码吞吐仍达150 TPS,得益SWA与MTP。

MiMo-V2-Flash解码基准(DP 2, TP 4, EP 8, MTP接受长度3.6, 输入16k token, 变批次)

MiMo-V2-Flash解码基准(DP 2, TP 4, EP 8, MTP接受长度3.6, 每DP rank批次16, 变输入长度)
SGLang Spec v2的快速MTP服务
MiMo的多层MTP原生集成SGLang Spec v2,利用全重叠MTP特性提升吞吐与延迟。Spec v2中,重叠调度与投机解码融合:延迟输出同步/处理,早发下一批内核,隐藏CPU批次/同步开销于GPU前向,减少GPU气泡。

Spec v2重叠投机解码性能剖析
更多讨论
LLM服务中解码阶段多内存绑定,主流训练GPU计算闲置严重。推理专用加速器带宽高FLOPs低虽经济,但速度有限。MiMo-V2-Flash从模型端优化推理效率,多层MTP或成通用方案:优化接受率,利用GPU计算加速解码。更适配架构使硬件选择灵活,同类硬件可训推兼顾,简化部署降成本。
MiMo-V2-Flash支持已通过SGLang PR(#15207, #15208)实现,即将合入主分支。本文基准基于MiMo优化分支,优化将上游至SGLang主线。
快速上手
MiMo-V2-Flash现通过SGLang Docker镜像与pip安装可用。以下为启动SGLang服务器指南。
Docker
# Pull the docker image
docker pull lmsysorg/sglang:dev-pr-15207
# Launch the container
docker run -it --gpus all \
--shm-size=32g \
--ipc=host \
--network=host \
lmsysorg/sglang:dev-pr-15207 bash
# Start the server
SGLANG_ENABLE_SPEC_V2=1 python3 -m sglang.launch_server \
--model-path XiaomiMiMo/MiMo-V2-Flash \
--dp-size 2 \
--enable-dp-attention \
--tp-size 8 \
--trust-remote-code \
--mem-fraction-static 0.75 \
--max-running-requests 128 \
--chunked-prefill-size 16384 \
--reasoning-parser qwen3 \
--tool-call-parser mimo \
--model-loader-extra-config '{"enable_multithread_load": "true","num_threads": 64}' \
--attention-backend fa3 \
--speculative-algorithm EAGLE \
--speculative-num-steps=3 \
--speculative-eagle-topk=1 \
--speculative-num-draft-tokens=4 \
--enable-mtpPip安装
# On a machine with SGLang dependencies installed or inside a SGLang nightly container
# Start an SGLang nightly container
docker run -it --gpus all \
--shm-size=32g \
--ipc=host \
--network=host \
lmsysorg/sglang:nightly-dev-20251215-4449c170 bash
# If you already have SGLang installed, uninstall the current SGLang version
pip uninstall sglang -y
# Install the PyPI Package
pip install sglang==0.5.6.post2.dev8005+pr.15207.g39d5bd57a \
--index-url https://sgl-project.github.io/whl/pr/ \
--extra-index-url https://pypi.org/simple
#Launch the server
SGLANG_ENABLE_SPEC_V2=1 python3 -m sglang.launch_server \
--model-path XiaomiMiMo/MiMo-V2-Flash \
--dp-size 2 \
--enable-dp-attention \
--tp-size 8 \
--trust-remote-code \
--mem-fraction-static 0.75 \
--max-running-requests 128 \
--chunked-prefill-size 16384 \
--reasoning-parser qwen3 \
--tool-call-parser mimo \
--model-loader