mcpField
S
simpo-training

simpo-training

github.com/orchestra-research開発14.1k958 回インストール19 週間前に更新
リポジトリ

simpo-training について

SimPOは、選好データを使ってLLMをファインチューニングする研究者や開発者向けの、参照モデル不要の選好最適化手法です。ベースモデルからの学習や指示チューニングに使えるスクリプトと設定を提供します。

主な機能

  1. 01参照モデル不要の選好最適化
  2. 02選好ペアを使った学習
  3. 03モデル学習スクリプト
  4. 04学習パラメーターの設定

活用シーン

  1. 01選好データによるモデルのファインチューニング
  2. 02指示チューニングモデルの学習
  3. 03数学やコード課題向けの学習調整

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/orchestra-research/ai-research-skills --skill simpo-training

インストール後、Claude Code で/simpo-trainingを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
datasets.md
hyperparameters.md
loss-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

リソース

コメント