Open-R1: 复现 DeepSeek-R1 推理流水线
Hugging Face 推出了 Open-R1,这是一个致力于完全开源复现 DeepSeek-R1 推理流水线的项目。通过提供必要的脚本、配方和精选数据集,Open-R1 使社区能够复制 DeepSeek-R1 的推理能力,特别关注从基座模型到经过 RL 微调的推理模型的转变。
项目路线图与当前进展
Open-R1 项目遵循基于 DeepSeek-R1 技术报告的三步“攻击计划”,以实现推理模型创建的民主化:
- 复现 R1-Distill 模型: 从 DeepSeek-R1 中蒸馏高质量语料库,以创建更小、更强大的推理模型。
- 复现纯 RL 流水线: 使用大规模数学、推理和代码数据集来复现 R1-Zero 流水线。
- 多阶段训练: 展示通过多阶段训练从基座模型到经过 RL 微调模型的路径。
截至 2025 年 5 月 26 日,第一步已完成。Hugging Face 发布了 Mixture-of-Thoughts 数据集,其中包含从 R1 蒸馏出的 35 万条经过验证的推理轨迹,涵盖数学、编程和科学领域。该数据集被用于训练 OpenR1-Distill-7B,其复现了 deepseek-ai/DeepSeek-R1-Distill-Qwen-7B 的性能。
训练方法论:SFT 与 GRPO
Open-R1 支持两种主要的训练范式来实现推理能力:
有监督微调 (SFT)
SFT 用于蒸馏。通过在 Mixture-of-Thoughts 等数据集上进行训练,开发者可以快速将推理轨迹注入基座模型中。例如,OpenR1-Distill-7B 模型在 AIME 2024 上获得了 52.7 分,在 MATH-500 上获得了 89.0 分,非常接近或超过了原始的 DeepSeek-R1-Distill-Qwen-7B。
群组相对策略优化 (GRPO)
为了扩展训练并向 R1-Zero 方法迈进,Open-R1 实现了 GRPO。该项目通过 TRL 利用 vLLM 后端 在多个节点上扩展训练。
GRPO 实现的一个关键特性是代码奖励函数,它允许根据生成代码的实际执行结果来奖励模型。这通过沙箱环境支持:
- E2B: 针对 Python 优化的云端沙箱。
- Morph: 支持 Python, JS, C++, 和 Rust 的云端沙箱。
- Piston: 用于 IOI 和 CodeForces 问题的替代执行提供商。
评估与基准测试
Open-R1 使用 lighteval 来复现 DeepSeek 的报告结果。为了确保准确性,该项目强调了为每个查询采样多个响应的重要性,以估计 pass@1 准确率,特别是对于像 AIME 2024 这样高方差的基准测试(其中每个查询使用 64 个响应)。
复现结果
Open-R1 在多个关键基准测试中成功复现了 DeepSeek 的结果,误差在 1-3 个标准差之内:
| Benchmark | DeepSeek-R1-Distill-Qwen-32B (Open-R1 Eval) | DeepSeek-R1-Distill-Qwen-32B (DeepSeek Reported) |
|---|---|---|
| AIME 2024 | 69.7 | 72.6 |
| MATH-500 | 95.6 | 94.3 |
| GPQA Diamond | 63.1 | 62.1 |
| LiveCodeBench | 56.0 | 57.2 |
数据生成与去污染
该项目使用 Distilabel 提供了一套完整的合成推理数据生成流水线。用户可以从小型蒸馏 R1 模型(在单个 H100 上)或完整的 DeepSeek-R1 模型(需要多个节点和 vLLM dev wheels 以修复 CUDA graph capture 问题)生成数据。
为了保持基准测试的完整性,Open-R1 包含一个去污染脚本 (scripts/decontaminate.py),该脚本使用 8-grams 来识别并从训练数据集中移除受污染的样本。
社区洞察与反方观点
虽然该项目提供了一个重要的技术框架,但 Hacker News 上的社区讨论强调了对复现“完全开源”性质的一些质疑:
"不太像他们真的复现了 R1,而且在他们的三步计划中只停在了第一步。"
其他贡献者建议查看 OLMo 或 Nemotron 等项目以获取更全面的开源训练流水线,或者查看 OpenThoughts 以获取更先进的数据策展方法论以及性能优于 DeepSeek 小型推理变体模型。