Hotdry.

Article

Open-R1 开源复现:从 SFT 到 GRPO 的完整训练 Pipeline 与多节点优化

深入解析 HuggingFace Open-R1 项目的工程实现,涵盖 GRPO 算法原理、SFT 到 RL 的 pipeline 设计,以及多节点训练的性能优化参数。

2026-06-11ai-systems

DeepSeek-R1 的发布让推理模型训练进入大众视野,但其完整的技术细节并未完全公开。HuggingFace 发起的 Open-R1 项目正致力于填补这一空白,通过完全开源的代码和数据集,复现从监督微调到强化学习的完整 pipeline。本文聚焦该项目的工程实现细节,拆解 SFT 与 GRPO 的训练流程,并提供可直接落地的多节点训练配置参数。

三阶段复现路线图

Open-R1 采用渐进式复现策略,将 DeepSeek-R1 的训练流程拆解为三个可独立验证的阶段:

第一阶段:蒸馏复现(已完成)。通过从 DeepSeek-R1 提取高质量推理轨迹,复现 R1-Distill 系列模型的能力。项目已发布 Mixture-of-Thoughts 数据集,包含 35 万条经过验证的数学、代码和科学推理轨迹,基于该数据集训练的 OpenR1-Distill-7B 在 AIME 2024 上达到 52.7% 的准确率,与官方蒸馏模型性能相当。

第二阶段:纯 RL 复现。目标是复现 R1-Zero 的训练 pipeline,即不依赖 SFT、直接从基础模型出发的纯强化学习流程。这需要构建大规模的可验证数据集,涵盖数学、推理和代码任务。

第三阶段:多阶段训练。展示从基础模型到 RL 调优模型的完整训练链路,验证冷启动数据与强化学习的协同效果。

SFT 阶段:蒸馏数据的监督微调

SFT 是 Open-R1 pipeline 的起点,用于让基础模型学习推理格式和思维模式。项目采用标准的指令微调范式,但针对推理任务做了特定优化。

训练脚本 sft.py 基于 Transformers 和 TRL 构建,支持通过 Accelerate 启动多卡训练。关键配置参数如下:

  • 学习率:4.0e-5,配合余弦衰减策略
  • 序列长度:最大 32768 tokens,需开启梯度检查点(gradient_checkpointing)以节省显存
  • 批次配置:单卡 batch size 为 2,配合 ZeRO-3 优化器状态分片,可在 8×H100(80GB)节点上训练 7B 模型
  • 训练轮次:5 个 epoch,使用 bfloat16 精度加速

项目推荐使用 DeepSpeed ZeRO-3 配置进行多卡训练,通过 accelerate launch 启动。对于不同硬件规模,建议保持全局 batch size 不变,通过调整 per_device_batch_size 或 gradient_accumulation_steps 来适配 GPU 数量。

一个容易被忽视的细节是 EOS token 的对齐。Qwen 系列模型使用 <|im_end|> 作为结束符,而 Llama 系列使用 <|eot_id|>。训练时必须显式指定 --eos_token 参数,确保与 chat template 一致,否则会导致生成阶段无法正确终止。

GRPO:无 Critic 的组相对策略优化

GRPO(Group Relative Policy Optimization)是 DeepSeek-R1 训练的核心算法,也是 Open-R1 第二阶段的重点实现对象。与传统 PPO 相比,GRPO 最大的创新在于消除了独立的 Critic 网络

在标准 PPO 中,Critic 网络需要为每个 token 估计价值函数,这对大模型而言是沉重的内存和计算负担。GRPO 的解决思路是:对同一 prompt 采样一组输出(group),用组内奖励的均值和标准差计算相对优势,取代 Critic 的绝对价值估计。

具体而言,对于每个问题,模型生成 G 个候选回答,计算各自的奖励分数后,优势值计算公式为:

A_i = (r_i - mean(r)) / std(r)

这种组内归一化的优势估计天然具有方差缩减效果,且无需维护额外的价值网络。策略更新采用与 PPO 类似的裁剪目标函数,配合 KL 散度惩罚项,防止策略偏离参考模型过远。

Open-R1 的 grpo.py 脚本基于 TRL 的 vLLM 后端实现,支持两种部署模式:

单节点 Colocate 模式:vLLM 与训练进程运行在同一节点,通过 vllm_mode="colocate" 启用。适用于 7B 以下小模型的快速实验,8 张 GPU 可配置为 1 张运行 vLLM、7 张运行训练。

多节点分离模式:1 个节点专门运行 vLLM 推理服务,N 个节点执行 GRPO 训练。这种架构充分利用了 vLLM 的连续批处理能力,同时避免推理负载干扰训练进程。项目提供了完整的 Slurm 启动脚本,支持数据并行(DP)和 Tensor 并行(TP)的组合配置。

多节点训练的配置实践

对于 32B 及以上规模的模型,多节点训练成为必需。Open-R1 的 Slurm 脚本抽象了常见的分布式配置模式:

# 2 节点配置:1 节点 vLLM + 1 节点训练
sbatch --nodes=2 slurm/train.slurm \
  --model Qwen2.5-1.5B-Instruct \
  --task grpo \
  --config demo \
  --accelerator zero2 \
  --dp 8 --tp 1

关键参数说明:

  • --dp:数据并行度,决定梯度同步的进程数
  • --tp:Tensor 并行度,用于单节点内模型分片
  • --accelerator:选择 ZeRO-2 或 ZeRO-3,前者适合激活值检查点,后者适合参数分片

对于代码生成任务的 RL 训练,项目还集成了外部代码执行沙箱。支持 E2B 和 Morph 两种云沙箱服务,通过 code reward function 对生成的代码进行单元测试验证。为避免 API 限流,建议在 CPU 节点部署 router 服务,集中管理沙箱请求队列。

数据集与评估体系

Open-R1 的另一重要贡献是开源了多个高质量数据集:

  • Mixture-of-Thoughts:35 万条多领域推理轨迹,用于 SFT 蒸馏
  • CodeForces-CoTs:1 万道竞赛编程题目及 10 万条 R1 生成的解法,支持代码 RL 训练
  • OpenR1-Math-220k:数学推理专用数据集

评估采用 LightEval 框架,覆盖 AIME 2024、MATH-500、GPQA Diamond 和 LiveCodeBench 四个基准。项目提供了与 DeepSeek 官方报告的对照表,验证了复现精度在 1-3 个标准差范围内。

工程落地的注意事项

在实际部署 Open-R1 pipeline 时,需关注以下几点:

环境版本锁定。vLLM 0.8.5.post1 与 PyTorch 2.6.0 存在严格版本绑定,CUDA 需为 12.4 版本。建议使用 uv 创建隔离环境,避免依赖冲突。

Chat Template 一致性。基础模型(如 Llama-3.2-1B)通常不含 chat template,需显式提供 Jinja2 模板文件。蒸馏模型使用的模板会隐藏 <think> 标签内容,需在 GRPO 配置中覆盖,否则会影响格式奖励函数的计算。

显存管理。32K 序列长度下,即使 7B 模型也需开启梯度检查点。可通过 Liger Kernel 进一步降低显存占用,但需验证数值稳定性。

数据去污染。项目提供了基于 8-gram 的 decontamination 脚本,用于移除与评测集重叠的训练样本,这对保证评估公平性至关重要。

结语

Open-R1 项目将 DeepSeek-R1 的训练流程从黑盒转化为可复现的开源方案。从 SFT 的数据准备到 GRPO 的分布式训练,每个环节都提供了可落地的配置参数和脚本模板。对于希望自建推理模型的团队而言,这不仅是一份技术文档,更是一个可直接 fork 的工程基线。


参考来源

ai-systems

内容声明:本文无广告投放、无付费植入。

如有事实性问题,欢迎发送勘误至 i@hotdrydog.com