🚀 OpenR1-Distill-7B
OpenR1-Distill-7Bは、Qwen/Qwen2.5-Math-7BをMixture-of-Thoughtsというデータセットで追加学習したモデルです。Mixture-of-Thoughtsは、DeepSeek-R1から抽出された350kの検証済み推論トレースを含むデータセットで、数学、コーディング、科学のタスクを網羅し、言語モデルに段階的な推論を教えることを目的としています。このモデルは、deepseek-ai/DeepSeek-R1-Distill-Qwen-7Bの推論能力を再現しつつ、完全にオープンで再現可能です。推論時の計算や検証可能な報酬を用いた強化学習(RLVR)の研究に最適です。
🚀 クイックスタート
このモデルを使用するには、まず必要なライブラリをインストールし、モデルを起動する方法について説明します。
✨ 主な機能
- 350kの検証済み推論トレースを含むデータセットで追加学習されたGPTライクな7Bパラメータモデル。
- 数学、コーディング、科学のタスクでの推論能力を備えています。
- 完全にオープンで再現可能なモデルで、研究に最適。
📦 インストール
モデルと会話するには、まず🤗 Transformersをインストールします。
pip install transformers>0.52
💻 使用例
基本的な使用法
次に、以下のようにチャットCLIを実行します。
transformers chat open-r1/OpenR1-Distill-7B \
max_new_tokens=2048 \
do_sample=True \
temperature=0.6 \
top_p=0.95
高度な使用法
あるいは、pipeline()
関数を使用してモデルを実行することもできます。
import torch
from transformers import pipeline
pipe = pipeline("text-generation", model="open-r1/OpenR1-Distill-7B", torch_dtype=torch.bfloat16, device_map="auto")
messages = [
{"role": "user", "content": "Which number is larger, 9.9 or 9.11?"},
]
outputs = pipe(messages, max_new_tokens=2048, do_sample=True, temperature=0.6, top_p=0.95, return_full_text=False)
print(outputs[0]["generated_text"])
📚 ドキュメント
モデルの説明
属性 |
详情 |
モデルタイプ |
7BパラメータのGPTライクなモデルで、公開されている合成データセットの混合で追加学習されています。 |
言語 |
主に英語 |
ライセンス |
Apache 2.0 |
ファインチューニング元のモデル |
Qwen/Qwen2.5-Math-7Bのバリアントで、RoPEの基本周波数が300kに拡張され、32kトークンのコンテキストでの学習が可能になっています。 |
モデルのソース
- リポジトリ: https://github.com/huggingface/open-r1
- 学習ログ: https://wandb.ai/huggingface/open-r1/runs/199cum6l
- 評価ログ: https://huggingface.co/datasets/open-r1/details-open-r1_OpenR1-Distill-7B
パフォーマンス
Lightevalを使用して、以下のベンチマークでモデルを評価しました。
モデル |
AIME 2024 |
MATH-500 |
GPQA Diamond |
LiveCodeBench v5 |
OpenR1-Distill-7B |
52.7 |
89.0 |
52.8 |
39.4 |
DeepSeek-R1-Distill-Qwen-7B |
51.3 |
93.5 |
52.4 |
37.4 |
すべてのスコアはpass@1の正解率を示しており、temperature=0.6
およびtop_p=0.95
でサンプリングを使用しています。DeepSeek-R1の技術レポートでは、クエリごとに4 - 64の応答をサンプリングしてpass@1を推定していますが、ベンチマークごとの具体的な応答数は指定されていません。上の表では、クエリごとに以下の応答数でpass@1の正解率を推定しています。
ベンチマーク |
クエリごとの応答数 |
AIME 2024 |
64 |
MATH-500 |
4 |
GPQA Diamond |
8 |
LiveCodeBench |
16 |
AIME 2024のようなベンチマークでは、問題が30しかないため、繰り返し実行するとバリアンスが大きくなるため、多くの応答をサンプリングすることが重要です。プロンプトごとにサンプリングする応答数の選択が、私たちの評価結果とDeepSeekが報告した結果のわずかな違いの原因と考えられます。これらの結果を再現する方法については、open-r1
リポジトリを参照してください。
学習方法論
OpenR1-Distill-7Bは、Mixture-of-Thoughtsデータセットを使用して教師あり微調整(SFT)で学習されました。このデータセットには、DeepSeek-R1から抽出された350kの推論トレースが含まれています。データの混合を最適化するために、Phi-4-reasoning技術レポートで説明されている同じ方法論に従いました。つまり、各ドメインごとに独立して混合を最適化し、それらを単一のデータセットに結合することができます。以下の図は、数学とコードのドメインでの実験の進捗を示しています。
個々の実験は以下の通りです。
- exp1 - exp3: モデルの基本RoPE周波数をそれぞれ10kから100k、300k、500kに拡張しました。スケーリング係数の間に大きな違いは見られず、その後のすべての実験で300kを使用しました。
- exp4 - exp6: 数学とコードの混合データで学習率をそれぞれ1e-5から2e-5、4e-5に独立してスケーリングしました。
- exp7 - exp8: 数学の混合データでシーケンスパッキング(exp7)とパッキングなし(exp8)の影響を測定しました。
- exp9 - exp10: すべての3つの混合データ(数学、コード、科学)での学習と、数学とコードのみでの学習の影響を測定しました。
⚠️ 重要提示
アブレーション中の評価を加速するためにLiveCodeBench v4を使用しています。これはv5の約半分の問題を含んでいますが、依然として完全なベンチマークを代表しています。
学習ハイパーパラメータ
学習中に使用されたハイパーパラメータは以下の通りです。
- num_epochs: 5.0
- learning_rate: 4.0e-05
- num_devices: 8
- train_batch_size: 2
- gradient_accumulation_steps: 8
- total_train_batch_size: 2 * 8 * 8 = 128
- seed: 42
- distributed_type: DeepSpeed ZeRO-3
- optimizer: Adam with betas=(0.9,0.999) and epsilon=1e-08
- lr_scheduler_type: cosine_with_min_lr with min_lr_rate=0.1
- lr_scheduler_warmup_ratio: 0.03
- max_grad_norm: 0.2
学習結果
学習中は、AIME 2024、GPQA Diamond、LiveCodeBench v4の進捗をエポックごとに監視しました。以下のプロットは学習結果を示しています。
フレームワークのバージョン
- Platform: Linux-5.15.0-1049-aws-x86_64-with-glibc2.31
- Python version: 3.11.11
- TRL version: 0.18.0.dev0
- PyTorch version: 2.6.0
- Transformers version: 4.52.0.dev0
- Accelerate version: 1.4.0
- Datasets version: 3.5.1
- HF Hub version: 0.30.2
- bitsandbytes version: 0.45.5
- DeepSpeed version: 0.16.8
- Liger-Kernel version: 0.5.9
- OpenAI version: 1.76.2
- vLLM version: 0.8.4
📄 ライセンス
このモデルはApache 2.0ライセンスの下で提供されています。
引用
このモデルがあなたの研究に役立った場合、以下のように引用してください。
@misc{openr1,
title = {Open R1: A fully open reproduction of DeepSeek-R1},
url = {https://github.com/huggingface/open-r1},
author = {Hugging Face},
month = {January},
year = {2025}
}