Open R1 Update #3: OlympicCoder 和代码推理洞察

Hugging Face 发布了 OlympicCoder,一对经过微调的 7B 和 32B 代码模型,在具有挑战性的国际信息学奥林匹克竞赛(IOI)问题上优于闭源前沿模型,包括 Claude 3.7 Sonnet。此发布是 Open R1 项目努力的一部分,旨在通过创建专门的数据集和蒸馏推理轨迹来重现 DeepSeek-R1 配方的竞赛编程方面。

OlympicCoder 和 IOI 基准

OlympicCoder-32B 在 50 次提交限制设置下优于所有测试的开放权重模型,并超越 o1-mini 和 DeepSeek-R1。为了评估这些能力,Hugging Face 基于 2024 年国际信息学奥林匹克竞赛(IOI)开发了一个新的基准,该基准测试复杂的算法问题,并在 CC-BY 许可下提供完整的测试集。

提交策略与评估

为了模拟真实的竞赛条件,Hugging Face 采用了循环提交策略,其中解决方案的得分仅在提交后才知晓。该策略优先考虑首先针对最难子任务的提交,并倾向于为推理模型生成更长的内容。在这些严格的竞赛条件下,没有模型达到奖牌阈值(人类选手的第 50 百分位),尽管 o1 最接近铜牌水平。

新代码推理数据集

为了训练 OlympicCoder,Hugging Face 基于流行的竞赛编程平台 CodeForces 发布了两个主要数据集:

  • open-r1/codeforces: 超过 10,000 道题目的数据集,大约有 3,000 道题目之前的数据集(如 DeepMind 的 CodeContests)中不包含。这些题目中约有 60% 包含编辑说明(组织者提供的解释)。
  • open-r1/codeforces-cots: 近 100,000 条来自 DeepSeek-R1 的链式思考(CoT)样本,经过蒸馏得到,提供 C++ 和 Python 解决方案。

代码可验证性危机

Hugging Face 在现有的竞赛编程数据集中发现了一个“可验证性危机”。许多数据集仅包含短测试用例(通常限制在 500 个字符),导致模型在公开测试中通过但在完整测试套件上失败的情况。这一发现促使转向 IOI 基准,因为它提供了完全可用且可验证的问题数据。

训练推理模型的技术经验

通过使用 Qwen2.5 Coder Instruct 作为基础的 SFT 实验,Hugging Face 确定了在 R1 推理轨迹上训练模型的五个关键经验:

  1. 样本打包会损害推理性能:将训练样本连接成大小相等的块会显著降低模型解决问题的能力,这可能是因为长推理轨迹被截断或跨块分割。
  2. 更高的学习率更有效:使用 4e-5 的学习率相比大多数 Qwen SFT 实验中使用的标准 2e-5,能够带来显著的性能提升(在 LiveCodeBench 上近乎提升 10 分)。
  3. 编辑说明不会提升性能:在 R1 蒸馏的提示中加入官方编辑说明并未提升得到的模型性能;直接从问题陈述中进行 naive 采样略微更有效。
  4. \{\} 标记进行预填充:为了在域内和域外查询中始终触发长 CoT 行为,助手的响应应在聊天模板中预填充 \{\} 标记。
  5. 用于长上下文的 8 位优化器:为了在扩展到具有长上下文的 32B 模型时避免内存不足(OOM)错误,将 FSDP 与 paged_adamw_8bit 优化器结合使用,使上下文可扩展到 22,528 个标记。

GRPO 和数据集更新

TRL 中的 GRPO 增强

Hugging Face 已更新 TRL 库中的 Group Relative Policy Optimization(GRPO)实现,加入了若干效率和可扩展性改进:

  • 生成复用:样本现在可以被多次重用(推荐 $\mu$ 在 2 和 4 之间)以加速优化。
  • 奖励权重:用户现在可以为不同的奖励函数分配不同的权重(例如,优先考虑正确性而非格式)。
  • 集成:添加了 PEFT 和 vLLM 集成、梯度检查点以及优化的选择性 log softmax 计算。

Open R1 Math-数据集改进

OpenR1-Math-Raw 数据集已通过 Llama-3.3-70B-Instruct 提取的 reparsed_answers 和一个 correctness 列进行丰富。消融研究表明,虽然严格验证(例如,将 Llama 验证与 math_verify 结合)能显著提升早期阶段的性能,但在更长的训练过程中,性能差距会减小,因为即使是不正确的样本,数量增加也会变得有益。

未来路线图

Hugging Face 计划专注于以下后续步骤:

  • 完善用于通用推理器的蒸馏数据集混合。
  • 将 GRPO 扩展到更大的模型,例如 Qwen2.5-Coder-32B-Instruct,以创建 R1-Zero 变体。
  • 从多个领域整合奖励信号,并利用奖励模型处理非推理数据。

Sources