Open-R1:第一次更新

DeepSeek R1 发布至今已两周,而我们启动 open-r1 项目以复现其缺失部分(即训练管道和合成数据)也已整整一周。本文总结了
- Open-R1 复现 DeepSeek-R1 管道和数据集的进展
- 我们对 DeepSeek-R1 及其相关讨论的了解
- 自 DeepSeek-R1 发布以来,社区构建的精彩项目
本文既是对项目进度的更新,也是 DeepSeek-R1 相关有趣资源的集合。
1 周后的进展
首先,让我们看看 Open-R1 的进展。我们在一周前启动了 Open-R1,各团队成员以及社区共同投入其中,我们有一些进展要向大家汇报。
评估
复现的第一步是验证我们能否达到相同的评估分数。我们已经能够复现 DeepSeek 在 MATH-500 基准测试中报告的结果。
模型 | MATH-500 (HF lighteval) | 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 的响应长度。
R1 响应的分布显示,它们的平均长度非常长,平均响应长度为 6,000 个 token,有些响应甚至超过 20,000 个 token。值得注意的是,平均一页包含约 500 个单词,一个 token 平均略少于一个单词,这意味着许多响应的长度超过 10 页。(来源:https://x.com/gui_penedo/status/1884953463051649052)
响应长度将使 GPRO 训练变得具有挑战性,因为我们将不得不生成长篇补全,这需要很大一部分 GPU 内存来存储激活/梯度以进行优化步骤。
为了公开分享我们的进展,我们创建了一个 open-r1 评估排行榜,以便社区可以关注我们的复现工作(空间位于此处)
训练管道
Open R1 发布后,GRPO(分组相对策略优化)已集成到最新的 TRL 版本(0.14 版)中。此集成支持使用一个或多个奖励函数或模型训练任何模型。GRPO 实现与 DeepSpeed ZeRO 1/2/3 集成,用于可扩展到多个 GPU 的并行训练,并使用 vLLM 进行快速生成,这是在线训练方法中的主要瓶颈。
from datasets import load_dataset
from trl import GRPOConfig, GRPOTrainer
dataset = load_dataset("trl-lib/tldr", split="train")
# Dummy reward: rewards completions that are close to 20 characters
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`,则当有更多 VRAM 可用时,请求会稍后再次调度。
然后我们切换到了一个包含 4 个 8xH100 节点(总共 32 个 GPU)的设置。这为 32 个并行请求留出了足够的空闲 VRAM,几乎没有请求因为 100% 缓存利用率而被重新调度。
最初我们开始向 vLLM 服务器批量查询请求,但很快发现批处理中的滞后会导致 GPU 利用率波动,因为只有在前一批的最后一个样本处理完成后,新一批才会开始处理。将批量推理切换到流式传输显著稳定了 GPU 利用率。
这只需要更改向 vLLM 服务器发送请求的代码。批量推理的代码
# send requests in batches of 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:
# keep the total active requests under 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)
# wait for all remaining tasks to complete
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 的 Money Planet 节目中聊天(约 21 分钟处):https://www.npr.org/2024/11/29/1215793948/deepseek-ai-china-us-semiconductors-stock-nvidia
其他提及:《华盛顿邮报》、《金融时报》、《金融时报》、《财富》、《财富》、The Verge、《金融评论》、Tech Crunch、《时代》、《金融时报》、《纽约时报》、《华尔街日报》、欧洲新闻、Barrons、《纽约时报》、Vox、Nature、SwissInfo、《商报》、Business Insider、IEEE Spectrum、麻省理工科技评论、《世界报》。
我们从 DeepSeek-R1 学到了什么?
尽管社区仍在消化 DeepSeek-R1 的结果和报告,但 DeepSeek 在发布仅两周后就引起了更广泛的公众关注。
对 R1 的回应
发布后相对平静的第一周过去后,第二周市场反应强烈,促使多家人工智能研究实验室做出回应。
- 股市周一受到冲击,但随后几天趋于稳定或反弹:https://x.com/KobeissiLetter/status/1883831022149927352
- OpenAI 首席执行官 Sam Altman 祝贺 DeepSeek,并宣布他们将提前发布一些新东西:https://x.com/sama/status/1884066337103962416
- OpenAI 首席研究官 Mark Chen 评论了 DeepSeek 如何发现了与 OpenAI 用于 o1 相似的想法:https://x.com/markchen90/status/1884303237186216272
- Anthropic 首席执行官 Dario Amodei 借此机会加倍强调出口管制,描绘了一幅两极或单极世界的图景:https://x.com/DarioAmodei/status/1884636410839535967
与此同时,多家公司致力于通过各种平台提供 DeepSeek 模型(非详尽列表)
- 戴尔:戴尔首席执行官兼创始人迈克尔·戴尔与 Hugging Face 合作,宣布推出 DeepSeek-R1 的本地部署解决方案:https://x.com/MichaelDell/status/1884677233014398994
- AWS:亚马逊首席执行官 Andy Jassy 宣布 DeepSeek-R1 现已在 Amazon BedRock 和 SageMaker 上可用:https://x.com/ajassy/status/1885120938813120549
- Hyperbolic AI:https://hyperbolic.xyz/blog/deepseek-r1-now-hosted-on-hyperbolic
- Together AI:https://x.com/togethercompute/status/1882110120274088278
- Fireworks AI:https://fireworks.ai/models/fireworks/deepseek-r1
DeepSeek V3 训练计算
人们对宣称的 V3/R1 训练成本非常感兴趣。虽然确切数字可能不那么重要,但人们进行了一些粗略计算以验证数量级。总而言之,这些数字似乎大致在正确的数量级上,正如这些讨论中所示:
- 马里兰大学教授 Tom Goldstein:https://x.com/tomgoldsteincs/status/1884651376854122774
- MatX 创始人 Reiner Pope 比较 Llama3 与 DeepSeek V3 https://x.com/reinerpope/status/1884056274893168896
- Lukas Beyer,OpenAI 前 Google Brain/DeepMind,讨论了 MFU 的起源:https://x.com/giffmana/status/1884160434846224688
- SemiAnalysis 发布了一份报告,推测 DeepSeek 可用的基础设施:https://x.com/SemiAnalysis_/status/1885192148037112023
由于许多团队正在努力复现训练管道,我们将获得更多关于模型可能训练效率的证据。
训练数据集
上周,有人猜测 DeepSeek 可能使用了 OpenAI 的输出来训练其模型。例如,请参见《金融时报》。然而,目前尚不清楚这些指控将产生何种后果。
社区
开源社区对 DeepSeek-R1 表现出极大的热情,许多人开始围绕该模型构建有趣的项目。
项目
有许多项目尝试以较小规模复现基本学习机制,这样您就可以在家测试基本学习原理。
- Will Brown 展示了如何使用 TRL 中的 GRPO Trainer 来复现 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


数据集
社区在 R1 相关的多个数据集工作上一直很活跃,其中一些亮点包括:
- bespokelabs/Bespoke-Stratos-17k:这是 Berkeley Sky-T1 数据管道的复刻,该管道使用 DeepSeek-R1 创建了一个包含问题、推理轨迹和答案的数据集。随后,该数据被用于使用与 R1 论文类似的回忆方法微调 7B 和 32B Qwen 模型。
- open-thoughts/OpenThoughts-114k:“一个开放的合成推理数据集,包含 114k 个高质量示例,涵盖数学、科学、代码和谜题。” 属于 Open Thoughts 工作的一部分。
- cognitivecomputations/dolphin-r1:包含 DeepSeek-R1、Gemini flash 的 80 万个样本数据集,以及 Dolphin chat 的 20 万个样本,旨在帮助训练 R1 风格的模型。
- ServiceNow-AI/R1-Distill-SFT:目前包含 17,000 个样本,是 ServiceNow 语言模型实验室为支持 Open-R1 工作而创建的数据。
- NovaSky-AI/Sky-T1_data_17k:用于训练 Sky-T1-32B-Preview 的数据集。此数据集是早期尝试复制 o1 样式推理的一部分。在此数据集上训练的模型成本不到 450 美元。此博客文章提供了更多详细信息。
- Magpie-Align/Magpie-Reasoning-V2-250K-CoT-Deepseek-R1-Llama-70B:此数据集扩展了 Magpie 和生成不带起始提示的指令数据的方法,以在响应中包含推理。指令由 Llama 3.1 70B Instruct 和 Llama 3.3 70B Instruct 生成,响应由 DeepSeek-R1-Distill-Llama-70B 生成
此列表仅涵盖了 Hub 上与推理和问题解决相关的少数数据集。我们很高兴能看到社区在未来几周内构建出其他数据集。
接下来是什么?
我们才刚刚开始,希望完成训练管道,并在更小的模型上进行尝试,并使用扩展的推理管道生成高质量数据集。如果您想贡献,请查看 GitHub 上的 open-r1 仓库 或关注 Hugging Face open-r1 组织。