simpo-training について
SimPOは、選好データを使ってLLMをファインチューニングする研究者や開発者向けの、参照モデル不要の選好最適化手法です。ベースモデルからの学習や指示チューニングに使えるスクリプトと設定を提供します。
主な機能
- 01参照モデル不要の選好最適化
- 02選好ペアを使った学習
- 03モデル学習スクリプト
- 04学習パラメーターの設定
活用シーン
- 01選好データによるモデルのファインチューニング
- 02指示チューニングモデルの学習
- 03数学やコード課題向けの学習調整
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ orchestra-research/ ai-research-skills --skill simpo-trainingインストール後、Claude Code で/simpo-trainingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/datasets.mdhyperparameters.mdloss-functions.md詳細
SimPO - Simple Preference Optimization
クイックスタート
SimPO は、参照モデルを必要とせずに DPO を上回る、リファレンスフリーの選好最適化手法です。
インストール:
# Create environment
conda create -n simpo python=3.10 && conda activate simpo
# Install PyTorch 2.2.2
# Visit: https://pytorch.org/get-started/locally/
# Install alignment-handbook
git clone https://github.com/huggingface/alignment-handbook.git
cd alignment-handbook
python -m pip install .
# Install Flash Attention 2
python -m pip install flash-attn --no-build-isolation
トレーニング (Mistral 7B):
ACCELERATE_LOG_LEVEL=info accelerate launch \
--config_file accelerate_configs/deepspeed_zero3.yaml \
scripts/run_simpo.py \
training_configs/mistral-7b-base-simpo.yaml
一般的なワークフロー
ワークフロー 1: ベースモデル(Mistral 7B)からトレーニング
設定 (mistral-7b-base-simpo.yaml):
# Model
model_name_or_path: mistralai/Mistral-7B-v0.1
torch_dtype: bfloat16
# Dataset
dataset_mixer:
HuggingFaceH4/ultrafeedback_binarized: 1.0
dataset_splits:
- train_prefs
- test_prefs
# SimPO hyperparameters
beta: 2.0 # Reward scaling (2.0-10.0)
gamma_beta_ratio: 0.5 # Target margin (0-1)
loss_type: sigmoid # sigmoid or hinge
sft_weight: 0.0 # Optional SFT regularization
# Training
learning_rate: 5e-7 # Critical: 3e-7 to 1e-6
num_train_epochs: 1
per_device_train_batch_size: 1
gradient_accumulation_steps: 8
# Output
output_dir: ./outputs/mistral-7b-simpo
トレーニングを開始:
accelerate launch --config_file accelerate_configs/deepspeed_zero3.yaml \
scripts/run_simpo.py training_configs/mistral-7b-base-simpo.yaml
ワークフロー 2: インストラクトモデル(Llama 3 8B)のファインチューニング
設定 (llama3-8b-instruct-simpo.yaml):
model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
dataset_mixer:
argilla/ultrafeedback-binarized-preferences-cleaned: 1.0
beta: 2.5
gamma_beta_ratio: 0.5
learning_rate: 5e-7
sft_weight: 0.1 # Add SFT loss to preserve capabilities
num_train_epochs: 1
per_device_train_batch_size: 2
gradient_accumulation_steps: 4
output_dir: ./outputs/llama3-8b-simpo
開始:
accelerate launch --config_file accelerate_configs/deepspeed_zero3.yaml \
scripts/run_simpo.py training_configs/llama3-8b-instruct-simpo.yaml
ワークフロー 3: 推論を多用するタスク(学習率を下げる)
数学・コードタスク向け:
model_name_or_path: deepseek-ai/deepseek-math-7b-base
dataset_mixer:
argilla/distilabel-math-preference-dpo: 1.0
beta: 5.0 # Higher for stronger signal
gamma_beta_ratio: 0.7 # Larger margin
learning_rate: 3e-7 # Lower LR for reasoning
sft_weight: 0.0
num_train_epochs: 1
per_device_train_batch_size: 1
gradient_accumulation_steps: 16
使用すべき場合と代替手法
SimPO を使用する場合:
- DPO よりシンプルなトレーニングを求める場合(参照モデルが不要)
- 選好データ(chosen/rejected のペア)がある場合
- DPO より高い性能が必要な場合
- 計算リソースが限られている場合
- シングルノードでのトレーニングで十分な場合
アルゴリズムの選択:
- SimPO: 最もシンプルで、性能も最良。参照モデルは不要
- DPO: 参照モデルをベースラインとして必要とする場合。より保守的
- PPO: 最大限の制御が可能。報酬モデルが必要で、設定が複雑
- GRPO: メモリ効率の良い RL。クリティックが不要
代わりに使用するツール:
- OpenRLHF: マルチノードの分散トレーニング、PPO/GRPO
- TRL: 1 つのフレームワークで複数の手法を使いたい場合
- DPO: 確立されたベースラインとの比較
よくある問題
問題: 損失の発散
学習率を下げる:
learning_rate: 3e-7 # Reduce from 5e-7
beta を下げる:
beta: 1.0 # Reduce from 2.0
問題: モデルが能力を忘れてしまう
SFT 正則化を追加する:
sft_weight: 0.1 # Add SFT loss component
問題: 選好の分離が不十分
beta と margin を上げる:
beta: 5.0 # Increase from 2.0
gamma_beta_ratio: 0.8 # Increase from 0.5
問題: トレーニング中の OOM
バッチサイズを下げる:
per_device_train_batch_size: 1
gradient_accumulation_steps: 16 # Maintain effective batch
勾配チェックポイントを有効にする:
gradient_checkpointing: true
応用トピック
損失関数: sigmoid 損失と hinge 損失の違い、数式による定式化、それぞれの使い分けについては references/loss-functions.md を参照してください。
ハイパーパラメータのチューニング: beta、gamma、学習率の選び方のガイド、およびモデルサイズ別の推奨設定については references/hyperparameters.md を参照してください。
データセットの準備: 選好データの形式、品質フィルタリング、カスタムデータセットの作成については references/datasets.md を参照してください。
ハードウェア要件
- GPU: NVIDIA A100/H100 を推奨
- VRAM:
- 7B モデル: 1× A100 40GB(DeepSpeed ZeRO-3)
- 8B モデル: 2× A100 40GB
- 70B モデル: 8× A100 80GB
- シングルノード: DeepSpeed ZeRO-3 で十分
- 混合精度: BF16 を推奨
メモリの最適化:
- DeepSpeed ZeRO-3(デフォルト設定)
- 勾配チェックポイント
- Flash Attention 2
リソース
- 論文: https://arxiv.org/abs/2405.14734 (NeurIPS 2024)
- GitHub: https://github.com/princeton-nlp/SimPO
- モデル: https://huggingface.co/princeton-nlp
- Alignment Handbook: https://github.com/huggingface/alignment-handbook