读懂 MiniMax:RL 算法、权重同步与可验证数据的一条主线
以 MiniMax 的发布博客为切口,把 RL 算法、训练系统、权重同步基建、数据 pipeline 串成一条线,最后落到那个真正决定上限的问题——“蒸馏 vs RL 的边界到底在哪”。

目录
- 0. 一条主线
- 1. 模型演进:M2 → M2.7 → M3
- 2. RL 算法:PPO / GRPO / CISPO
- 3. Forge:自研 Agent-native RL 系统
- 4. 工程基建:权重怎么从训练侧搬到推理侧
- 5. 数据构造 Pipeline
- 6. 批判性思考:它在哪会塌
- 7. 蒸馏 vs RL 的本质边界
- 8. on-policy 蒸馏的位置
0. 一条主线
大模型能力的上限,正在从“算法”转移到“数据与奖励的可验证性”;而能不能真正跑起来,取决于一整套工程基建。
谁能把更多任务变得“可自动验证”,又能把训练-推理的飞轮转得够快,谁就能让模型摆脱“模仿老师”的天花板。
1. 模型演进:M2 → M2.7 → M3
1.1 大个子,小激活
MiniMax 是典型的 MoE(混合专家):以已公开的 M2 为例,总参数约 229.9B,但每个 token 只激活约 9.8B(激活率 ~4.3%,256 个细粒度专家)。一句话——“个头像 2300 亿,跑起来像 98 亿”,论文标题就直白地叫 Mini Activations Unleashing Max Real-World Intelligence。(M3 的参数量官方尚未披露。)
1.2 三代演进的暗线
M2 全注意力(保精度,但平方复杂度贵) · 192K · 纯文本
└ 埋伏笔:"高效注意力会掉点,先用全注意力顶着"
M2.5 大规模 agentic RL(Forge + CISPO)
M2.7 自我进化雏形:自己 debug 训练、改自己的 scaffold
M3 MSA(块级稀疏注意力) · 1M · 原生多模态 · 操作电脑
└ 兑现伏笔:"先用主流方法做平质量,再干净替换"
1.3 M3 的核心创新:MSA
- 动机:M2 试过线性/滑窗注意力都掉点,只能保守用全注意力,代价是百万上下文算力爆炸。
- 做法:在 GQA 骨干上,对未压缩的真实 KV做块级选择(不像 MLA 那样压缩 KV,因此不掉精度)。
- 效果:1M token 时每 token 算力降到上一代的 1/20,prefill 快 9×、decode 快 15×。
- 气质:不追理论最优,只要“能立刻跑、跑得快、能复用现有 kernel”。
1.4 参照系:小米 MiMo-V2.5-Pro
对比同期的小米 MiMo-V2.5-Pro:
| MiMo-V2.5-Pro | MiniMax-M3 | |
|---|---|---|
| 规模 | 1.02T 总 / 42B 激活 | 官方未公开 |
| 上下文 | 1M | 1M(保底 512K) |
| 模态 | 纯文本 | 原生多模态(图/视频输入) |
| 省长上下文的招 | 混合注意力(局部+全局 6:1)+ MTP | MSA 块级稀疏 |
| 主攻 | 省内存(KV cache↓~7×)、省 token | 省计算、提速 |
注意区分:纯文本的是 MiMo-V2.5-Pro(1.02T/42B);同系列还有个非 Pro 的
MiMo-V2.5(310B/15B)是原生全模态(文本+图+视频+音频)。这里对比的是定位与 M3 相近的 Pro 版。
两者代表两种截然不同的省长上下文哲学。长上下文有两座大山:算得贵(每个新 token 都要回看全部历史,平方级增长)和存得贵(KV cache 把每个历史 token 的“笔记卡片”堆满显存)。
- MiMo——分层:多数层只看最近一小段(128 词窗口),少数层才看全局。主攻省内存。像“大部分时候只翻最近一页笔记”。
- MiniMax——分块:把历史切块、只挑相关块精读,其余跳过。主攻省计算。像“笔记按章节分堆,只精读相关那几堆”。
同一个目标,一个从“分层”下手,一个从“分块”下手。
2. RL 算法:PPO / GRPO / CISPO
2.1 一个统一框架
所有策略梯度算法其实长一个样:
\[\nabla J = \mathbb{E}\big[\, w \cdot \hat{A} \cdot \nabla \log \pi_\theta \,\big]\]三个零件:$\hat{A}$(优势)=这次比平均好还是差;$w$(权重)=用多大力气(要踩刹车的就是它);$\nabla\log\pi_\theta$=往哪调参数能改变这个 token 的概率(指南针)。三个算法的全部差别,只在 $\hat{A}$ 和 $w$ 怎么填。
2.2 三者对比
| 维度 | PPO | GRPO | CISPO |
|---|---|---|---|
| 需要 Critic | ✅(显存×2,难训) | ❌ | ❌ |
| 优势怎么算 | Value 网络 + GAE | 组内奖励归一化 | 组内归一化(同 GRPO) |
| 裁剪对象 | 概率比 | 概率比 | 重要性采样权重 |
| 被裁 token 梯度 | 归零 | 归零 | 保留(stop-gradient) |
| 关键推理 token | 易丢 | 易丢 | 不丢 |
核心洞察:PPO/GRPO 会把“调过头的 token”直接封印(梯度=0),而那些罕见却关键的推理 token(“但是”“重新检查”)最容易被误伤。CISPO 只压力气、绝不封印,因此更适合长程 agent 轨迹。

用一个类比:一群人推车(车=参数)。PPO 是“谁用力过猛就剪断他的绳子、让他这轮歇着”(梯度归零);CISPO 是“谁用力过猛就给他限个速,但绝不让他停手”——人人都还在出力,只是不许过猛。
2.3 为什么梯度会“归零”——五条数学性质
梯度归零的根源,是下面五条数学性质:
- 常数导数=0 → clip 把 $r_t$ 钉成边界常数后,梯度自然没了;
- log 导数技巧 $\nabla\log\pi=\nabla\pi/\pi$ → 策略梯度的基石,只要 $\theta$ 在就永远有梯度;
- IS 权重恒等式 $\nabla r_t = r_t\nabla\log\pi$ → 连接“对 $r_t$ 求导”和“对 $\log\pi$ 求导”的桥;
- clip 分段导数:区间内是 $\nabla r_t$,超界是 0 —— 这就是归零的来源;
- stop-gradient:数值还在但不回传梯度(代码里就是
.detach())。
CISPO 的妙处一句话讲清:把会“剪断梯度”的 $r_t$ 套上 stop-gradient 当常数系数,让梯度改从 $\log\pi$ 走——既限了大权重的方差,又保证每个 token 都有梯度。
2.4 为什么会有“新旧模型”之分
为省钱,一批昂贵生成的数据会被反复更新模型好几次:数据由旧模型 $\pi_{old}$ 生成(冻结),但模型已迭代到 $\pi_{new}$。重要性采样权重 $w=\pi_{new}/\pi_{old}$ 就是来纠偏的——越往后用、模型离得越远(off-policy 越严重),纠偏越关键,而权重太大会让训练崩,所以要裁剪。
3. Forge:自研 Agent-native RL 系统
Forge 要破的是 RL 的“不可能三角”:吞吐量 vs 训练稳定性 vs Agent 灵活性。
- 三模块解耦:Agent 侧 / 中间件(Gateway + Data Pool)/ 训练-推理引擎分离 → 支持任意 scaffold,白盒黑盒都行。
- Windowed-FIFO 调度:agent 轨迹长度方差极大,并行生成会“木桶效应”空转。解法是在生成与消费间设一个滑动窗口(单位是在途样本数):窗口内先完成先取(保吞吐),左边界只在最老一条被消费后右移(卡陈旧度)。它和“版本打标丢弃”的本质区别是——事前限流(几乎不丢昂贵 rollout)而非事后拒收。
- Prefix-Tree Merging:同任务多条轨迹开头常相同 → 把训练从“线性序列”变“树结构”,公共前缀只算一次 → 约 40× 加速,零近似误差。
4. 工程基建:权重怎么从训练侧搬到推理侧
这一节是顺带延伸的:MiniMax 的公开材料几乎没提权重同步,但 Kimi(Moonshot)专门开源了 checkpoint-engine 来处理这件事,对比之下值得补一课——它也是 RL 里最容易被忽视、却最“烧钱”的环节。
RL 的循环是:
[训练引擎] 更新权重 θ ──► [推理引擎] 用新 θ 生成 rollout
▲ │
└────── 用回答算 reward、梯度 ◄──────┘
训练侧和推理侧(vLLM/SGLang)是两拨独立程序、各占 GPU、内存不互通。每轮要把几百 GB~几 TB 的新权重同步过去——这一步慢,GPU 就全在空转等权重。

4.1 裸用 NCCL:Trinity-RFT 的做法
Trinity-RFT 用一个 Synchronizer(同步协调员) 当交通警察,协调 Trainer ↔ Explorer:开训前 init_process_group(backend="nccl") 让双方“建个群”,同步时先握手对齐状态,再 collective_rpc("update_weight") 把权重广播出去。
它的天花板(也是集合通信的通病):通信组是静态的——中途要加推理实例,得拆了重建整个组,打断在线服务;而且全有或全无,一个 rank 卡住全卡住。
4.2 中间件:Moonshot 的 checkpoint-engine
它不是 NCCL 的竞品,而是架在通信原语之上的编排中间件(Broadcast 模式底层照样用 NCCL)。招牌成绩:给 Kimi-K2(1T 参数)在数千卡上更新一次权重只要约 20s。两种模式:
- Broadcast(默认最快):全量同步,把传输拆成 H2D → broadcast(写进与推理引擎共享的 CUDA IPC 缓冲)→ reload 三阶段并流水线重叠。
- P2P:专治“中途动态加实例”——用 RDMA 点对点传,不打扰正在服务的老实例。
一句话选型:经典同步循环、实例固定 → 裸 NCCL 就够用;上千卡、实例会动态增减 → 才轮到 checkpoint-engine。NCCL 是“自己开车的高速公路”,checkpoint-engine 是“路上又加了一套物流调度系统”。
5. 数据构造 Pipeline(最值钱的部分)
5.1 总原则
每条训练数据 = 一个能跑的环境 + 一个客观可信的奖励信号。
最反直觉的认知:这套 pipeline 的工作量不在“造数据”,而在“造验证器/造环境”。数据是副产品,verifier 才是主产品。
5.2 Agentic Coding(奖励最好判,靠跑测试)
- SWE(改已有代码库):用 GitHub PR,按类型定制奖励。Bug 修复用 F2P(治好了)+ P2P(没治坏)双重门——P2P 是防“假修复”的回归护栏;加功能改抓“新增测试必须过”;性能优化则 P2P 保行为不变 + 验证真变快。判分前还用模型校验“题面和测试一致”,判分后做增广(注 bug、合并成多步、甚至反转任务:不修 bug 改写测试)。
- AppDev(从零写 App)—— AaaV(Agent-as-a-Verifier):把 App 真部署进沙箱,三层验证:执行层(能 build 吗)→ 交互层(用 Playwright 真点按钮)→ 美学层。
- Terminal-Gym:用 Stack Overflow,靠 Query Evolution 删掉答案线索,逼测试验证逻辑而非背答案。
5.3 Agentic Cowork(奖励难判)
| 领域 | 怎么判分 |
|---|---|
| 深度搜索 | 必须基于真实检索证据(防瞎编) |
| 办公文档 | 多维 rubric |
| 金融表格 | 反向造题:先跑真实工具拿结果,再倒推“答案被唯一确定”的题 |
| PPT | 渲染成图片再打分 |
最聪明的是金融的“反向造题”:正常是先有题再求答案,他们反过来,先用工具跑出真实结果再倒推题目——答案天生可验证。
5.4 怎么测一个模型的代码能力
让模型写个 HTML 小游戏(黄金矿工、大鱼吃小鱼),能测“单轮生成 + 完整度 + 审美”,但测不到长程 agentic,而且简单版谁都能过、拉不开差距。想有区分度要:加硬约束(真实钟摆物理、倒计时、禁用库)、改多轮迭代(看会不会把前面改崩)、或上多模态(给截图还原——纯文本模型直接做不了,天然区分)。真正分高下的,是 debug 时能否一次找全多个 bug、模糊需求下会不会主动澄清、以及长任务里的自我纠错耐力。
6. 批判性思考:它在哪会塌
亮点之外,更要看失效边界:
- Windowed-FIFO 没根治长尾:一条变态长任务仍能占满窗口,还引入对短任务的采样偏置,窗口 W 难调。
- CISPO + 组内优势的死角:同题 G 次采样全对或全错 → 优势全为 0 → 这组白训。奖励必须有区分度。
- 保留 off-policy 梯度是双刃剑:不丢关键 token,但也保留了有偏梯度(bias-variance 权衡)。
- Reward Hacking 打不完:模型会专门骗测试(M3 评测甚至要监控 bash 命令防
git clone/pip install偷答案)。 - 自我进化的回声室:模型自己改 scaffold、自己造评测、自己打分,偏见会被自我放大、难审计。
- 贵到只有大厂能做:真正贵的不是模型,是“几十万个能跑起来还不腐烂的环境”+ 一整套权重同步/调度基建。
7. 最深的一层:蒸馏 vs RL 的本质边界
“现在 LLM 都在蒸馏”这话只对一半,关键看在哪一段:
| 阶段 | 是不是蒸馏 | 能否超过老师 |
|---|---|---|
| SFT 冷启动 | ✅ 基本是 | ❌ 打底而已 |
| 不可验证任务的 RL(写作/办公) | ⚠️ 半蒸馏(裁判也是 LLM) | ❌ 被裁判锁死 |
| 可验证任务的 RL(代码/数学) | ❌ 不是,奖励来自环境 | ✅ 能超过任何老师 |
世界上的任务被一道“可验证性断崖”分成两半(就是开头那张图):左边代码、数学有客观对错,RL 能超老师;右边写作、研究、多轮协作只能靠裁判模型,被天花板锁死。
MiniMax 的真功夫,是用反向造题、AaaV 这些手段,尽量把断崖右边的任务“搬”到左边。谁能把不可验证变可验证,谁就摆脱蒸馏、拿到护城河。
8. 接回自己的研究:on-policy 蒸馏的位置
把这些方法放进一根坐标轴,就能定位 on-policy 蒸馏(TCoD: Temporal Curriculum in On-Policy Distillation)的位置:
纯模仿/蒸馏 ←———————————————→ 纯 RL(环境奖励)
(off-policy,学老师轨迹) (on-policy,自己探索)
SFT on-policy 蒸馏(TCoD) RLVR(MiniMax)
↑学不过老师 ↑中间路线 ↑能超老师但奖励难造
On-policy 蒸馏让学生在自己的分布上探索(避免纯蒸馏的 exposure bias),同时用老师的稠密信号做监督(不依赖难造的 verifier)——特别适合多轮、长程、难验证的 agent 场景,恰好是断崖右边的一种解法。
而它依托的 Trinity-RFT 把 RFT 解耦成 Explorer / Trainer / Buffer 三模块,和 Forge 解耦 training/inference/agent 是同一种哲学:把“生成经验”和“消费经验”分开,才能灵活控制 on-policy/off-policy。Buffer 专门处理数据陈旧度(呼应 Windowed-FIFO),Explorer↔Trainer 之间靠 NCCL 同步权重(呼应第 4 章)——整条线就串起来了。
把这条从发布博客追到本质的线梳理下来,也顺带帮我把手头的 on-policy 蒸馏研究重新定了位。