Hugging Face的Open R1项目发布了重要的升级,通过CodeForces-CoTs数据集和IOI基准测试,7B模型在代码推理界展现了惊艳的性能。团队面临了如模型训练、提交策略优化、创建新的数据集等挑战。同时,他们也分享了在模型训练过程中的一些经验教训,如使用较大的学习率、避免样本打包、合理设置奖励权重等。最新的改进包括GRPO优化器的更新,以及对模型生成速度和可扩展性的提升。除此之外,研究团队还丰富了OpenR1-Math-Raw数据集,并分享了他们在训练评估过程中的发现。
Hugging Face的Open R1项目通过最新的升级,在代码推理领域表现出强大的性能。7B模型在CodeForces-CoTs数据集和IOI基准测试中展现了惊人的结果。
在模型训练过程中,团队面临了诸多挑战,包括创建新的数据集、设置合适的提交策略、优化模型训练等。他们通过一系列的实验和调试,总结出了一些经验教训,如避免样本打包、使用较大的学习率、合理设置奖励权重等。
团队在GRPO优化器方面取得了重要的进展,通过更新改进了模型的生成速度和可扩展性。此外,他们还丰富了OpenR1-Math-Raw数据集,并分享了训练评估过程中的发现。
目前,团队的重点是进一步提升模型的生成速度,并将GRPO扩展到多节点设置。同时,他们还在完善数学和代码等领域的奖励信号,并计划引入奖励模型来评分非推理数据。
【新智元导读】
Hugging Face的Open R1重磅升级,7B击败Claude 3.7 Sonnet等一众前沿模型。凭借CodeForces-CoTs数据集的10万高质量样本、IOI难题的严苛测试,以及模拟真实竞赛的提交策略优化,这款模型展现了惊艳的性能。
Hugging Face的Open R1再度升级!
Hugging Face的Open R1是一个社区驱动的项目,目标是创建一个完全开源的DeepSeek-R1版本。目前,已有模型如OlympicCoder-32B和数据集如codeforces发布,显示了项目的进展。
最新发布的7B和32B OlympicCoder,在IOI挑战上超越了一众前沿模型,比Claude 3.7 Sonnet还猛。
OlympicCoder已经成了代码推理界的「肌肉猛男」,有些模型规模比它大100倍,结果还是被它按在地上摩擦……
模型在2024年国际信息学奥林匹克竞赛(IOI)50次提交中的表现
而这一切,得感谢Open R1的一系列骚操作:
-
CodeForces-CoTs数据集
:近10万个高质量样本,提炼自DeepSeek-R1,专门训练C++和Python代码生成。
-
IOI基准测试
:拿2024年国际信息学奥林匹克竞赛(IOI)的难题来虐AI,看看谁是真正的「代码战神」。
-
提交策略优化
:模拟OpenAI的策略,让模型最大化得分,像真正的选手一样参加比赛。
我们来扒一扒它是怎么炼成的,以及Hugging Face团队踩过的那些坑。
(小心,可能会让你怀疑人生:AI连刷题都比你强了……)
CodeForces作为编程竞赛的热门平台,其中的算法优化问题极具挑战性。
这使其成为一个有趣的数据集,用于提升和测试模型的代码推理能力。
此次发布的open-r1/codeforces包含了超过1万个问题,时间跨度从最初的竞赛一直到2025年,其中约3000个问题是DeepMind和CodeContests中没有的。
对于约60%的问题,数据集提供了竞赛组织者撰写的解题思路,这对理解原理至关重要。
同时,每个问题都从官方网站提取了3个正确解决方案。
open-r1/codeforces-cots数据集更是一大亮点,其中包含了DeepSeek-R1针对这些问题生成的近10万个思维链(CoT)样本,用C++和Python两种语言呈现。
研究团队在这个数据集上对Qwen2.5 Coder Instruct 7B和32B进行微调,得到了OlympicCoder-7B和OlympicCoder-32B模型。
代码可验证性危机
虽然DeepMind和其他竞赛数据集都包含测试用例,并声称是可验证的,但这些通常只是竞赛网站上全套测试用例的一小部分。
特别是CodeForces,显示的测试用例上限约为500个字符,这意味着这些数据集只包含符合此限制的较短、较简单的测试用例。
例如,研究者选取了7个问题,R1生成的解决方案通过了全部公开测试用例,并将它们提交到CodeForces平台:
尽管这些方案通过了较短的测试,但均未通过完整测试集。这凸显了对新的可验证的编程竞赛数据集的需求。
国际信息学奥林匹克竞赛(IOI)是全球顶尖的编程竞赛。
完整测试集遵循宽松的(CC-BY)许可发布,使其成为测试代码推理能力的理想数据集。
如果你熟悉美国数学邀请赛(AIME),IOI就相当于数学奥林匹克竞赛(IMO)的编程版,参加AIME的最优秀学生才有资格受邀参加IMO。
IOI的问题设计独特,每个问题细分为多个子任务,各子任务输入约束不同。
参赛者要解决子任务,提交的方案须在严格时限内通过所有测试用例。
最后子任务通常是完整复杂问题,而前面子任务相对简单、约束更多,参赛者常针对特定子任务拿部分分数,竞赛中得满分十分罕见。
团队整理了2020-2024年的IOI问题,将它们拆分为子任务,使每个提示都能解决一个特定的子任务,便于有针对性地训练和评估。
他们还在open-r1/ioi和open-r1/ioi-test-cases中发布了处理后的问题陈述、评分检查文件及测试用例,同时创建了自定义代码,用于运行解决方案并按IOI规则评分,代码可在
https://github.com/huggingface/ioi
上获取。
研究者对2024年IOI上40多个领先的推理模型进行了全面评估。
每个问题的提交次数限制为50次,采用与OpenAI类似的选择策略模拟得分。
评估结果显示,OlympicCoder模型表现出色。
OlympicCoder-32B在50次提交限制下,超越了o1-mini、DeepSeek-R1、Claude-3.7-Sonnet-thinking等模型。
模型在2024年国际信息学奥林匹克竞赛(IOI)50次提交中的表现
提交策略
这种提交策略可能不利于非推理模型,像OlympicCoder-32B-Instruct和Qwen-2.5-Coder-32B-Instruct。
为模拟真实竞赛,团队采用类似OpenAI用于o1-ioi的循环提交策略。
首先提交针对最后一个子任务的解决方案,然后是倒数第二个子任务的方案,以此类推,只有选定提交时才评估解决方案。
若子任务已被之前选定的提交解决,就跳过针对该子任务的提交。
在每个目标子任务里,倾向于选择更长的生成内容,这对推理模型合理,对其他模型不太适用。
如果取消50次提交限制,并评估生成的所有提交,会得到以下结果:
国际信息学奥林匹克竞赛(2024年)无提交限制时模型的表现
在创建OlympicCoder模型时,研究者进行了大量SFT实验,以了解用于CodeForces数据集的各种筛选条件的作用。
发现open-r1/codeforces-cots的以下子集表现最佳:
请注意,这里只关注了C++解决方案,融入Python解决方案可能进一步提高性能。
用LiveCodeBench作为模型的测试平台,然后将表现最佳的checkpoints用于更具挑战性的IOI基准测试。
研究者测试了各种超参数配置来训练模型,最终确定如下:
样本打包会损害推理性能
样本打包是一种在训练中常用的加速方法,它将训练样本连接成大小相等的块,无需填充token。
打包后,样本可能会跨块边界重叠。不过,要是大部分样本比块小很多,这种重叠影响不大。
然而,对于从R1提取的推理轨迹,这可能会带来负面影响。
因为很多轨迹长,答案被截断的可能性高。这就导致训练时,它很难关注长上下文信息,尤其是问题和答案被分到不同块的时候。
如下图所示,打包会严重损害模型的性能。用打包时,模型几乎解不出LiveCodebench里的题;不用打包,性能在几个训练周期后趋于平稳。