【LLM】R1复现项目(SimpleRL、OpenR1、LogitRL、TinyZero)持续更新
note
(1)未来的工作需亟待解决:
- 支持大规模 RL 训练(PPO、GRPO 等)的开源基础框架
- 用于稳定训练的 GRPO 训练超参的自动化调优
- RL 训练数据的配比(难度、领域、任务等)
- 基于 Instruct 模型训练 R1 时,高质量 long CoT 的数据获取
- 合适的惩罚函数设计以保证 CoT 思考链质量不退化
(2)应用在业务落地时,需要考虑:
- 模型在给定的 prompt 下,结合预训练的基本知识能否正确给出正确的推理结果。任何业务中的「潜规则」都需要显式地定义在 prompt 中,并尽可能避免与预训练知识的冲突。
- 混合通用数据、业务数据与数学、代码类领域任务下的 long CoT SFT 数据来给模型先打下一个坚实的思维链范式基础,这有利于提升 RL 训练时的稳定性。
(3)RL 基本设置:Reward 函数定义、Penalty 函数定义 (Optional)、优化方式、训练平台
注:复现工作均在 TIONE 平台上使用 1 台 ~ 4 台 GPUs 进行。上述几个开源复现工作中,只有 OpenRLHF 支持多机多卡训练。其余的仅支持单机多卡训练,且往往存在 GPU 数目的限制。在训练 TinyZero 和 LogitRL 时,就遇到了扩展 GPUs 后训练卡在初始化的问题。大部分项目使用 4 卡、8 卡、32 卡(SimpleRL)复现耗时在 2~3 天左右。
(4)总结:
1)DeepSeek R1 的 format 约束主要以"{think process}{answer}"的形式实现,而开源方案大多采用了 "{think process}{answer}" 的形式。从优化角度而言两者的差异不大。在构建基于正则表达式来判断模型输出是否存在规范格式时,往往采用的是较为严格的 r"^.?\s.*?$" 来约束开头与结尾。针对部分数学类问题,format reward 考虑答案是否出现了 \box{} 框。
2)accuracy reward:各个工作的实现方式基本沿用了过往强化学习算法中 ORM(outcome reward model) 里的代码。此处的难点有两个:
- 需要编写大量的后处理代码,从模型的输出结果中能够成功解析出最终的结果;
- 需要考虑判断相等的条件(数值、字符串等),并针对不同的领域数据设计不同的 reward 方式。
对于前者而言,对于某些要求格式化输出类问题,需要正确匹配出目标 kv 对。对于后者而言,判断 prediction 和 gt 是否相等并返回 reward 的定义也有所讲究。最严格的完全一致匹配只会区分正确 - 错误两种情况,在某些任务上可能会影响训练收敛的速度。
文章目录
- note
- 一、R1复现项目
- 二、具体项目
- 预算上的纯RL:TinyZero
- Open R1: HuggingFace 复现 DeepSeek-R1 全流程
- 从头开始构建 DeepSeek R1
- Open-Thoughts: UC 伯克利复现 DeepSeek-Distill-Qwen-32B
- LIMO:少即是多
- DeepScaleR:完美复现 DeepSeek-R1 强化学习效果
- Reference
一、R1复现项目
| Github | 训练集 | 测试集 | 模型 | RL 框架 | 优点 | 缺点 | 易上手评级 |
|---|---|---|---|---|---|---|---|
| simpleRL-reason | MATH 8K(level 3-5), AIME 2024, MATH 500, AMC Minerva Math, OlympiadBench | AIME 2024, MATH 500, AMC | Qwen2.5-7B | OpenRLHF | 1)实现简单 2)系统工作支持 PRM/ORM/R1 等 3)RL 框架支持多机多卡 | 1)RL 算法暂不支持 GRPO | ⭐️⭐️⭐️ |
| open-r1 | DigitalLearningGmbH/MATH-lighteval, AI-MO/NuminaMath-TIR | AIME 2024, MATH-500, GPQA Diamond | DeepSeek-R1-Distill-Qwen-7B, Qwen2.5-Math-7B, Qwen2.5-1.5B-Instruct | TRL | 1)实现简单 2)全流程支持 R1 系列工作(sft/rl/sft+rl) | 1)多机训练暂不支持 | ⭐️⭐️ |
| unsloth | GSM8K | GSM8K[test] | LLAMA 3.1(8B), Phi4, Qwen2.5-1.5B | TRL | 1)官方声称最接近 R1 的复现方式 2)接口简单 | 1)多卡需付费 | ⭐️ |
| logit-RL | KK 老实人与骗子 lv3&5 | KK 老实人与骗子 | Qwen2.5-7B-Instruct | veRL | 1)RL 框架支持多种算法 2)复现率较高 | 1)多机训练暂不支持 | ⭐️⭐️⭐️ |
| tinyzero | Countdown | Countdown | Qwen2.5-3B | veRL | 1)RL 框架支持多种算法 2)复现率较高 | 1)多机训练暂不支持 | ⭐️⭐️⭐️ |
| oatzero | 8K MATH, MATH 500 | MATH 500 | Qwen2.5-Math-7B/1.5B, Qwen2.5-7B/3B, Microsoft-Rho-Math-7B, DeepSeek-Math-7B-Base | OAT | 1)统一集成了 tinyzero 等代码 | 1)多机训练暂不支持 | ⭐️⭐️ |
| demystify | MATH, WebInstruct, MATH-500, TheoremQA, MLU-Pro-1k | MATH 500 | llama3.1-8B, Qwen2.5-Math-7B | OpenRLHF | 1)实现简单 2)论文本身较扎实(训练 & 验证充分) | 1)实验 setting 与 R1 稍有区别 | ⭐️⭐️ |

二、具体项目
预算上的纯RL:TinyZero
Sky-T1专注于模型蒸馏,也有在“纯RL”领域的一些工作-TinyZero,一个3B参数模型,复制了DeepSeek-R1-Zero的方法(训练成本不到30美元)。
即使只有3B参数,TinyZero也表现出一些新兴的自我验证能力,这支持了“推理可以通过纯RL在小模型中出现”的观点。
RL 训练时设置严格的格式约束,通常以 system prompt 的形式出现在训练数据中。
system prompt(snippet):
Show your work in <think> </think> tags. And return the final answer in <answer> </answer> tags, for example <answer> (1 + 2) / 3 </answer>.
reward 函数定义(snippet):
answer_pattern = r'<answer>(.*?)</answer>'
match = re.finditer(answer_pattern, solution_str)
matches = list(match)
if matches:final_answer = matches[-1].group(1).strip()
else:final_answer = None
return final_answer
考虑到答案校验存在不同的类型(字符串通常使用 exact_match,浮点数允许给定精度下的误差),不同开源项目也使用了适应于训练集的答案校验函数。
accuracy reward 定义(snippet):
# Evaluate equation
try:result = evaluate_equation(equation)if result is None:if do_print:print(f"Could not evaluate equation")return format_scoreif abs(result - target) < 1e-5: # Account for floating point precisionif do_print:print(f"Correct equation: {equation} = {result}")return scoreelse:if do_print:print(f"Wrong result: equation = {result}, target = {target}")return format_score
......
总结:
(1)DeepSeek R1 的 format 约束主要以"{think process}{answer}"的形式实现,而开源方案大多采用了 "{think process}{answer}" 的形式。从优化角度而言两者的差异不大。在构建基于正则表达式来判断模型输出是否存在规范格式时,往往采用的是较为严格的 r"^.?\s.*?$" 来约束开头与结尾。针对部分数学类问题,format reward 考虑答案是否出现了 \box{} 框。
(2)accuracy reward:各个工作的实现方式基本沿用了过往强化学习算法中 ORM 里的代码。此处的难点有两个:
- 1)需要编写大量的后处理代码,从模型的输出结果中能够成功解析出最终的结果;
- 2)需要考虑判断相等的条件(数值、字符串等),并针对不同的领域数据设计不同的 reward 方式。
对于前者而言,对于某些要求格式化输出类问题,需要正确匹配出目标 kv 对。对于后者而言,判断 prediction 和 gt 是否相等并返回 reward 的定义也有所讲究。最严格的完全一致匹配只会区分正确 - 错误两种情况,在某些任务上可能会影响训练收敛的速度。
Open R1: HuggingFace 复现 DeepSeek-R1 全流程
HuggingFace 表示,将以 DeepSeek-R1 的技术报告为指导,分 3 个步骤完成这个项目:
• step 1:从 DeepSeek-R1 中蒸馏高质量数据,复现 R1-Distill 模型。
• step 2:复现通过纯强化学习训练 R1-Zero 的过程,包括如何生成推理数据集
• step 3:复现训练 R1 的完整 pipeline,包括两阶段 SFT、两阶段 RL。

从头开始构建 DeepSeek R1
Deepseek讲解,一个讲解如何从头开始构建 DeepSeek R1的项目
https://github.com/FareedKhan-dev/train-deepseek-r1
开发者Fareed Khan’s 用手绘流程图以及代码的方式,逐步讲解如何按照 deepseek 技术报告构建一个可以在本地运行的小型基础模型。非常详细。
该项目选择了一个较小的基础模型 Qwen/Qwen2.5–0.5B-Instruct 作为起点。
- 通过 GRPO 算法进行强化学习,设计了多种奖励函数,如准确度奖励、格式奖励、推理步骤奖励、余弦缩放奖励和重复惩罚奖励,以鼓励模型进行正确和清晰的推理过程。
- 在此基础上进行了监督微调(SFT),使用了 Bespoke-Stratos-17k 数据集,通过少样本提示、直接提示和后处理精炼等方法,进一步提升了模型的推理能力和输出质量。
- 最后,通过拒绝采样筛选出高质量的推理数据,进行了第二阶段的 SFT 训练,以及针对实用性和无害性进行了奖励优化,最终完成了 DeepSeek R1 模型的构建。
Open-Thoughts: UC 伯克利复现 DeepSeek-Distill-Qwen-32B
斯坦福、UC伯克利等多机构联手发布了开源模型:OpenThinker-32B,性能直逼 DeepSeek-Distill-Qwen-32B。
仅使用了 114k(OpenThoughts-114k) 数据(DeepSeek-Distill-Qwen-32B 的1/8),就与同尺寸 DeepSeek-Distill-Qwen-32B 打成平手。团队发现,通过采用经 DeepSeek-R1 验证过的大规模优质数据集,就能够成功训练出达到 SOTA 水平的推理模型。具体实现方法包括扩大数据量、严格验证推理过程以及扩大模型规模。
LIMO:少即是多
上交大的最新研究成果却给出了一个另外答案:仅需 817 条精心策划的样本,便能让模型在数学竞赛级别的难题上超越众多现有的顶尖模型。这一发现不仅颠覆了传统认知,更揭示了一个我们可能一直忽视的事实:大模型的数学潜能或许始终存在,关键在于如何有效激发它。
LIMO(Less Is More for Reasoning)仅用 817 条精心设计的训练样本,通过简单的 SFT,就全面超越了那些使用几十万数据训练的主流模型,如 o1-preview 和 QwQ。
在 AIME24 评测中,LIMO 的准确率从传统方法(以 Numina-Math 为例)的 6.5% 飙升至 57.1%。而在 10 个不同的基准测试上,它实现了 40.5% 的绝对性能提升,超越了那些使用 100 倍数据训练的模型。这一突破证明了高质量、小规模的数据集,远比低效的海量数据训练更能激发大模型的推理潜能。
DeepScaleR:完美复现 DeepSeek-R1 强化学习效果
UC 伯克利团队宣布,他们仅以4500美元的成本,通过简单的强化学习(RL),就成功复现并训练出了 DeepScaleR-1.5B-Preview 模型,直接超越了 o1-preview。
UC伯克利的研究团队以 Deepseek-R1-Distilled-Qwen-1.5B 为基础,通过强化学习(RL),在 40,000 个高质量数学问题上进行训练,使用了 3800 A100 小时(4500美元),训练出了 DeepScaleR-1.5B-Preview 模型。在多个竞赛级数学基准测试中优于 OpenAI 的 o1-preview。
Reference
[1] DeepSeek R1范式复现笔记. 腾讯工程
[2] DeepSeek R1 最新复现项目汇总
[3] simpleRL-reason:GitHub - hkust - nlp/simpleRL - reason: This is a replicate of DeepSeek - R1 - Zero and DeepSeek - R1 training on small models with limited data
[4] open-r1:GitHub - huggingface/open - r1: Fully open reproduction of DeepSeek - R1
[5] [logit - RL](https://github.com/Unakar/Logic - RL):GitHub - Unakar/Logic - RL: Reproduce R1 Zero on Logic Puzzle
[6] [tinyzero](https://github.com/Jiayi - Pan/TinyZero):GitHub - Jiayi - Pan/TinyZero: Clean, minimal, accessible reproduction of DeepSeek R1 - Zero
[7] [demystify long CoT](https://github.com/eddycmu/demystify - long - cot):GitHub - eddycmu/demystify - long - cot
[8] deepscaleR:Notion – The all - in - one workspace for your notes, tasks, wikis, and databases.
[1] Bespoke-Stratos-17k:https://huggingface.co/datasets/bespokelabs/Bespoke-Stratos-17k
[2]Bespoke-Stratos-32B:https://huggingface.co/bespokelabs/Bespoke-Stratos-32B
[3]Bespoke-Stratos-7B:https://huggingface.co/bespokelabs/Bespoke-Stratos-7B
[4]BAAI/TACO:https://huggingface.co/datasets/BAAI/TACO
[5]codeparrot/apps:https://huggingface.co/datasets/codeparrot/apps
[6]deepmind/code_contests:https://huggingface.co/datasets/deepmind/code_contests
[7]MatrixStudio/Codeforces-Python-Submissions:https://huggingface.co/datasets/MatrixStudio/Codeforces-Python-Submissions
[8]AI-MO/NuminaMath-CoT:https://huggingface.co/datasets/AI-MO/NuminaMath-CoT
[9]camel-ai/chemistry:https://huggingface.co/datasets/camel-ai/chemistry
[10]camel-ai/biology:https://huggingface.co/datasets/camel-ai/biology
[11]camel-ai/physics:https://huggingface.co/datasets/camel-ai/physics
[12]INK-USC/riddle_sense:https://huggingface.co/datasets/INK-USC/riddle_sense
相关文章:
【LLM】R1复现项目(SimpleRL、OpenR1、LogitRL、TinyZero)持续更新
note (1)未来的工作需亟待解决: 支持大规模 RL 训练(PPO、GRPO 等)的开源基础框架用于稳定训练的 GRPO 训练超参的自动化调优RL 训练数据的配比(难度、领域、任务等)基于 Instruct 模型训练 R…...
Linux 内核网络设备驱动编程:私有协议支持
一、struct net_device的通用性与私有协议的使用 struct net_device是Linux内核中用于描述网络设备的核心数据结构,它不仅限于TCP/IP协议,还可以用于支持各种类型的网络协议,包括私有协议。其原因如下: 协议无关性:struct net_device的设计是通用的,它本身并不依赖于任何…...
20241130 RocketMQ本机安装与SpringBoot整合
目录 一、RocketMQ简介 ???1.1、核心概念 ???1.2、应用场景 ???1.3、架构设计 2、RocketMQ Server安装 3、RocketMQ可视化控制台安装与使用 4、SpringBoot整合RocketMQ实现消息发送和接收? ? ? ? ? 4.1、添加maven依赖 ???4.2、yaml配置 ???4.3、…...
FFmpeg进化论:从av_register_all手动注册到编译期自动加载的技术跃迁
介绍 音视频开发都知道 FFmpeg,因此对 av_register_all 这个 API 都很熟悉,但ffmpeg 4.0 版本开始就已经废弃了,是旧版本中用于全局初始化的重要接口。 基本功能 核心作用:av_register_all() 用于注册所有封装器(muxer)、解封装器(demuxer)和协议处理器(protocol),…...
Http升级为Https - 开发/测试服环境
1.应用场景 主要用于开发/测试服环境将http升级为https, 防止前端web(浏览器)出现Mixed Content报错; 2.学习/操作 1.文档阅读 deepseek 问答; 2.整理输出 报错信息: Mixed Content: The page at <URL> was loaded over HTTPS, but requested an insecure XMLHttpRequ…...
C语言预编译
大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言正文一、预处理的作用与流程…...
算法刷题-字符串-151.反转单词
题目 给一串字符串,里面有若干单词,以空格界定单词的结束,翻转其中的单词 输入:s " hello world " 输出:“world hello” 需要注意的是,给定的字符串可能存在头空格、尾空格以及中间的空格数量…...
单片机裸机编程:状态机与其他高效编程框架
在单片机裸机编程中,状态机是一种非常强大的工具,能够有效管理复杂的逻辑和任务切换。除了状态机,还有其他几种编程模式可以在不使用 RTOS 的情况下实现高效的程序设计。以下是一些常见的方法: 1. 状态机编程 状态机通过定义系统…...
图表控件Aspose.Diagram入门教程:使用 Python 将 VSDX 转换为 PDF
将VSDX转换为PDF可让用户轻松共享图表。PDF 文件保留原始文档的布局和设计。它们广泛用于演示文稿、报告和文档。在这篇博文中,我们将探讨如何在 Python 中将 VSDX 转换为 PDF。 本文涵盖以下主题: Python VSDX 到 PDF 转换器库使用 Python 将 VSDX 转…...
DPVS-1:编译安装DPVS (ubuntu22.04)
操作系统 rootubuntu22:~# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.3 LTS Release: 22.04 Codename: jammy rootubuntu22:~# 前置软件准备 apt install git apt install meson apt install gcc ap…...
即将发布书籍 - Yocto项目实战教程:高效定制嵌入式Linux系统
以下这本书《Yocto项目实战教程:高效定制嵌入式Linux系统》即将发布,现在请哪位大佬出山写一个序或者推荐,有兴趣的大佬,请联系我! Git仓库地址: https://github.com/jerrysundev/Yocto-Project-Book.git …...
Git 常用指令及其说明
配置相关 # 配置全局用户名 git config --global user.name "YourUsername"# 配置全局邮箱 git config --global user.email "your.emailexample.com"说明:这两条命令用于设置 Git 全局的用户名和邮箱,在提交代码时,这些…...
nginx代理后502
直接访问 https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions正常 使用nginx代理后访问出现502 server {listen 9999;server_name 172.21.3.78;location ^~ /compatible-mode {proxy_pass https://dashscope.aliyuncs.com;}location / {proxy_pass…...
大模型WebUI:Gradio全解12——LangChain原理及其agent构建Gradio(1)
大模型WebUI:Gradio全解12——LangChain原理及其agent构建Gradio(1) 前言本篇摘要12. LangChain原理及其agent构建Gradio12.1 LangChain概念及优势分析12.1.1 概念12.1.2 标准化组件接口1. 示例:聊天模型2. 示例:检索器12.1.3 编排组件12.1.4 便于部署12.1.5 可观测性和评…...
【Unity】鱼群效果模拟
鱼群效果模拟 文章目录 鱼群效果模拟Boid算法实现方式version1_CPUversion2_GPUversion3_Multilaterationversion4_Bitonic_Sorting (GPU友好)version5_Skinning (TODO) 细节项优化项参考链接 Boid算法 Boid算法是一种模拟群体行…...
PHP入门基础学习五(函数1)
函数 一、概念 1、什么是函数? 函数:封装一段用于完成特定功能的代码 当使用一个函数时,只需关心函数的参数和返回值,就可以完成一个特定的功能 2、php中的函数 PHP 的真正威力源自于它的函数,PHP 中提供了超过 1000 个内建的函数。 php函数分为: 系统内部函数和自…...
微信小程序 - 页面跳转(wx.navigateTo、wx.redirectTo、wx.switchTab、wx.reLaunch)
API 跳转 1、wx.navigateTo (1)基本介绍 功能:保留当前页面,跳转到应用内的某个页面,使用该方法跳转后可以通过返回按钮返回到原页面 使用场景:适用于需要保留当前页面状态,后续还需返回的情…...
Typora的Github主题美化
[!note] Typora的Github主题进行一些自己喜欢的修改,主要包括:字体、代码块、表格样式 美化前: 美化后: 一、字体更换 之前便看上了「中文网字计划」的「朱雀仿宋」字体,于是一直想更换字体,奈何自己拖延症…...
2.3 变量
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 变量是用来存放某个值的数据,它可以表示一个数字、一个字符串、一个结构、一个类等。变量包含名称、类型和值。在代码中…...
Docker:Docker从入门到精通(一)- Docker简介
一、前言 通过本专栏的学习,我们将了解 1. 掌握Docker基础知识,能够理解Docker镜像与容器的概念 2. 完成Docker安装与启动 3. 掌握Docker镜像与容器相关命令 4. 掌握Tomcat Nginx 等软件的常用应用的安装 5. 掌握docker迁移与备份相…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?
FTP(File Transfer Protocol)本身是一个基于 TCP 的协议,理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况,主要原因包括: ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...
加密通信 + 行为分析:运营商行业安全防御体系重构
在数字经济蓬勃发展的时代,运营商作为信息通信网络的核心枢纽,承载着海量用户数据与关键业务传输,其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级,传统安全防护体系逐渐暴露出局限性&a…...
