Open R1 アップデート #3: OlympicCoder とコード推論の洞察
Hugging Face は OlympicCoder をリリースしました。これは、挑戦的な International Olympiad in Informatics (IOI) 問題において、Claude 3.7 Sonnet などのクローズドソースのフロンティアモデルを上回る、ファインチューンされた 7B と 32B のコードモデルのペアです。このリリースは、専門的なデータセットの作成と reasoning traces の蒸留を通じて、DeepSeek-R1 レシピの競争プログラミングの側面を再現する Open R1 プロジェクトの取り組みの一部です。
OlympicCoder と IOI ベンチマーク
OlympicCoder-32B は、すべてのテスト済みオープンウェイトモデルを上回り、50 提出制限の設定において o1-mini と DeepSeek-R1 をも上回ります。これらの能力を評価するために、Hugging Face は 2024 年の International Olympiad in Informatics (IOI) に基づく新しいベンチマークを開発しました。このベンチマークは、CC-BY ライセンスの下で完全なテストセットが利用可能な複雑なアルゴリズム問題をテストします。
提出戦略と評価
実際のコンテスト条件をシミュレートするために、Hugging Face はラウンドロビン提出戦略を採用しました。この戦略では、提出後にのみ解のスコアがわかります。この戦略は、最も難しいサブタスクを最初に狙う提出を優先し、推論モデルについてはより長い生成を好みます。これらの厳しいコンテスト条件下では、どのモデルもメダルのしきい値(人間の出場者の 50 パーセンタイル)に到達しませんでしたが、o1 がブロンズレベルに最も近づきました。
新しいコード推論データセット
OlympicCoder を訓練するために、Hugging Face は人気の競プロプラットフォーム CodeForces に基づく 2 つの主要なデータセットをリリースしました:
open-r1/codeforces: 10,000 問題以上のデータセット。そのうち約 3,000 問題は、DeepMind の CodeContests などの以前のデータセットには含まれていませんでした。これらの約 60% は、編集者説明(organizer explanations)を含みます。open-r1/codeforces-cots: DeepSeek-R1 から蒸留されたほぼ 100,000 の chain-of-thought (CoT) サンプル。C++ と Python のソリューションを提供します。
コードの検証可能性の危機
Hugging Face は、既存の競プロデータセットに「検証可能性の危機」があることを特定しました。多くのデータセットは短いテストケースのみを含んでおり(しばしば 500 文字で上限)、これによりモデルは公開テストに合格するがフルテストスイートでは失敗する状況が生じます。この発見により、完全に利用可能かつ検証可能な問題データを提供する IOI ベンチマークへのシフトが促されました。
推論モデルのトレーニングのための技術的教訓
Qwen2.5 Coder Instruct をベースとした SFT 実験を通じて、Hugging Face は R1 reasoning traces 上でのモデルのトレーニングに関する 5 つの重要な教訓を特定しました:
- サンプルのパッキングは推論性能を低下させる: トレーニングサンプルを等サイズのチャンクに連結すると、モデルの問題解決能力が著しく低下します。これは、長い reasoning traces がクリップまたはチャンク間で分割されるためと考えられます。
- より高い学習率はより効果的: 学習率 4e-5 を使用すると、ほとんどの Qwen SFT 実験で使用される標準の 2e-5 と比較して、顕著な性能向上(LiveCodeBench でほぼ 10 ポイント)が得られます。
- 編集者説明は性能を向上させない: R1 蒸留のプロンプトに公式の編集者説明を含めても、その結果得られるモデルの性能は向上しませんでした。問題文からのナイーブサンプリングの方がわずかに効果的でした。
{}トークンでプリフィル: ドメイン内およびドメイン外のクエリ両方で長い CoT 動作を一貫してトリガーするために、アシスタントの応答はチャットテンプレートで{}トークンでプリフィルされるべきです。- 長いコンテキスト向けの 8-bit オプティマイザー: 32B モデルに長いコンテキストでスケールアウトする際の Out-of-Memory (OOM) エラーを回避するために、FSDP と
paged_adamw_8bitオプティマイザーを組み合わせることで、コンテキストを 22,528 トークンまでスケールアップすることが可能になりました。
GRPO と Math データセットのアップデート
TRL における GRPO の機能強化
Hugging Face は、TRL ライブラリにおける Group Relative Policy Optimization (GRPO) の実装を、いくつかの効率性とスケーラビリティの向上のためにアップデートしました:
- Generation Reuse: サンプルは今後複数回再利用できます(推奨される $\mu$ は 2 から 4 の間)。これにより最適化の速度が向上します。
- Reward Weighting: ユーザーは今後、異なる報酬関数に異なる重みを割り当てることができます(例:フォーマットよりも正確性を優先)。
- Integration: PEFT と vLLM の統合、グラディエントチェックポイント、および最適化された選択的 log softmax 計算が追加されました。
Open R1 Math データセットの改善
OpenR1-Math-Raw データセットは、reparsed_answers (Llama-3.3-70B-Instruct によって抽出) と correctness 列で豊かになりました。アブレーション研究によると、厳格な検証(例えば、Llama 検証と math_verify の組み合わせ)は早期段階の性能を大幅に向上させますが、より長いトレーニングランでは、間違っているサンプルでも多くのサンプルがあることが有益になるため、性能差は縮小します。
フューチャー ロードマップ
Hugging Face は、次の手順に焦点を当てる予定です:
- 汎用目的の理由付けモデルのための蒸留データセットのブレンドを完璧にする。
- Qwen2.5-Coder-32B-Instruct などのより大きなモデルに GRPO をスケールアップし、R1-Zero バリアントを作成する。
- 複数のドメインからの報酬シグナルを統合し、理由付け以外のデータに対して報酬モデルを活用する。
Sources
- OriginalOpen R1: Update #3