DeepSeek-R1 开源后,虽然模型权重开放,但训练数据集和代码并未公开。Open-R1 项目旨在系统性地重构 DeepSeek-R1 的数据集及其训练流程,验证论文成果,推进开源推理模型发展。其核心目标是阐明强化学习如何提升推理能力,并向社区分享可复现的洞察。
Open-R1 复现行动计划
Open-R1 的复现工作主要分为三个阶段:
- 蒸馏复现:通过 R1 蒸馏 Qwen 等小模型,构建高质量推理数据集。
- 纯 RL 训练:复现 R1-Zero 的训练过程,包括生成推理数据集。
- 完整 Pipeline:复现包含 2 阶段 SFT、2 阶段 RL 的完整训练流程。
Step 1:通过 DeepSeek-R1 蒸馏数据训练
使用 DeepSeek-R1 的蒸馏数据创建了 Bespoke-Stratos-17k 数据集,包含问题、推理轨迹和答案。该数据集由以下部分组成:
- 5,000 条来自 APPs 和 TACO 的编程数据;
- 10,000 条来自 NuminaMATH 数据集的 AIME、MATH 和 Olympiads 子集的数学数据;
- 1,000 条来自 STILL-2 的科学和谜题数据。
数据生成与优化
- 高效数据生成:通过 Bespoke Curator 和 DeepSeek-R1,仅用 1.5 小时生成高质量推理数据集,成本控制在 800 美元。
- 改进拒绝采样:引入 Ray 集群加速代码验证。
- 优化推理轨迹:DeepSeek-R1 的推理轨迹质量高,无需额外格式化步骤。
- 提升数学解题精度:通过 gpt-4o-mini 过滤错误的数学解决方案,将正确保留率从 25% 提升至 73%。
代码示例
加载数据集示例:
import pandas as pd
df = pd.read_parquet("hf://datasets/bespokelabs/Bespoke-Stratos-17k/data/train-00000-of-00001.parquet")
System Prompt 设计用于引导模型进行长思考:
Your role as an assistant involves thoroughly exploring questions through a systematic long thinking process before providing the final precise and accurate solutions...
训练命令
使用 HuggingFace 的 trl 框架 SFTTrainer 训练:
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 \
--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
复现效果显示,蒸馏后的模型在宏观指标上与 DeepSeek 论文中报告的蒸馏模型效果基本一致。微观推理生成中,模型会输出包含 `.*?$" completion_contents = [completion[0]["content"] for completion in completions] matches = [re.match(pattern, content) for content in completion_contents] return [1.0 if match else 0.0 for match in matches]


