Open-R1的目标是构建DeepSeek-R1流程中缺失的部分,以便每个人都可以复现并在此基础上进行开发。项目设计简单,主要包含以下内容:
-
src/open_r1 包含用于训练和评估模型以及生成合成数据的脚本:
-
grpo.py:使用GRPO在给定数据集上训练模型。
-
sft.py:在数据集上对模型进行简单的SFT(监督微调)。
-
evaluate.py:在R1基准测试上评估模型。
-
generate.py:使用Distilabel从模型生成合成数据。
-
Makefile:包含针对R1流程中每个步骤的易于运行的命令,利用上述脚本。
Open-R1将以DeepSeek-R1技术报告为指导,该报告大致可以分为三个主要步骤:
-
第一步:通过从DeepSeek-R1中提取高质量语料库,复现R1-Distill模型。
-
第二步:复现DeepSeek用于创建R1-Zero的纯强化学习(RL)流程。这可能涉及为数学、推理和代码创建新的大规模数据集。
-
第三步:展示能够通过多阶段训练从基础模型过渡到经过RL调整的模型。
训练模型
支持使用DDP(分布式数据并行)或DeepSpeed ZeRO-2和ZeRO-3来训练模型。要切换训练方法,只需更改configs文件夹中加速器(accelerate)YAML配置文件的路径即可。
以下训练命令是针对配备8块H100(80GB)显卡的单个节点配置的。如果使用不同的硬件或拓扑结构,可能需要调整批量大小和梯度累积步数。
-
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
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
数据生成
-
从一个小型蒸馏的R1模型生成数据
-
从DeepSeek-R1生成数据
使用了2个节点,每个节点配备8块H100显卡,从DeepSeek-R1模型生成数据
https://github.com/huggingface/open-r1
(文:PaperAgent)