MiMo Long-Context可视化阅读
Architecture · 2026 Q2

小米 MiMo 怎么把上下文撑到 1M?

从 V2-Flash 的 256K 到 V2.5-Pro 的 1M token——MiMo 系列没有发明全新的注意力机制,而是把混合稀疏注意力 + 可学习 attention sink + MTP 投机解码这三件套打磨到了能稳定支撑近千轮工具调用的工程化水平。结合罗福莉的采访,这里面还有一笔更深层的账:为什么不用 MLA,以及这个选择如何让 MTP 成为可能。

2026 年 4–5 月发布 arXiv 2601.02780 · MiMo-V2-Flash 开源 MIT · HuggingFace 罗福莉采访 · 量子位
TL;DR · 一句话理解

MiMo 的长上下文不是靠堆注意力,而是把绝大多数层换成只看最近 128 个 token 的小窗口注意力,每 5–6 层才插入一层全局注意力,再用一个可学习的 attention sink给小窗口加上"什么都不看"的安全阀,让 6×–7× 的 KV cache 压缩不掉性能。

推理侧再用一个 0.33B 的轻量级 MTP 模块当草稿,三层叠起来给主模型做投机解码——速度提升 2.6 倍,最长上下文做到 1M。这也解释了为什么他们不用 MLA:MLA 吃光了 compute budget,MTP 就没空间了。

1Mtoken
V2.5-Pro 最大上下文,原生 32K 训练后扩展
KV cache 与全 GA 相比压缩,长 context 推理才扛得住
128tok
SWA 滑动窗口:很激进,但实验证明比 W=512 还好
2.6×
三层 MTP 投机解码带来的端到端解码加速
01 · 长上下文的两难

同时要快、又要强,从来不是免费的

大模型正在从"Chat 模式"转向"Agent 模式"——一次任务要调几百轮工具、读完整个代码仓库、跟住几小时的 trace。这意味着长上下文不再是 nice-to-have,而是Agent 的基础设施。但当上下文从 8K 涨到 1M,全局自注意力的代价是平方级膨胀——KV cache 装不下,attention 算不动,更糟的是模型在长 context 下的真实理解能力会塌方。

近一年涌现的"长上下文方案"基本分两条路。一条是稀疏 / 选择型:DeepSeek-V3.2 用 sparse attention 只挑重要 token 来算;另一条是混合型:Gemma、MiniMax、Qwen3-Next 等让大部分层只做局部 sliding window,少数层做完整 global。

混合路线更工程化、kernel 更熟、KV cache 控制更直接,但有个长期被诟病的弱点——窗口太小、SWA 比例太高时,长 context 任务掉点严重,"看起来便宜,跑起来不行"

MiMo-V2-Flash 论文给出的判断是:这个弱点不是混合架构本身的问题,而是缺了一个关键组件——可学习的 attention sink bias。补上之后,他们敢把窗口缩到 128、把 SWA:GA 比例拉到 5:1(V2.5-Pro 是 6:1),KV cache 直接压到全 GA 的 1/7,长 context 准确率却几乎不掉。

PROBLEM A · 慢
长上下文的算力诅咒
全局自注意力的 FLOPs 与 KV cache I/O 都是 O(n²)。当 n 从 32K 涨到 1M,单个 sample 的 attention 推理时间能涨 1000 倍,KV cache 直接吃光显存。不解决"快",1M 上下文只能是一个 PR 数字。
PROBLEM B · 弱
长上下文的能力塌方
稀疏 / 滑窗注意力直觉上"省",但 GSM-Infinite 这类长链路推理基准上,DeepSeek-V3.2-Sparse 在 16K 还能拿 50.4 分,到 128K 掉到 25.7;Kimi-K2 从 34.6 掉到 8.8。不解决"强",长上下文只能用来塞文档,不能用来跑 agent。
02 · 为什么不用 MLA

MLA 在 H 系列芯片上做到了极致——但也锁死了自己

DeepSeek-V3 的 Multi-head Latent Attention 把 KV cache 压缩到极致,是近一年最受关注的注意力变种。但 MiMo 团队明确选择了不走这条路。主导这个决定的,是一笔关于 compute bound 与 memory bound 的账。

MLA 的设计是用计算换内存,在 H 系列芯片上做到了几乎极致的优化……但一旦你用了 MLA,模型就变成了 compute bound,你就没有多余的算力来做 MTP 了。

— 罗福莉 · 小米 MiMo 架构负责人

传统的 Multi-Head Attention (MHA) 在推理时是纯 memory bound——瓶颈在于从显存搬运 KV cache 到计算单元。MLA 通过低秩投影把 KV cache 压缩了 10×,但代价是每次 attention 需要把压缩的 latent 重新投影回完整维度,增加了计算量。这笔交易在 H100/H800 上是值的——显存带宽贵、算力便宜,"用计算换内存"刚好把芯片两端都打满。

但这也意味着:MLA 已经把 GPU 的 compute 预算吃光了。MTP 投机解码需要在同一次 forward 中额外跑 draft token 的验证,这需要 compute headroom。MLA 模型没有这个余量——它已经 compute bound 了。

两条路的核心差异

同一个目标(压缩 KV cache),不同的成本与收益结构

路线 A
MLA
低秩投影把每层 KV cache 压到很小,推理时再解压回来。KV cache 省了,但 attention 算量增加。在 H100 上刚好打满 compute 和 memory 两端,但没留给 MTP 的算力空间
KV cache ↓10×
attention FLOPs ↑
compute bound
MTP 不可行
MLA 详解 · 可视化阅读
vs
路线 B · MiMo 的选择
Hybrid SWA + MTP
大部分层用 SWA (W=128) 把 attention 算量和 KV cache 同时砍掉。模型变成 memory bound,但省下来的 compute budget 刚好拿去跑 MTP 投机解码——一次 verify 3 个 draft token,把闲置的算力转化为吞吐。
KV cache ↓6–7×
attention FLOPs ↓↓
memory bound
MTP 2.6× 加速
MTP 详解 ↓ 见下文

罗福莉更进一步地判断:MLA 是为 H 系列芯片特定时代设计的"完美结构",但芯片在演化、推理场景在变、Agent 时代对后训练灵活性的要求在增加。一个对特定硬件过度优化的结构,在硬件换代时反而会成为负担。

Hybrid Attention 的好处是足够简单。简单意味着灵活,灵活意味着在 Agent 时代快速迭代后训练时不会被架构绑死。大家太相信 MLA 了。

— 罗福莉 · 小米 MiMo 架构负责人
一个微妙的对称:MLA 把 memory 的钱花到 compute 上(用计算换内存),MiMo 反过来——SWA 省下 compute,再通过 MTP 把这些 compute 花到"预测多个 token"上(用算力换吞吐)。两条路都在做"重新分配 GPU 预算",但分配的方向相反。
03 · 核心架构

5+1 的节奏:5 层小窗口看局部,1 层全局兜底

MiMo 把 Transformer 的 48–70 层组织成有节奏的"块":每 5–6 层只看最近 128 个 token 的 SWA,紧跟着 1 层全局 GA。第 0 层是个特例,用 GA + dense FFN 稳定早期表征学习。这个设计从一开始就是为 Agent 场景量身定制的——长 context 不是功能,而是地基

我们在做 MiMo 架构的时候,感知到的是一个趋势——从 Chat 到 Agent。Agent 需要长上下文不是因为用户想读长文章,而是因为 agent 要连续调工具几百轮。如果架构不是天生为长 context 做效率优化的,光靠推理端压缩根本撑不住。

— 罗福莉 · 小米 MiMo 架构负责人
怎么看下面这张图:每根条代表一层,自下而上是层 0→47(V2-Flash)或 0→69(V2.5-Pro)。短金条是 SWA(只看最近 128 token),满蓝条是 GA(全局),紫条是第 0 层的 dense GA。点上方按钮可以切换 V2-Flash 与 V2.5-Pro 的层栈。
Hybrid attention layer stack

两个模型采用同一种节奏,只是块数和 ratio 不同。V2-Flash 用 5:1,V2.5-Pro 用 6:1,sliding window 都是 128。

LAYER 0 → TOP 48 层 · 39 SWA + 9 GA · 5:1 节奏

条形含义

Sliding Window Attention
只看最近 W=128 个 token;每层 KV cache 都是常数
Global Attention
看完整序列;负责跨距离信息整合
Layer 0 · GA + dense FFN
唯一一层 dense FFN,稳定早期表征

分布节奏

每个 hybrid block:5×SWA → 1×GA

8 个 block × 6 层 = 48 层。第 0 层把第一个 SWA 替换成 dense GA。

04 · 让混合稀疏注意力跑起来的三件套

SWA 怎么省、GA 怎么补、sink 怎么救场

这三件单独看都不新——SWA 来自 Longformer,GA 是普通自注意力,attention sink bias 来自 gpt-oss——但组合起来才让"激进的稀疏 + 长上下文"同时成立

SLIDING WINDOW ATTENTION
只看最近 128 个邻居
t₁ t₂ tn-200 tn-128 tn-1 tn
◻ 看不见 ◼ 窗口内 W=128 ★ 当前 token
KV cache O(1) per layer——不管上下文多长,每层只存 128 个 token 的 KV。负责局部的语法和语义关系。
GLOBAL ATTENTION
看完整序列,每 5-6 层一次
t₁ t₂ t₃ tn-2 tn-1 tn
◼ 全部可见
KV cache O(n) per layer——贵,但负责跨距离信息搬运:把 32K 之外的引用拉回来、把 agent trace 头部的工具签名传回当前步。
INGREDIENT 03 · 关键创新
Learnable Attention Sink Bias
SWA 窗口很小(128 token)时,当前 token 有时在窗口内找不到任何有用的信息。没有 sink 时,attention 被迫把概率均摊到一堆噪声 token 上——这就是"激进稀疏导致掉点"的根源。Sink 给了模型一个"什么都不看"的选项
✗ 没有 SINK
窗口内全是无关 token,但 softmax 必须把概率分完——
噪声
18%
噪声
15%
噪声
14%
53%
概率被强行均摊到 128 个噪声 token 上,输出被污染。
✓ 有 SINK
窗口内全是无关 token,注意力"逃"到 sink——
sink
87%
噪声
5%
噪声
4%
4%
87% 的概率交给 sink(不参与值加权),噪声的影响几乎归零。
机制 · 公式
aᵢⱼ = q · kT / √d ← 原始 attention logit
m = max( max aᵢⱼ , sink ) ← 数值稳定:取所有 logit 与 sink 的最大值
sᵢⱼ = exp(aᵢⱼ − m) / ( exp(sink − m) + Σⱼ′ exp(aᵢⱼ′ − m) )
改动就一处:softmax 分母多了 exp(sink − m)sink 是每个 head 自学的标量,不参与值的加权(不在分子)。当窗口内所有 logits 都比 sink 小时,概率流向 sink = "选择不看任何 token"
05 · 反直觉的实验发现

窗口越小反而越好——分工假设

团队在 32B dense 模型上跑了消融,对比 W=128 / W=512 两种 SWA 窗口(都加 sink)。结果在长 context 任务上,更小的窗口稳赢。论文给出的解释直击稀疏注意力研究的"窗口越大越保险"惯性。

!
长 context benchmarks 上,W=128 全面碾压 W=512
在 32K 长 context 微调后评测
架构 GSM-Infinite NoLiMa RULER-32k MRCR
All GA12.349.789.432.5
SWA W=128 + sink 17.3 +5.0 51.2 +1.5 89.4 = 34.4 +1.9
SWA W=512 + sink 17.2 38.5 −11.2 84.7 −4.7 19.6 −12.9
论文的解释 · 分工假设:窗口很小(W=128)时,SWA 被"逼"得只能管局部信息,长程依赖只能交给 GA 层处理——分工清晰。窗口拉大到 W=512,SWA 开始想自己也试着抓一点远处信息,但它本就看不全、又跟 GA 抢活,结果两边都没做好——分工模糊

这个发现对工程上有个直接含义:不要"折中"。要么放弃 SWA 走全 GA,要么就把 SWA 用激进——窗口尽量小、SWA 比例尽量高。中间地带反而最差。

作者也明确声明:这是在他们的 scale 和数据下的经验观察,不一定泛化到所有架构。但这给了"更小窗口 + 更高 SWA 比例"一个反直觉的实验依据。

模型从 48 层扩到 70 层时,我们保持 GA 层的绝对数量大致不变(9 → 10 层),增加的全是 SWA 层。GA 层的绝对数量比 SWA:GA 的 ratio 更重要。模型越大,能承受的稀疏比例越高。

— 罗福莉 · 小米 MiMo 架构负责人

这是一条实用的缩放律:当 GA 层足够多(~10 层)时,模型已经具备足够的长程建模能力。额外增加的层数全部用 SWA,既省 KV cache、又让 MTP 有更多的 compute 余量。V2-Flash 是 5:1,V2.5-Pro 是 6:1——ratio 变了,但 GA 层从 9 涨到 10,几乎没变。

06 · 长上下文训练课程

32K 上预训练,到 1M 是"扩"出来的

混合架构是骨架,但要让模型真正"理解" 1M 上下文,还需要训练流程配合。MiMo 的策略是:大部分预训练用 32K 短序列以保证吞吐,最后小段时间专门切到长序列,并配合 RoPE base 频率调整。

1
PRE-TRAIN
通用预训练
在 32K 序列上吃掉绝大部分高质量语料
0 → 22T tokens · 32K
2
MID-TRAIN
代码 + 推理强化
上调 code & 合成推理数据,仍是 32K
22 → 26T tokens · 32K
3
EXTEND
长上下文扩展
切到 256K,上采样 long-range 依赖样本
26 → 27T tokens · 256K
4
V2.5-PRO
推到 1M token
同样架构,进一步课程扩展
256K → 1M

RoPE base 调整

扩长时只调全局 GA 层的 RoPE base 频率。SWA 因为只看 128 token,base 频率保持极低(10K)即可,反而避免长 context 下 SWA 学到不该有的远程关系。分工再次发力。
Stage 1 · GA640,000
Stage 1 · SWA10,000
Stage 3 · GA5,000,000
Stage 3 · SWA10,000(不变)

这条课程线还有个工程意义:真正昂贵的训练(前 26T token)都跑在 32K 序列上,吞吐高、kernel 友好。只有最后 1T token 才付"长序列训练成本",再加上 hybrid 架构本身省 KV cache,让 256K → 1M 的扩展从财务上变成可行。

07 · MTP · 一招两吃

训练时是个目标函数,推理时是个草稿模型

Multi-Token Prediction(MTP)原本是为了提升训练效率的辅助 loss,让模型多预测几个未来 token。MiMo 把 MTP 的角色"复用"到了推理侧——同一份权重在推理时变成投机解码的 draft,并故意把它做得很轻。而这一切之所以成立,是因为 SWA 省下来的算力刚好留出了 MTP 需要的空间。

T

训练时:增益的 loss 信号

single MTP head · pretrain
在主模型顶层额外接 1 个 MTP block(一层 SWA + dense FFN),预测下一个 token 作为辅助 loss。不同训练阶段的增益不同:

预训练:MTP loss 迫使 hidden state 编码更多前瞻性信息,梯度信号更丰富 → 提升 base 模型质量(与 DeepSeek-V3 的发现一致)。
RL 后训练:rollout 生成时,MTP 每步多产 1 个 token → 整体生成加速。尤其当 batch 里短 sample 先跑完、只剩长尾 sample 时,GPU 算力大量闲置(memory bound),MTP 刚好用闲置的 compute 多产 token,缩短整个 batch 的等待时间。
0.33B
每个 MTP block 参数量
0.3 → 0.1
MTP loss 权重 stage1 → stage2/3
I

推理时:自带的 draft 模型

3-layer MTP · speculative decode
后训练时把那个唯一的 head 复制 K=3 份组成 K-step MTP 模块,做 multi-step 草稿预测。主模型并行 verify 这 3 个 draft token——token-level parallelism同时拉高 attention 与 FFN 的算力利用率,KV cache I/O 不增加。
3.6
acceptance length(每次草稿被接受的 token 数)
2.6×
端到端解码加速

MTP 到底长什么样 · 主模型 + 3 个 mini-Transformer 串联

每个 MTP block 不是一个输出头——它是一整个单层 Transformer(SWA attention + dense FFN),只是做得很轻(0.33B)。3 个 block 链式串联:前一个的 hidden state + 预测 token 的 embedding 喂给下一个。

MAIN MODEL
Layer 47/69
SWA · MoE
GA · MoE
⋮ × 48–70 layers
GA · dense FFN
Layer 0
15B / 42B 激活
LM Head
(共享)
t̂₀
主模型预测
主模型产出 ht (hidden state) + t̂₀ (token) → 喂给 MTP 链
MTP BLOCK 1 · 0.33B
ht
embed(t̂₀)
concat + proj ↓
SWA W=128
Dense FFN
= 1 层 Transformer
LM Head →
t̂₁
ht+1 也传给下一个 block →
MTP BLOCK 2 · 0.33B
ht+1
embed(t̂₁)
concat + proj ↓
SWA W=128
Dense FFN
= 1 层 Transformer
LM Head →
t̂₂
ht+2 也传给下一个 block →
MTP BLOCK 3 · 0.33B
ht+2
embed(t̂₂)
concat + proj ↓
SWA W=128
Dense FFN
= 1 层 Transformer
LM Head →
t̂₃
不是输出头——每个 block 有自己的 attention 和 FFN,是一个完整的单层 Transformer。
链式传递——每个 block 的 hidden state 和 predicted token embedding 一起喂给下一个 block。
共享 LM Head——三个 block 和主模型用同一个输出层,不增加参数,保持概率空间一致。

投机解码 vs 自回归 · 动画对比

左边每步只产 1 个 token,右边每轮产 ~3.6 个。同时跑,看谁先产出 12 个 token。

速度
传统自回归
主模型 forward: 0
等待开始
MTP 投机解码
主模型 forward: 0
等待开始
为什么是 dense FFN + SWA?主模型用 MoE + GA/SWA 混合,参数大、KV cache 复杂;如果 MTP 也搬一套 MoE,反而成新的瓶颈。用 dense FFN 限参数、用 SWA 限 KV cache,让 draft 永远比 verify 快,speculative decoding 才有意义。

SWA 把注意力的计算量省下来了,模型就变成了 memory bound。这个时候 MTP 刚好把省下来的算力填进去——验证 3 个 draft token 的 compute 成本几乎是"白捡"的,因为瓶颈早就不在算力上了

— 罗福莉 · 小米 MiMo 架构负责人

这就是 MiMo 架构最精妙的一笔:SWA 和 MTP 不是两个独立的优化,而是一对互补的预算分配。SWA 把 attention FLOPs 省出来,模型从 compute bound 转向 memory bound;MTP 用投机解码把这些闲置的 compute cycle 填满,转化为 2.6× 的吞吐提升。MLA 走了相反方向——把 memory 省出来的空间拿去堆 compute,结果 MTP 根本没空间切入。

08 · 实验结果

这套架构在长上下文榜单上做到了什么

长上下文有两类典型评测:检索类(NIAH-Multi · 大海捞针)测能不能找到藏在 1M 上下文里的针;推理类(GSM-Infinite)测能不能在长链路上做完整数学推导。前者考记忆、后者考真理解。

NIAH-Multi · 长上下文检索 越高越好

长度 MiMo-V2-Flash Kimi-K2 DeepSeek-V3.2
32K99.399.885.6*
64K99.9100.085.9*
128K98.699.594.3*
256K96.7
读法:15B 激活的 V2-Flash 与 32B / 37B 激活的对手并驾齐驱。最关键的是 256K——其他模型 max length 都不到 256K,MiMo 在 256K 仍稳定 96.7%。

GSM-Infinite Hard · 长上下文推理 看衰减幅度

长度 MiMo-V2-Flash Kimi-K2 DeepSeek-V3.2
16K37.734.650.4
32K33.726.145.2
64K31.516.032.6
128K29.08.825.7
读法:DeepSeek-V3.2 起点最高但掉得快(50.4 → 25.7,−25),稀疏注意力的弱点暴露。Kimi-K2 直接塌方(−25.8)。MiMo 几乎不掉(−8.7),"强而稳"是混合架构 + sink 的胜负手。

到 V2.5-Pro 这一代,OpenAI 的 GraphWalks 长上下文 benchmark 上,512K 仍能拿 0.56 BFS / 0.92 Parents,1M 拿 0.37 / 0.62——而上一代 V2 Pro 在 1M 处直接归零。1M context 不再是个 PR 数字。

09 · 三兄弟一张表

同一套架构,三个尺寸

2026 年 4–5 月这一波 MiMo-V2 / V2.5 系列,技术骨架是同一套——hybrid SWA+GA · W=128 · attention sink · MTP——只是 scale 与 ratio 在调。

MiMo-V2-Flash
309B / 15B active · 256K · 技术报告原文模型
layers
48
SWA : GA
39 : 9
experts
256 / 8
window
128
5:1 SWA:GA 节奏 · 第 0 层 dense GA · KV cache 压缩约
MiMo-V2.5
310B / 15B active · 1M · 原生全模态 agent
layers
48
SWA : GA
39 : 9
experts
256 / 8
context
1M
与 V2-Flash 同骨架,课程扩展到 1M
MiMo-V2.5-Pro
1.02T / 42B active · 1M · 长难 agent 任务
layers
70
SWA : GA
60 : 10
experts
384 / 8
window
128
ratio 拉到 6:1 · KV cache 压缩约 · MTP 直接预训练 3 层。
一个工程层面的细节:V2.5-Pro 直接在预训练阶段挂 3 层 MTP(V2-Flash 是 1 层 + 后训练复制),这意味着投机解码的 draft 模型从一开始就是端到端训练的,acceptance rate 更稳。