微信扫码
添加专属顾问
我要投稿
探索Open R1项目的最新进展和DeepSeek R1的性能复现。 核心内容: 1. Open-R1项目一周的成果展示 2. 评估DeepSeek R1模型性能的基准测试结果 3. 社区项目进展和评估排行榜的更新
这既是项目的最新动态,也是一些关于 DeepSeek-R1 的有趣资料合集。
先来看看 Open-R1 这周干了啥。我们一周前才开始这个项目,经过团队和社区的小伙伴们一起努力,已经有点成果可以分享了。
要模仿人家,第一步得确认我们能不能复现 DeepSeek 的成绩。我们在 MATH-500 基准测试上试了试,果然能跟 DeepSeek 公布的数据对上号:
想知道怎么测的?去看说明吧。
我们还发现,DeepSeek 模型生成的回答特别长,评估起来都费劲。在 OpenThoughts 数据集里,DeepSeek-R1 的回答平均有 6000 个 token,有些甚至超过 20000 个 token。啥概念呢?一页书大概 500 个单词,一个单词可能由 1 个及以上的 token 组成,所以很多回答能写满 10 多页!(来源:)
回答这么长,给后面用 GPRO 训练带来了很大的挑战。想要生成超长内容,需要很多的 GPU 显存来存储梯度和激活值。
为了让大家都能看到进展,我们搞了个 open-r1 评估排行榜,社区可以在这里随时关注我们的复现情况:
Open R1 发布后,GRPO (分组相对策略优化) 被集成到了最新版 TRL () 中。有了这个,任何模型都能用一个或多个奖励函数来训练。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
,就得等显存空出来再重跑。
后来我们换成 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 火了,连媒体都关注,过去一周团队成员频频上新闻:
还有一堆报道:
虽然大家还在研究 DeepSeek-R1 的成果和报告,但这款模型在发布短短两周后,就已经火遍了大街小巷,吸引了无数目光。
发布后的第一周还算风平浪静,但到了第二周,市场突然热闹起来,各大 AI 研究机构纷纷发表看法:
与此同时,不少公司也忙着把 DeepSeek 模型塞进各种平台 (以下只是部分例子):
大家对 V3 和 R1 的训练费用特别好奇。虽然具体数字可能没那么关键,但很多人还是拿计算器粗略估了估,结果发现这些数字大体靠谱。看看这些讨论就知道了:
不少团队正在努力复现训练过程,估计很快就能知道这个模型的训练效率到底有多牛。
上周有人猜想 DeepSeek 可能偷偷用了 OpenAI 的数据来训练自己的模型,比如《金融时报》就报道了这事儿。不过现在还不确定这些说法会闹出什么结果。
围绕 DeepSeek-R1,开源社区简直火爆得不行,好多人都在基于这个模型搞出各种有意思的项目。
有些项目试着以较小的规模复制基本的学习机制,让你自己在家就能试试:
TinyZero 的结果,模型的推理能力变强了
香港科大的图表,随着训练越久,模型的推理过程越长
社区里好多人都在忙着搞 R1 相关的数据集,亮点有这些:
此列表仅涵盖 Hub 上的少量推理和问题解决相关数据集。我们期待可以看到社区在未来几周内能够构建其他哪些数据集。
我们这才刚起步呢,打算把训练流程弄完,在小模型上试试,再用放大版的推理流程搞出高质量的数据集。想帮忙的话,去 GitHub 上看,或者关注 Hugging Face 的吧!
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2025-04-01
Cursor是越来越难用了!逼着我写mdc文档比代码还多
2025-04-01
Docker部署Dify+RAGFlow避坑指南
2025-04-01
大型语言模型如何高效微调量化?答案就是 QLoRA!
2025-04-01
LLaMA Factory微调后的大模型在vLLM框架中对齐对话模版
2025-04-01
AI大模型分布式训练技术原理是什么?看这篇超犀利解析!
2025-04-01
大模型部署该选谁?Ollama、vLLM 和 LMDeploy,各有千秋!
2025-04-01
【强烈建议收藏】一文读懂大模型训练的通信原语
2025-04-01
为什么你的Cursor效率不如我
2025-02-04
2025-02-04
2024-09-18
2024-07-11
2024-07-09
2024-07-11
2024-07-26
2025-02-05
2025-01-27
2025-02-01
2025-04-01
2025-03-31
2025-03-20
2025-03-16
2025-03-16
2025-03-13
2025-03-13
2025-03-11