
MiMo-7B:从预训练到强化学习,解锁语言模型的推理潜能
目前,大多数成功的 强化学习 工作,包括开源研究,都依赖于相对较大的基础模型,例如 32B 模型,特别是在增强代码推理能力方面。业内普遍认为在一个小模型中同时提升数学和代码能力是具有挑战性的。然而,小
引言
目前,大多数成功的 强化学习 工作,包括开源研究,都依赖于相对较大的基础模型,例如 32B 模型,特别是在增强代码推理能力方面。业内普遍认为在一个小模型中同时提升数学和代码能力是具有挑战性的。然而,小米MiMo研究团队相信 RL 训练的推理模型的有效性取决于基础模型固有的推理潜力。为了完全解锁语言模型的推理潜力,不仅需要关注后训练,还需要针对推理定制预训练策略。
MiMo-7B,这是一系列从零开始训练并为推理任务而生的模型。MiMo-7B-Base 的 RL 实验表明,MiMo-7B模型具有非凡的推理潜力,甚至超过了更大的 32B 模型。此外,研究团队在冷启动的 SFT 模型上进行了 RL 训练,生成了 MiMo-7B-RL,旨在通过强化学习(RL)提升数学推理和代码生成能力。模型的设计目标是解决复杂任务,特别是在长上下文理解和多步推理方面表现出色,与 OpenAI o1-mini 的性能相匹配。
研究团队开源了 MiMo-7B 系列,包括基础模型、SFT 模型、从基础模型训练的 RL 模型以及从 SFT 模型训练的 RL 模型的Checkpoint。 研究团队相信这份报告及这些模型将为开发强大的推理 LLM 提供有价值的见解,从而造福更广泛的社区。
模型亮点
- 预训练:为推理而生的基础模型
-
- 优化了数据预处理流程,增强了文本提取工具包,并应用多维度数据过滤以提高预训练数据中的推理模式密度。同时,还采用多种策略生成大量多样化的合成推理数据。
- 采用三阶段的数据混合策略进行预训练。总体而言,MiMo-7B-Base 在大约 25 万亿个令牌上进行了预训练。
- 将多令牌预测作为额外的训练目标纳入其中,这增强了模型性能并加速了推理过程。
- 后训练方案:开创性的推理模型
-
- 研究团队精心挑选了 130K 个数学和代码问题作为强化学习训练数据,这些问题可以通过基于规则的验证器进行验证。每个问题都经过仔细清理和难度评估,以确保质量。仅使用基于规则的准确性奖励来避免潜在的奖励漏洞。
- 为了缓解具有挑战性的代码问题的稀疏奖励问题,研究团队引入了由测试难度驱动的代码奖励。通过对不同难度级别的测试用例分配细粒度分数,可以更有效地通过密集奖励信号优化策略。
- 对简单问题实施了数据重采样策略,以提高展开采样效率并稳定策略更新,特别是在强化学习训练的后期阶段。
- 强化学习基础设施
-
- 研究团队开发了一个Seamless Rollout引擎,以加速强化学习训练和验证。该设计集成了连续rollout、异步奖励计算和提前终止,以最小化 GPU 空闲时间,实现了 2.29倍 的更快训练速度和 1.96倍的更快验证速度。
- 同时,在 vLLM 中支持 MTP,并增强了 RL 系统中推理引擎的鲁棒性。
模型结构
MiMo-7B 的 MTP 层在预训练和 SFT 期间进行调优,并在强化学习期间冻结。使用一层 MTP 进行推测解码时,接受率约为 90%。
模型链接:https://modelscope.cn/collections/MiMo-7edb0ab729c744
模型评估
基准测试 |
GPT-4o-0513 |
Claude-3.5-Sonnet-1022 |
OpenAI o1-mini |
QwQ-32B-Preview |
R1-Distill-Qwen-14B |
R1-Distill-Qwen-7B |
MiMo-7B-RL |
通用 |
|||||||
GPQA Diamond (Pass@1) |
49.9 |
65.0 |
60.0 |
54.5 |
59.1 |
49.1 |
54.4 |
SuperGPQA (Pass@1) |
42.4 |
48.2 |
45.2 |
43.6 |
40.6 |
28.9 |
40.5 |
DROP (3-shot F1) |
83.7 |
88.3 |
83.9 |
71.2 |
85.5 |
77.0 |
78.7 |
MMLU-Pro (EM) |
72.6 |
78.0 |
80.3 |
52.0 |
68.8 |
53.5 |
58.6 |
IF-Eval (Prompt Strict) |
84.3 |
86.5 |
84.8 |
40.4 |
78.3 |
60.5 |
61.0 |
数学 |
|||||||
MATH-500 (Pass@1) |
74.6 |
78.3 |
90.0 |
90.6 |
93.9 |
92.8 |
95.8 |
AIME 2024 (Pass@1) |
9.3 |
16.0 |
63.6 |
50.0 |
69.7 |
55.5 |
68.2 |
AIME 2025 (Pass@1) |
11.6 |
7.4 |
50.7 |
32.4 |
48.2 |
38.8 |
55.4 |
代码 |
|||||||
LiveCodeBench v5 (Pass@1) |
32.9 |
38.9 |
53.8 |
41.9 |
53.1 |
37.6 |
57.8 |
LiveCodeBench v6 (Pass@1) |
30.9 |
37.2 |
46.8 |
39.1 |
31.9 |
23.9 |
49.3 |
MiMo-7B 系列
基准测试 |
MiMo-7B-Base |
MiMo-7B-RL-Zero |
MiMo-7B-SFT |
MiMo-7B-RL |
数学 |
||||
MATH500 (Pass@1) |
37.4 |
93.6 |
93.0 |
95.8 |
AIME 2024 (Pass@1) |
32.9 |
56.4 |
58.7 |
68.2 |
AIME 2025 (Pass@1) |
24.3 |
46.3 |
44.3 |
55.4 |
代码 |
||||
LiveCodeBench v5 (Pass@1) |
32.9 |
49.1 |
52.3 |
57.8 |
LiveCodeBench v6 (Pass@1) |
29.1 |
42.9 |
45.5 |
49.3 |
评估是在 temperature=0.6
的条件下进行的。
AIME24 和 AIME25 是基于 32 次重复的平均得分。LiveCodeBench v5 (20240801-20250201),LiveCodeBench v6 (20250201-20250501),GPQA-Diamond 和 IF-Eval 是基于 8 次重复的平均得分。MATH500 和 SuperGPQA 是单次运行的结果。
最佳实践
模型推理
使用transformers推理
from modelscope import AutoModel, AutoModelForCausalLM, AutoTokenizer
model_id = "XiaomiMiMo/MiMo-7B-Base"
model = AutoModelForCausalLM.from_pretrained(model_id, trust_remote_code=True)
tokenizer = AutoTokenizer.from_pretrained(model_id)
inputs = tokenizer(["Today is"], return_tensors='pt')
output = model.generate(**inputs, max_new_tokens = 100)
print(tokenizer.decode(output.tolist()[0]))
模型部署
SGLang 推理
感谢 SGLang 团队的贡献,我们在 24 小时内支持了 SGLang 主流中的 MiMo,MTP 即将到来。
示例脚本
# Install the latest SGlang from main branch
python3 -m uv pip install "sglang[all] @ git+https://github.com/sgl-project/sglang.git/@main#egg=sglang&subdirectory=python"
# Launch SGLang Server
SGLANG_USE_MODELSCOPE=true python3 -m sglang.launch_server --model-path XiaomiMiMo/MiMo-7B-RL --host 0.0.0.0 --trust-remote-code
模型微调
ms-swift已经支持了MiMo-7B系列模型的微调。ms-swift是魔搭社区官方提供的大模型与多模态大模型训练部署框架。ms-swift开源地址:https://github.com/modelscope/ms-swift
我们将展示可运行的微调demo,并给出自定义数据集的格式。
在开始微调之前,请确保您的环境已准备妥当。
# pip install git+https://github.com/modelscope/ms-swift.git
git clone https://github.com/modelscope/ms-swift.git
cd ms-swift
pip install -e .
自定义数据集格式如下,指定--dataset <dataset-path>
即可开始训练:
# 通用格式
{"messages": [
{"role": "system", "content": "<system-prompt>"},
{"role": "user", "content": "<query1>"},
{"role": "assistant", "content": "<response1>"}
]}
# 思考数据集格式
{"messages": [
{"role": "user", "content": "浙江的省会在哪"},
{"role": "assistant", "content": "<think>\n...\n</think>\n\n浙江的省会在杭州。"}
]}
我们以 XiaomiMiMo/MiMo-7B-RL 模型为例,使用自我认知数据集进行训练。由于自我认知数据集不含思考链路,可以通过在训练时指定--loss_scale ignore_empty_think
忽略<think>\n\n</think>\n\n
的损失计算,缓解模型推理能力的下降。
CUDA_VISIBLE_DEVICES=0 \
swift sft \
--model XiaomiMiMo/MiMo-7B-RL \
--train_type lora \
--dataset 'liucong/Chinese-DeepSeek-R1-Distill-data-110k-SFT#1000' \
'swift/self-cognition:empty_think#500' \
--torch_dtype bfloat16 \
--num_train_epochs 1 \
--per_device_train_batch_size 1 \
--per_device_eval_batch_size 1 \
--learning_rate 1e-4 \
--lora_rank 8 \
--lora_alpha 32 \
--target_modules all-linear \
--gradient_accumulation_steps 16 \
--eval_steps 50 \
--save_steps 50 \
--save_total_limit 2 \
--logging_steps 5 \
--max_length 2048 \
--output_dir output \
--warmup_ratio 0.05 \
--dataloader_num_workers 4 \
--loss_scale ignore_empty_think \
--model_author swift \
--model_name swift-robot
训练显存占用:
训练效果展示:
训练完成后,使用以下命令对训练后的权重进行推理,这里的`--adapters`需要替换成训练生成的last checkpoint文件夹。
CUDA_VISIBLE_DEVICES=0 \
swift infer \
--adapters output/vx-xxx/checkpoint-xxx \
--stream true \
--max_new_tokens 2048 \
--temperature 0
推送模型到ModelScope:
CUDA_VISIBLE_DEVICES=0 \
swift export \
--adapters output/vx-xxx/checkpoint-xxx \
--push_to_hub true \
--hub_model_id '<your-model-id>' \
--hub_token '<your-sdk-token>'
更多推荐
所有评论(0)