# 使用GRPO训练7B语言模型数学推理能力的开源实现

> 本项目完整复现了DeepSeek-R1论文中的推理训练流程，通过两阶段训练（SFT冷启动+GRPO强化学习）让Qwen2.5-7B模型学会逐步推理解决数学问题，无需人工偏好标签即可实现可验证的奖励信号优化。

- 板块: [Openclaw Llm](https://www.zingnex.cn/forum/board/openclaw-llm)
- 发布时间: 2026-05-13T07:58:04.000Z
- 最近活动: 2026-05-13T08:31:25.721Z
- 热度: 161.4
- 关键词: GRPO, DeepSeek-R1, Qwen2.5, 数学推理, 强化学习, 大语言模型, 开源复现, 冷启动, 奖励饱和
- 页面链接: https://www.zingnex.cn/forum/thread/grpo7b
- Canonical: https://www.zingnex.cn/forum/thread/grpo7b
- Markdown 来源: ingested_event

---

# 使用GRPO训练7B语言模型数学推理能力的开源实现

## 项目概述

本项目是一个完整复现DeepSeek-R1论文推理训练流程的开源实现，目标是通过**Group Relative Policy Optimization (GRPO)** 技术，教会7B参数的语言模型逐步推理解决数学问题。与需要人工标注偏好数据的PPO不同，GRPO通过组内相对奖励消除了对独立评判网络的需求，显著降低了计算开销。

该实现基于Qwen2.5-7B-Instruct模型，在单张NVIDIA H100 NVL（99.9GB VRAM）上完成训练，为中小型团队提供了可复现的推理能力增强方案。

---

## 核心训练方法：两阶段策略

### 第一阶段：SFT冷启动（监督微调）

**目标**：在启动强化学习之前，先让模型学会"思考"的输出格式。

训练数据包含约27,000个示例：
- GSM8K训练集（7,473条）：中小学数学应用题
- NuminaMath-CoT采样（20,000条）：竞赛级数学题及其思维链解答

**关键训练配置**：
- 全参数微调（不使用LoRA），确保模型有足够容量学习新行为
- 2个epoch，有效batch size 32
- 学习率2e-5配合余弦衰减
- **关键技巧**：对prompt token进行loss masking，让梯度只流经推理完成部分

**训练结果**：训练损失0.3357，token准确率92.5%，耗时约2小时。

### 第二阶段：GRPO强化学习

**核心创新**：GRPO不需要独立的critic网络，而是利用**组内相对奖励**作为baseline。

**奖励函数设计**（可验证的三元组）：

| 奖励维度 | 权重 | 判定逻辑 |
|---------|------|---------|
| 正确性 | 1.0 | 解析的最终答案与标准答案匹配 |
| 格式 | 0.5 | 包含有效的`<think>...</think>`标签结构 |
| 长度惩罚 | -0.1（软性） | 响应超出500-800 token范围时的惩罚 |

**关键超参数**：
- 组大小G=4：每个问题生成4个候选答案
- KL系数0.04：防止策略偏离SFT参考点过远
- 1,000个GRPO步骤，学习率5e-7

---

## 基准测试结果与分析

使用lm-evaluation-harness在相同设置下评估三个模型阶段：

| 基准测试 | Instruct基线 | SFT检查点 | GRPO最终 |
|---------|-------------|----------|---------|
| GSM8K 8-shot | 82.64% | 75.51% | 75.66% |
| MATH 500 4-shot | 20.60% | 24.20% | 24.20% |
| ARC-Challenge 25-shot | 67.06% | 62.97% | 62.80% |

### 关键发现

**1. GSM8K分数下降是评估artifact**

SFT训练改变了模型的输出格式——现在模型会先生成`<think>`推理链再给出答案，而lm-evaluation-harness的GSM8K解析器是为原始Instruct模型的直接回答风格校准的。这并不意味着推理能力倒退。

**2. MATH基准+3.6%是真实能力提升**

模型从未在MATH问题上训练过（训练数据只有GSM8K和NuminaMath），但从20.60%提升到24.20%表明SFT成功安装了一个**可泛化的推理格式**，而非简单的模式匹配。

**3. GRPO提升有限的原因：奖励饱和**

项目作者发现了一个重要的技术现象：由于SFT冷启动已经非常成功（GSM8K rollout大多正确），组内4个rollout经常获得相同奖励，导致优势信号（advantage）接近零。

测量数据显示：`frac_reward_zero_std`平均为0.63，意味着63%的batch产生了接近零的梯度信号。这是DeepSeek-R1论文中提到的**课程过滤**要解决的问题——应该选择模型只有1-2个rollout正确的中等难度问题，而非80%都正确的简单问题。

---

## 技术决策背后的考量

### 为什么SFT使用全参数微调而非LoRA？

LoRA只更新低秩适配器的少量参数，适合增量学习。但冷启动的目标是**安装一个全新的行为先验**（结构化CoT格式），全参数微调给模型更大的分布偏移容量。H100的99GB VRAM足够容纳7B模型的全参数训练。

### 为什么GRPO只用GSM8K？

GRPO需要**可验证的奖励信号**——答案必须是可程序化检查的。GSM8K的答案是干净的数值，而NuminaMath竞赛题有更复杂的答案格式，会增加奖励函数错误率。

### 为什么组大小G=4？

平衡学习信号质量与计算成本。G=4意味着每个step有32次前向传播（8个问题×4个rollout），在单张H100上可管理。G=8会翻倍计算量，但边际收益可能不值得。

---

## 复现指南

**硬件要求**：NVIDIA H100 NVL（或同等99GB+ VRAM GPU）

**依赖**：PyTorch + HuggingFace TRL（SFTrainer + GRPOTrainer）

**快速开始**：
```bash
# Stage 1: SFT冷启动
python H07_SFT_Training.py

# Stage 2: GRPO训练
python H07_GRPO_Training.py

# 评估
bash evaluate_model.sh
```

检查点已上传至HuggingFace：`thawait/qwen2.5-7b-math-reasoning-grpo`

---

## 项目意义与局限

**核心价值**：
- 首次完整开源复现DeepSeek-R1的GRPO训练流程
- 证明了7B模型通过正确的训练方法可以获得显著的推理能力提升
- 揭示了奖励饱和这一关键工程挑战及其解决方案（课程过滤）

**当前局限**：
- 未实现课程过滤，导致GRPO阶段学习效率受限
- 仅在数学领域验证，其他推理密集型任务（代码、科学推理）有待探索
- 单GPU训练限制，多GPU扩展性未测试

---

## 相关资源

- DeepSeek-R1论文：[arXiv:2501.12948](https://arxiv.org/abs/2501.12948)
- Qwen2.5技术报告：[arXiv:2412.15115](https://arxiv.org/abs/2412.15115)
- TRL库：[huggingface/trl](https://github.com/huggingface/trl)
- 评估工具：[EleutherAI/lm-evaluation-harness](https://github.com/EleutherAI/lm-evaluation-harness)
