Open-R1:DeepSeek-R1 的完全开源复现项目解析
Open-R1 是由 Hugging Face 推出的 DeepSeek-R1 的完全开源复现项目。该项目旨在构建 DeepSeek-R1 流程中缺失的部分,以便每个人都可以复现并在此基础上进行开发。项目设计简洁,主要包含用于训练、评估模型以及生成合成数据的脚本。
项目结构
src/open_r1 目录包含核心功能脚本:
grpo.py:使用 GRPO(Group Relative Policy Optimization)在给定数据集上训练模型。sft.py:在数据集上对模型进行简单的 SFT(监督微调)。evaluate.py:在 R1 基准测试上评估模型性能。generate.py:使用 Distilabel 从模型生成合成数据。Makefile:包含针对 R1 流程中每个步骤的易于运行的命令,利用上述脚本。
技术路线
Open-R1 将以 DeepSeek-R1 技术报告为指导,大致可以分为三个主要步骤:
- 语料库提取与蒸馏:通过从 DeepSeek-R1 中提取高质量语料库,复现 R1-Distill 模型。
- 纯强化学习流程复现:复现 DeepSeek 用于创建 R1-Zero 的纯强化学习(RL)流程。这可能涉及为数学、推理和代码创建新的大规模数据集。
- 多阶段训练过渡:展示能够通过多阶段训练从基础模型过渡到经过 RL 调整的模型。
环境准备与训练配置
硬件要求
以下训练命令是针对配备 8 块 H100(80GB)显卡的单个节点配置的。如果使用不同的硬件或拓扑结构,可能需要调整批量大小和梯度累积步数。
训练方法支持
支持使用 DDP(分布式数据并行)或 DeepSpeed ZeRO-2 和 ZeRO-3 来训练模型。要切换训练方法,只需更改 configs 文件夹中加速器(accelerate)YAML 配置文件的路径即可。
SFT 阶段
监督微调(SFT)是训练的基础步骤,代码如下:
accelerate launch --config_file=configs/zero3.yaml src/open_r1/sft.py \
--model_name_or_path Qwen/Qwen2.5-Math-1.5B-Instruct \
--dataset_name HuggingFaceH4/Bespoke-Stratos-17k \
--learning_rate 2.0e-5 \
--num_train_epochs 1 \
--packing \
--max_seq_length 4096 \
--per_device_train_batch_size 4 \
--per_device_eval_batch_size 4 \
--gradient_accumulation_steps 4 \
--gradient_checkpointing \
--bf16 \
--logging_steps 5 \
--eval_strategy steps \
--eval_steps 100 \
--output_dir data/Qwen2.5-1.5B-Open-R1-Distill
GRPO 训练
GRPO 阶段用于强化学习优化,配置如下:
accelerate launch --config_file configs/zero3.yaml src/open_r1/grpo.py \
--output_dir DeepSeek-R1-Distill-Qwen-7B-GRPO \
--model_name_or_path deepseek-ai/DeepSeek-R1-Distill-Qwen-7B \
--dataset_name AI-MO/NuminaMath-TIR \
--max_prompt_length 256 \
--per_device_train_batch_size 1 \
--gradient_accumulation_steps 16 \
--logging_steps 10 \
--bf16


