Open R1 项目进展第一期

news/2025/3/31 22:08:29/文章来源:https://www.cnblogs.com/huggingface/p/18799105

DeepSeek R1 发布已经两周了,而我们启动 open-r1 项目——试图补齐它缺失的训练流程和合成数据——也才过了一周。这篇文章简单聊聊:

  • Open-R1 在模仿 DeepSeek-R1 流程和数据方面的进展
  • 我们对 DeepSeek-R1 的认识和相关讨论
  • DeepSeek-R1 发布后社区搞出来的有趣项目

这既是项目的最新动态,也是一些关于 DeepSeek-R1 的有趣资料合集。

一周后的进展

先来看看 Open-R1 这周干了啥。我们一周前才开始这个项目,经过团队和社区的小伙伴们一起努力,已经有点成果可以分享了。

评估

要模仿人家,第一步得确认我们能不能复现 DeepSeek 的成绩。我们在 MATH-500 基准测试上试了试,果然能跟 DeepSeek 公布的数据对上号:

模型 MATH-500 (我们测的) MATH-500 (DeepSeek 公布的)
DeepSeek-R1-Distill-Qwen-1.5B 81.6 83.9
DeepSeek-R1-Distill-Qwen-7B 91.8 92.8
DeepSeek-R1-Distill-Qwen-14B 94.2 93.9
DeepSeek-R1-Distill-Qwen-32B 95.0 94.3
DeepSeek-R1-Distill-Llama-8B 85.8 89.1
DeepSeek-R1-Distill-Llama-70B 93.4 94.5

想知道怎么测的?去 open-r1 仓库 看说明吧。

我们还发现,DeepSeek 模型生成的回答特别长,评估起来都费劲。在 OpenThoughts 数据集里,DeepSeek-R1 的回答平均有 6000 个 token,有些甚至超过 20000 个 token。啥概念呢?一页书大概 500 个单词,一个单词可能由 1 个及以上的 token 组成,所以很多回答能写满 10 多页!(来源: https://x.com/gui_penedo/status/1884953463051649052)

R1 回答长度分布

回答这么长,给后面用 GPRO 训练带来了很大的挑战。想要生成超长内容,需要很多的 GPU 显存来存储梯度和激活值。

为了让大家都能看到进展,我们搞了个 open-r1 评估排行榜,社区可以在这里随时关注我们的复现情况 (space 在 这里):

训练流程

Open R1 发布后,GRPO (分组相对策略优化) 被集成到了最新版 TRL (0.14 版) 中。有了这个,任何模型都能用一个或多个奖励函数来训练。GRPO 还能跟 DeepSpeed ZeRO 1/2/3 配合,实现多 GPU 并行训练,还用 vLLM 加速生成——毕竟在线训练最大的瓶颈就是生成速度。

from datasets import load_dataset
from trl import GRPOConfig, GRPOTrainerdataset = load_dataset("trl-lib/tldr", split="train")# 简单奖励: 回答接近 20 个字符的给高分
def reward_len(completions, **kwargs):return [-abs(20 - len(completion)) for completion in completions]training_args = GRPOConfig(output_dir="Qwen2-0.5B-GRPO", logging_steps=10)
trainer = GRPOTrainer(model="Qwen/Qwen2-0.5B-Instruct",reward_funcs=reward_len,args=training_args,train_dataset=dataset,
)
trainer.train()

不过现在内存用量还是有点高,我们正在想办法优化。

合成数据生成

R1 报告里最让人兴奋的是,主模型能生成合成推理过程,小模型用这些数据微调后效果也能跟主模型差不多。所以我们也想能够复现这个合成推理数据集,让大家都能拿去调模型。

R1 这种大模型,难点在于怎么高效快速地生成数据。我们试了一周,调了各种配置。

一开始用两个 8xH100 节点跑模型,用 vLLM 当推理服务器。但效果不好,吞吐量低,只能同时处理 8 个请求,GPU 的 KV 缓存很快就满了。缓存一满,请求就被打断,如果设置了 PreemptionMode.RECOMPUTE ,就得等显存空出来再重跑。

后来我们换成 4 个 8xH100 节点,总共 32 个 GPU。这样显存够用,能同时跑 32 个请求,几乎不会因为缓存满而重新排队。

一开始我们批量发请求给 vLLM,但发现批量里慢的会拖后腿,GPU 利用率忽高忽低。新一批次得等上一批全跑完才开始。后来改成流式处理,GPU 利用率稳定多了:

流式处理效果图

改代码也不难。原来的批量推理代码是:

# 每批 500 个请求
for batch in batch_generator(dataset, bs=500):active_tasks = []for row in batch:task = asyncio.create_task(send_requests(row))active_tasks.add(task)if active_tasks:await asyncio.gather(*active_tasks)

现在流式处理的代码是:

active_tasks = []
for row in dataset:# 活跃请求控制在 500 个以下while len(active_tasks) >= 500:done, active_tasks = await asyncio.wait(active_tasks,return_when=asyncio.FIRST_COMPLETED)task = asyncio.create_task(send_requests(row))active_tasks.add(task)# 等所有任务跑完
if active_tasks:await asyncio.gather(*active_tasks)

现在生成速度挺稳定,但我们还在琢磨,比如长请求被打断时,换用 CPU 缓存会不会更好。

想看现在的推理代码?点 这里。

推广

open-r1 火了,连媒体都关注,过去一周团队成员频频上新闻:

  • Lewis 在 CNN 直播了!https://x.com/_lewtun/status/1884377909038833894?s=46
  • Thom 上彭博社: https://x.com/Thom_Wolf/status/1884353433865777520
  • Leandro 在 NPR《金钱星球》聊了会 (21 分钟左右): https://www.npr.org/2024/11/29/1215793948/deepseek-ai-china-us-semiconductors-stock-nvidia

还有一堆报道: 华盛顿邮报、金融时报、金融时报、财富、财富、The Verge、金融评论、Tech Crunch、时代周报、金融时报、纽约时报、华尔街日报、欧洲新闻、巴伦周刊、纽约时报、Vox、自然、瑞士资讯、商报、商业内幕、IEEE Spectrum、MIT 技术评论、世界报。

DeepSeek-R1 给我们带来了什么启发?

虽然大家还在研究 DeepSeek-R1 的成果和报告,但这款模型在发布短短两周后,就已经火遍了大街小巷,吸引了无数目光。

R1 引发了哪些反响?

发布后的第一周还算风平浪静,但到了第二周,市场突然热闹起来,各大 AI 研究机构纷纷发表看法:

  • 股市周一有点慌乱,但后面几天稳住了,甚至还有所回升: 链接
  • OpenAI 的老板 Sam Altman 给 DeepSeek 点了赞,还透露他们会加快脚步,很快推出一些新东西: 链接
  • OpenAI 的研究大牛 Mark Chen 说,DeepSeek 的思路跟他们 o1 的想法不谋而合: 链接
  • Anthropic 的老板 Dario Amodei 借机强调出口限制,勾勒出一个要么两强争霸、要么一家独大的未来: 链接

与此同时,不少公司也忙着把 DeepSeek 模型塞进各种平台 (以下只是部分例子):

  • Dell: 联手 Hugging Face,Dell 的创始人兼老板 Michael Dell 推出了一套本地运行 DeepSeek-R1 的方案: 链接
  • AWS: 亚马逊的老大 Andy Jassy 宣布 DeepSeek-R1 已经能在 Amazon BedRock 和 SageMaker 上玩起来了: 链接
  • Hyperbolic AI: 链接
  • Together AI: 链接
  • Fireworks AI: 链接

DeepSeek V3 的训练成本有多夸张?

大家对 V3 和 R1 的训练费用特别好奇。虽然具体数字可能没那么关键,但很多人还是拿计算器粗略估了估,结果发现这些数字大体靠谱。看看这些讨论就知道了:

  • 马里兰大学的 Tom Goldstein 教授: 链接
  • MatX 的创始人 Reiner Pope 把 Llama3 和 DeepSeek V3 摆在一起比了比: 链接
  • OpenAI 前员工 Lukas Beyer (曾混迹 Google Brain 和 DeepMind),聊了聊 MFU 的来头: 链接
  • SemiAnalysis 还搞了份报告,猜想 DeepSeek 背后有哪些硬件支持: 链接

不少团队正在努力复现训练过程,估计很快就能知道这个模型的训练效率到底有多牛。

训练数据那些事儿

上周有人猜想 DeepSeek 可能偷偷用了 OpenAI 的数据来训练自己的模型,比如《金融时报》就报道了这事儿。不过现在还不确定这些说法会闹出什么结果。

开源社区也很热闹

围绕 DeepSeek-R1,开源社区简直火爆得不行,好多人都在基于这个模型搞出各种有意思的项目。

有哪些好玩的项目?

有些项目试着以较小的规模复制基本的学习机制,让你自己在家就能试试:

  • Will Brown 就展示了一个方法,用 TRL 里的 GRPO 训练器和 Llama 1B 模型,弄出一个简单的学习曲线。
  • TinyZero 更牛,花不到 30 美元,用一个 3B 的基础模型,就能让你自己体验到那种 “哦,原来是这样!” 的瞬间。
  • Philipp Schmid 还写了个 Mini-R1教程,手把手教你怎么找到那个“顿悟”时刻。
  • 香港科技大学的研究员们尝试了更大的模型,他们在一篇 博客里 讲了怎么用 7B 的数学模型搞出推理能力。
  • Evolving LLM 实验室的人已经开始折腾 R1 的多模态版本了,地址在这儿: https://github.com/EvolvingLMMs-Lab/open-r1-multimodal。
  • Stepanov 则用 R1 从文本里提取图表,教程在这儿: https://huggingface.co/blog/Ihor/replicating-deepseek-r1-for-information-extraction。

TinyZero 的结果,模型的推理能力变强了

TinyZero 的结果,模型的推理能力变强了

香港科大的图表,随着训练越久,模型的推理过程越长

香港科大的图表,随着训练越久,模型的推理过程越长

数据集也忙得不亦乐乎

社区里好多人都在忙着搞 R1 相关的数据集,亮点有这些:

  • bespokelabs/Bespoke-Stratos-17k: 模仿 Berkeley Sky-T1 的数据流程,用 DeepSeek-R1 创建出一堆问题、推理过程和答案,然后拿去微调 7B 和 32B 的 Qwen 模型。
  • open-thoughts/OpenThoughts-114k: 一个超棒的合成推理数据集,有 114k 个例子,数学、科学、代码、谜题啥都有。Open Thoughts 工作的一部分
  • cognitivecomputations/dolphin-r1: 80 万样本的大集合,混了 DeepSeek-R1、Gemini flash 还有 Dolphin 聊天的 20 万样本,想帮着训练 R1 那样的模型。
  • ServiceNow-AI/R1-Distill-SFT: 现在有 1.7 万样本,ServiceNow 的语言模型团队做的,用于支持 Open-R1 计划。
  • NovaSky-AI/Sky-T1_data_17k: 用来训练 Sky-T1-32B-Preview 的数据,花不到 450 美元就搞定,详情看这篇 博客。
  • Magpie-Align/Magpie-Reasoning-V2-250K-CoT-Deepseek-R1-Llama-70B: 扩展了 Magpie 的方法,生成带推理的指令数据,挺有意思。

此列表仅涵盖 Hub 上的少量推理和问题解决相关数据集。我们期待可以看到社区在未来几周内能够构建其他哪些数据集。

下一步干啥?

我们这才刚起步呢,打算把训练流程弄完,在小模型上试试,再用放大版的推理流程搞出高质量的数据集。想帮忙的话,去 GitHub 上看 open-r1 仓库,或者关注 Hugging Face 的 open-r1 组织 吧!


英文原文: https://hf.co/blog/open-r1/update-1

原文作者: Leandro von Werra, Lewis Tunstall, Quentin Gallouédec, Guilherme Penedo, Edward Beeching, Anton Lozhkov, Brigitte Tousignant, Daniel van Strien

译者: yaoqih

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/907448.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GPU内核实现(下)

3. ELLPACK 内核 ELLPACK SpMV实现沿行并行计算。由于数据已被重新排序为以列为主存储,因此沿ELLPACK数据连续行的内存访问被合并。在下面显示的实现中,假设输入cols和vals数组已经转换为ELLPACK格式。这种格式的一个关键部分是元数据参数,即每行非零的最大数量,它也作为参…

GPU内核实现(上)

GPU内核实现 以下是基于CSR和ELLPACK格式的一些标准SpMV实现。 1. 标量CSR内核 GPU加速SpMV的最简单实现之一是标量内核方法。标量内核分配一个线程来处理SpMV中的每个稀疏点积。稀疏点积由每个线程以顺序方式处理,从而消除了对需要共享内存和/或扭曲级别降低的更高级技术的需…

稀疏矩阵向量乘法介绍

稀疏矩阵向量乘法介绍 稀疏矩阵向量乘法(SpMV)是每个隐式稀疏线性代数求解器。从简单的 Krylov 算法到 multigrid 的算法性能方法在很大程度上取决于 SpMV 实现的速度。因为 SpMV 具有非常低的算术强度,定义为浮点操作数,则实现速度受内存带宽。最大化内存带宽的实现将实现…

推荐关注《AI芯片开发核心技术详解》(1)、《智能汽车传感器:原理设计应用》(2)、《TVM编译器原理与实践》(3)、《LLVM编译器原理与实践》(4)

4本书推荐《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》由清华大学出版社资深编辑赵佳霓老师策划编辑的新书《AI芯片开发核心技术详解》已经出版,京东、淘宝天猫、当当等网上,相应陆陆续续可以购买。该…

Ollama+OneAPI+Open WebUI 搭建本地大模型

✅Ollama 安装 ✅极简安装 curl -fsSL https://ollama.com/install.sh | sh✅Docker 安装 ❗前提是已安装NVIDIA Container Toolkit # 拉取镜像 docker pull ollama/ollama# 启动容器 docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/o…

洛谷 P1216 [IOI 1994] 数字三角形 Number Triangles (记忆化搜索)

记忆化搜索思路:经典的DP题,看题解大佬个个是状态转移方程...我就写个记忆化搜索吧,这个数据量,只dfs暴搜是过不去的,写完记忆化之后发现有个测试点T了,下载了一波测试点数据,发现全是0,那么初始化dp数组为-1就好了。AcCode: #include<bits/stdc++.h> using nam…

【软件】在Windows和Ubuntu上使用TFTP和NFS

在Windows和Ubuntu上使用TFTP和NFS 零、介绍 最近在玩Linux开发板,在开发的过程中发现需要用到tftp和nfs来帮助传输文件,故此记录如何使用这两种软件。 TFTP(Trivial File Transfer Protocol) :是一种简化的文件传输协议,设计用于在客户端和服务器之间快速传输文件。轻量…

FastAPI Pydantic动态调整Schema

title: FastAPI Pydantic动态调整Schema date: 2025/3/29 updated: 2025/3/29 author: cmdragon excerpt: Pydantic动态Schema支持运行时字段调整和环境变量控制,实现毫秒级配置生效。通过字段级动态注入和条件必填验证,灵活适应业务需求。多租户系统采用条件字段过滤实现数…

【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(4)

比赛链接 本文发布于博客园,会跟随补题进度实时更新,若您在其他平台阅读到此文,请前往博客园获取更好的阅读体验。 跳转链接:https://www.cnblogs.com/TianTianChaoFangDe/p/18799072 开题 + 补题情况 和前三场比起来前期的签到题发挥稳定了许多,没有被卡很久,不过 1001 …

详细介绍Mybatis的缓存机制

一、缓存机制 1、缓存概述 缓存:缓存就是一块内存空间,保存临时数据 作用:将数据源(数据库或者文件)中的数据读取出来存放到缓存中,再次获取时直接从缓存中获取,可以减少和数据库交互的次数,提升程序的性能 缓存适用: 适用于缓存的:经常查询但不经常修改的,数据的正…

JS梳理之es6异步async await 协程 迭代器

es6异步 promise 链式调用 是对回调炼狱的一种优化 这次梳理一下async await async function fetchData() {const response = await fetch(https://api.example.com/data);const data = await response.json();return data; }// async 声明这是一个异步函数 // await 会暂停函数…

百度云同步盘 登录失败【%d】【155010】

前言全局说明百度云同步盘在2016前后升级了一次,修改了接口,但是没有发布完整安装包,当时可以自动升级来解决,后来自动升级失效,就之能手动打补丁来解决了。详细解决过程:https://www.cnblogs.com/wutou/p/18799043一、说明 1.1 环境: Windows 11 家庭版 23H2 22631.3737二…