SGLang即刻支持MiMo-V2-Flash模型

引言

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整体架构示意图

MiMo-V2-Flash整体架构

SWA

MiMo-V2-Flash每五层SWA注意力层交替一层密集GQA。SWA从多角度提升推理效率:在预填充阶段,计算主导成本,长序列下O(N²)注意力成瓶颈,SWA降至线性复杂度,大幅缩短TTFT。同时,KV缓存复杂度降至常数级,释放资源支持更大批次,减少KV加载操作,提升TPOT。

下图为预填充基准测试结果:

MiMo-V2-Flash预填充基准测试(Radix Cache禁用)

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, 变批次)

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批次16, 变输入长度)

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重叠投机解码性能剖析

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-mtp
Pip安装
# 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
本文来自 LMSYS 博客,嬴政天下(winzheng.com)进行了全文翻译。 点击这里查看原文 如果转载中文,请注明出处,谢谢支持!