DeepSeek-R1复现项目开源
速览
该项目旨在复现DeepSeek-R1模型,通过开源模型权重和训练代码,降低研究门槛。此举有助于社区深入理解R1架构,推动大模型技术的进一步发展与创新。
AI 深度解读
Open Reproduction of DeepSeek-R1:深度解读
背景
DeepSeek-R1 的发布在人工智能社区引起了巨大轰动,其展现出的强大推理能力引发了业界对“强化学习(RL)在大型语言模型中作用”的重新审视。然而,DeepSeek 官方并未完全开源其 R1 模型的全部训练细节、数据生成流程及具体的强化学习配置,这给希望复现其效果的研究者和开发者带来了一定门槛。
在此背景下,Hacker News 上流传并广受关注的 Open Reproduction of DeepSeek-R1 项目应运而生。该项目的核心目标是填补 R1 训练管线中缺失的环节,通过完全开源的方式,让社区能够复现并在此基础上构建新的模型。该项目并非简单的代码堆砌,而是旨在建立一个透明、可验证的 R1 复现管线,涵盖从数据生成、监督微调(SFT)到强化学习(RL)训练的全过程。
核心内容
该项目是一个持续进行的工作(Work in Progress),其设计初衷是简化复现流程。项目结构主要包含 src/open_r1 目录下的核心脚本以及用于简化操作的 Makefile。
1. 项目架构与工具链
项目通过以下核心脚本实现 R1 管线的关键步骤:
grpo.py:在给定数据集上使用 GRPO(Group Relative Policy Optimization,组相对策略优化)算法训练模型。sft.py:对模型在数据集上进行简单的监督微调(Supervised Fine-Tuning)。generate.py:利用 Distilabel 从模型中生成合成数据。Makefile:封装了上述脚本的易执行命令,简化 R1 管线各步骤的操作。
2. 复现路线图
项目严格遵循 DeepSeek-R1 的技术报告,将复现工作划分为三个主要阶段:
- 阶段 1:复现 R1-Distill 模型。通过从 DeepSeek-R1 蒸馏高质量语料,构建蒸馏模型。
- 阶段 2:复现纯 RL 管线(R1-Zero)。这涉及整理用于数学、推理和代码的大规模新数据集。
- 阶段 3:展示从基础模型到经过 RL 调优模型的完整多阶段训练流程。
3. 关键进展与数据发布
项目团队按时间顺序发布了多个重要更新和数据集,逐步推进复现进程:
-
2025年5月26日(阶段 1 完成):
- 发布了 Mixture-of-Thoughts 数据集,包含 35 万条经过验证的推理轨迹(verified traces),涵盖数学、编码和科学任务,旨在教导语言模型进行逐步推理。
- 发布了训练配方,成功复现了
open-r1/OpenR1-Distill-7B模型,其推理能力与deepseek-ai/DeepSeek-R1-Distill-Qwen-7B相当,标志着阶段 1 的完成。
-
2025年3月11日(更新 #3):
- 发布了 CodeForces-CoTs 数据集,包含 1 万个竞技编程问题和 10 万条从 R1 蒸馏出的解决方案。
- 发布了 IOI24 基准测试,包含来自国际信息学奥林匹克竞赛的极难问题。
- 性能表现:在 IOI24 上,基于 CodeForces-CoTs 训练的 7B Qwen 模型表现优于 Claude 3.7 Sonnet;32B 模型则超越了 R1 本身。
-
2025年2月10日(更新 #2):
- 发布了 OpenR1-Math-220k 数据集,包含 22 万条从 R1 在 NuminaMath 新版本上蒸馏出的轨迹。
- 在此数据集上训练的模型性能与 DeepSeek 的蒸馏模型持平。
-
2025年2月2日(更新 #1):
- 实现了训练、推理和评估管线的第一部分。
4. 安装与配置指南
项目对硬件和软件环境有特定要求,主要依赖 CUDA 12.4。
-
环境准备:
- 推荐使用
uv管理 Python 虚拟环境。 - 必须安装 vLLM (0.8.5.post1) 和 FlashAttention。
- 重要提示:必须使用 PyTorch v2.6.0,因为 vLLM 的二进制文件是为此版本编译的。
- 需登录 Hugging Face 和 Weights and Biases (W&B) 账户。
- 需确保系统安装了 Git LFS 以加载和推送模型/数据集。
- 推荐使用
-
硬件配置:
- 默认配置针对 8 x H100 (80GB) 节点。
- 支持 DDP 或 DeepSpeed (ZeRO-2 和 ZeRO-3) 进行分布式训练。
- 若硬件不同,需调整 batch size 和梯度累积步数以保持全局 batch size 恒定。
5. 训练与推理细节
-
监督微调 (SFT):
- 示例命令展示了如何使用
accelerate和zero3.yaml配置,基于open-r1/Mixture-of-Thoughts数据集对Qwen2.5-Math-7B-RoPE-300k进行微调。 - 关键参数包括:学习率
4.0e-5,训练轮数5,最大序列长度32768,启用gradient_checkpointing和bf16精度。
- 示例命令展示了如何使用
-
聊天模板 (Chat Template) 注意事项:
- 警告:大多数基础模型(如
meta-llama/Llama-3.2-1B)没有预定义的聊天模板,因此训练时默认使用 ChatML。 - Qwen 模型:Qwen 基础模型(如
Qwen/Qwen2.5-1.5B)在 tokenizer 中预定义了聊天模板,因此必须相应设置 EOS token(例如<|eot_id|>或 `
- 警告:大多数基础模型(如
