DeepSeek-R1を再現!Hugging FaceのOpen-R1プロジェクト徹底解説
DeepSeek-R1の完全オープンな再現を目指すHugging Faceのプロジェクト、Open-R1。この記事では、Open-R1の概要、インストール方法、モデルの学習・評価、データ生成、貢献方法までをわかりやすく解説します。目指すは、誰もがDeepSeek-R1を再現し、その上に構築できる環境の実現です。
Open-R1プロジェクトとは?DeepSeek-R1の再現を目指す!
Open-R1は、DeepSeek-R1の技術レポートを基に、R1パイプラインの不足部分を構築し、再現性と拡張性を高めることを目標としたプロジェクトです。シンプルさを重視し、以下の要素で構成されます。
- src/open_r1: モデルの学習・評価、合成データ生成スクリプト
- Makefile: 上記スクリプトを簡単に実行するためのコマンド
Open-R1の進め方:三段階のアプローチ
DeepSeek-R1の技術レポートを参考に、以下の3つのステップで進めます。
- R1-Distillモデルの再現: DeepSeek-R1から高品質なコーパスを蒸留する
- 純粋な強化学習パイプラインの再現: R1-Zeroの作成に使用された強化学習パイプラインを再現する。数学、推論、コードに関する大規模なデータセットをキュレーションする必要があるでしょう。
- マルチステージ学習によるベースモデルから強化学習モデルへの移行: ベースモデルから強化学習チューニングされたモデルへの移行を実証する。
Open-R1の始め方:インストール手順を解説
Open-R1を使用するための環境構築手順を説明します。
-
仮想環境の作成: Condaを使用してPythonの仮想環境を作成します。
conda create -n openr1 python=3.11 && conda activate openr1
-
vLLMのインストール: vLLMをインストールします。PyTorchのバージョン
v2.5.1
を使うことが重要です。pip install vllm==0.6.6.post1
CUDAのバージョンによっては、以下のコマンドを使用します。
pip install vllm==0.6.6.post1 --extra-index-url https://download.pytorch.org/whl/cu121
-
その他の依存関係のインストール: 必要な依存関係をインストールします。開発に貢献する場合は
dev
オプションを使用します。pip install -e ".[dev]"
-
Hugging FaceとWeights & Biasesへのログイン: Hugging FaceとWeights and Biasesのアカウントにログインします。
huggingface-cli login wandb login
-
Git LFSの確認: Git LFSがインストールされているか確認します。モデルやデータセットをHugging Face Hubにアップロードするために必要です。
git-lfs --version
インストールされていない場合は、以下のコマンドでインストールします。
sudo apt-get install git-lfs
モデルの学習方法:SFTとGRPO
Open-R1では、教師あり学習(SFT)とGRPO (General Reward Policy Optimization) の2つの方法でモデルを学習できます。
教師あり学習(SFT)
DeepSeek-R1から蒸留されたデータセット(例:Bespoke-Stratos-17k)でSFTを実行するには、以下のコマンドを使用します。
accelerate launch --config_file=configs/zero3.yaml src/open_r1/sft.py \
--model_name_or_path Qwen/Qwen2.5-Math-1.5B-Instruct \
--dataset_name HuggingFaceH4/Bespoke-Stratos-17k \
--learning_rate 2.0e-5 \
--num_train_epochs 1 \
--packing \
--max_seq_length 4096 \
--per_device_train_batch_size 4 \
--per_device_eval_batch_size 4 \
--gradient_accumulation_steps 4 \
--gradient_checkpointing \
--bf16 \
--logging_steps 5 \
--eval_strategy steps \
--eval_steps 100 \
--output_dir data/Qwen2.5-1.5B-Open-R1-Distill
GRPO
GRPOでモデルを学習するには、以下のコマンドを使用します。
accelerate launch --config_file configs/zero3.yaml src/open_r1/grpo.py \
--output_dir DeepSeek-R1-Distill-Qwen-7B-GRPO \
--model_name_or_path deepseek-ai/DeepSeek-R1-Distill-Qwen-7B \
--dataset_name AI-MO/NuminaMath-TIR \
--max_prompt_length 256 \
--per_device_train_batch_size 1 \
--gradient_accumulation_steps 16 \
--logging_steps 10 \
--bf16
モデルの評価方法:LightEvalで性能を測る
Open-R1では、lighteval
を使用してモデルを評価します。カスタムタスクはsrc/open_r1/evaluate.py
で定義されています。
MODEL=deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B
MODEL_ARGS="pretrained=$MODEL,dtype=float16,max_model_length=32768,gpu_memory_utilisation=0.8"
TASK=aime24
OUTPUT_DIR=data/evals/$MODEL
lighteval vllm $MODEL_ARGS "custom|$TASK|0|0" \
--custom-tasks src/open_r1/evaluate.py \
--use-chat-template \
--system-prompt="Please reason step by step, and put your final answer within \boxed{}." \
--output-dir $OUTPUT_DIR
複数のGPUを使用して評価する場合は、データ並列またはテンソル並列を使用できます。
データ生成方法:Distilabelを活用
Open-R1では、Distilabelを使用してデータを生成します。
小さなDistillモデルからのデータ生成
以下の例は、1つのH100 GPUで実行できます。
DeepSeek-R1からのデータ生成
大規模なDeepSeek-R1を実行するには、各ノードが8つのH100 GPUを備えた2つのノードを使用します。
Open-R1への貢献方法
Open-R1への貢献は大歓迎です。
まとめ:DeepSeek-R1を再現し、更なる発展へ
Hugging FaceのOpen-R1プロジェクトは、DeepSeek-R1のオープンな再現を実現し、研究開発の加速を目指しています。この記事を参考に、Open-R1を試して、貢献してみてはいかがでしょうか。