婆罗门
精华
|
战斗力 鹅
|
回帖 0
注册时间 2015-4-28
|
本帖最后由 moekyo 于 2025-2-3 13:41 编辑
https://huggingface.co/blog/open-r1/update-1
Open-R1: Update #1
自DeepSeek R1发布以来已经两周了,而我们启动open-r1项目以复制缺失的部分——即训练管道和合成数据——也才刚刚一周。本文总结了以下内容:
- open-r1在复制DeepSeek-R1管道和数据集方面的进展
- 我们对DeepSeek-R1及其相关讨论的了解
- 自DeepSeek-R1发布以来社区构建的一些酷项目
一周后的进展
首先来看一下我们在Open-R1上取得的进展。我们仅在一周前启动了Open-R1项目,团队内外以及社区的成员齐心协力参与其中,并有一些进展可以报告。
评估
复现的第一步是验证我们是否能够匹配评估分数。我们成功复现了Deepseek在MATH-500基准测试上的结果:
你可以在open-r1仓库中找到运行这些评估的说明。
我们注意到的一个观察结果是,DeepSeek模型生成的内容规模巨大,这使得即使评估模型也颇具挑战性。以下是DeepSeek-R1在OpenThoughts数据集中响应长度的分布情况:
[backcolor=var(--bg)]R1响应分布显示它们平均非常长,平均响应长度为6,000个token,一些响应包含超过20,000个token。值得注意的是,平均每页包含约500个单词,一个token平均略少于一个单词,这意味着许多响应超过10页长。(来源:https://x.com/gui_penedo/status/1884953463051649052 )
[backcolor=var(--bg)]
响应的长度将使GPRO训练变得具有挑战性,因为我们将不得不生成较长的补全内容,这需要占用相当大比例的GPU内存来存储优化步骤中的激活值/梯度。
为了公开分享我们的进展,我们创建了一个open-r1评估排行榜,以便社区可以跟踪我们的复现工作(空间在这里)。
训练管道
随着Open R1的发布,GRPO(Grouped Relative Policy Optimization)被集成到最新的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")
- # 虚拟奖励:奖励接近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,则会在更多VRAM可用时再次调度这些请求。
然后我们切换到使用4x 8xH100节点的设置,总共32个GPU。这留下了足够的空闲VRAM,可以并行运行32个请求,几乎没有因100%缓存利用率而重新调度的情况。
最初我们以批量请求的方式查询vLLM服务器,但很快注意到批次中的拖尾现象会导致GPU利用率波动,因为只有在前一批次的最后一个样本完成后才会开始处理新批次。将批量推理切换为流式处理显著稳定了GPU利用率:
只需要更改发送请求到vLLM服务器的代码即可。批量推理的代码如下:
- # 以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的Money Planet节目中聊天(大约21分钟处):https://www.npr.org/2024/11/29/1215793948/deepseek-ai-china-us-semiconductors-stock-nvidia
其他提及:Washington Post, Financial Times, Financial Times, Fortune, Fortune, The Verge, Financial Review, Tech Crunch, Die Zeit, Financial Times, New York Times, The Wall Street Journal, EuroNews, Barrons, New York Times, Vox, Nature, SwissInfo, Handelsblatt, Business Insider, IEEE Spectrum, MIT Tech Review, LeMonde
我们对DeepSeek-R1了解了什么?
虽然社区仍在消化DeepSeek-R1的结果和报告,但DeepSeek在发布两周后就引起了公众的广泛关注。
对R1的回应
在发布后的第一周相对平静,第二周市场反应显著,促使多家AI研究实验室作出回应:
与此同时,几家公司致力于通过各种平台提供DeepSeek模型(非详尽列表):
DeepSeek V3训练计算
关于V3/R1训练成本的宣称引起了广泛兴趣。虽然确切数字可能并不那么重要,但人们进行了一些粗略计算以验证其数量级。简而言之,这些数字似乎大致在正确的数量级范围内,如以下讨论所示:
由于许多团队正在努力复现训练管道,我们将获得更多证据来证明该模型可能的训练效率。
训练数据集
上周出现了一些推测,称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
TinyZero的结果显示模型扩展了其推理能力。
同样,这张来自香港科技大学研究人员的图表显示了随着训练的继续,模型生成越来越长的推理轨迹。
数据集
社区一直在忙于与R1相关的多项数据集工作,一些亮点包括:
bespokelabs/Bespoke-Stratos-17k:Berkeley Sky-T1数据管道的复现,使用DeepSeek-R1创建问题、推理轨迹和答案的数据集。随后使用类似于R1论文的蒸馏方法对该数据进行了微调,应用于7B和32B Qwen模型。
open-thoughts/OpenThoughts-114k:“包含114k高质量示例的开放合成推理数据集,涵盖数学、科学、代码和谜题”。这是Open Thoughts项目的一部分。
cognitivecomputations/dolphin-r1:包含80万个样本的数据集,来自DeepSeek-R1、Gemini flash和20万个来自Dolphin chat的样本,目标是帮助训练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组织。
应该是这波Deepseek旋风的最佳技术向总结了
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|