直接選好最適化 (DPO) - Amazon SageMaker AI

直接選好最適化 (DPO)

直接設定最適化 (DPO) は、ペア比較データを使用してモデル出力を人間の好みに合わせる基盤モデルの効率的なファインチューニング方法です。このアプローチにより、より望ましいレスポンスに関する人間のフィードバックに基づいて、モデルの動作を直接最適化できます。

フルランク DPO と低ランクアダプター (LoRA) DPO の両方を使用できます。

データ形式の要件

フルランクと LoRA DPO の両方で、トレーニングデータ形式の要件は SFT に似ています。ただし、DPO の場合、最終ターンにはプレファレンスペアが必要です。DPO データ形式の例を次に示します。

// N-1 turns same as SFT format { "role": "assistant", "candidates": [ { "content": [ { "text": "..." } // content list can contain multiple 'text' objects ], "preferenceLabel": "preferred" }, { "content": [ { "text": "..." } // content list can contain multiple 'text' objects ], "preferenceLabel": "non-preferred" } ] }

別の完全な DPO テキストサンプルは次のとおりです。

{ "system": [ { "text": "..." } ], "messages":[ { "role": "user", "content": [ { "text": "..." } ] }, { "role": "assistant", "content": [ { "text": "..." } ] }, { "role": "user", "content": [ { "text": "..." } ] }, { "role": "assistant", "candidates": [ { "content": [ { "text": "..." } ], "preferenceLabel": "preferred" }, { "content": [ { "text": "..." } ], "preferenceLabel": "non-preferred" } ] } ], }

完全な DPO イメージサンプルは次のとおりです。

{ "system": [ { "text": "..." } ], "messages":[ { "role": "user", "content": [ { "text": "..." }, { "text": "..." }, { "image": { "format": "jpeg", "source": { "s3Location": { "uri": "s3://your-bucket/your-path/your-image.jpg", "bucketOwner": "your-aws-account-id" } } } } // "content" can have multiple "text" and "image" objects. // max image count is 10 ] }, { "role": "assistant", "content": [ { "text": "..." } ] }, { "role": "user", "content": [ { "text": "..." }, { "text": "..." }, { "image": { "format": "jpeg", "source": { "s3Location": { "uri": "s3://your-bucket/your-path/your-image.jpg", "bucketOwner": "your-aws-account-id" } } } } // "content" can have multiple "text" and "image" objects. // max image count is 10 ] }, { "role": "assistant", "candidates": [ { "content": [ { "text": "..." } ], "preferenceLabel": "preferred" }, { "content": [ { "text": "..." } ], "preferenceLabel": "non-preferred" } ] } ], }

入力データセットにはその他の制約が適用されます。詳細については、「データセットの制約」を参照してください。効果的なトレーニングのために、最低 1,000 個のプリファレンスペアを含めることをお勧めします。高品質のプリファレンスデータにより、より効率的な結果が得られます。

以下のシナリオでは、DPO を使用することをお勧めします。

  • 特定の人間の好みに合わせて調整する必要がある主観的な出力になるよう最適化する場合。

  • 希望するレスポンスパターンに合わせてモデルのトーン、スタイル、またはコンテンツ特性を調整する場合。

  • ユーザーのフィードバックとエラー分析に基づいて、既存のモデルをターゲットを絞って改善する場合。

  • さまざまなユースケースで一貫した出力品質を維持する場合。

  • 望ましいレスポンスパターンによる安全ガードレールを実装する場合。

  • 無報酬の強化学習でトレーニングする場合。

  • グレード付きデータやラベル付きデータではなく、プリファレンスデータのみを使用する場合。

  • 有益性、無害性、正直性など、微妙な調整タスクでモデルを改善する場合。

フルランク DPO

フルランク DPO で使用できる Amazon Nova パラメータは次のとおりです。

  • 実行設定

    • name: トレーニングジョブのわかりやすい名前。AWS マネジメントコンソール でジョブを区別しやすくなります。

    • model_type: 使用する Nova モデルバリアント。使用できるオプションは、amazon.nova-micro-v1:0:128kamazon.nova-lite-v1:0:300k または amazon.nova-pro-v1:0:300k です。

    • model_name_or_path: ベースモデルへのパス。nova-micro/prodnova-lite/prodnova-pro/prod、またはトレーニング後のチェックポイントの S3 パス (s3://<escrow bucket>/<job id>/outputs/checkpoints) から使用するモデルを選択します。

    • replicas: 分散トレーニングに使用するコンピューティングインスタンスの数。使用可能な値は選択したモデルによって異なります。Amazon Nova Micro では、2 個、4 個、または 8 個のレプリカをサポートしています。Amazon Nova Lite では、4 個、8 個、16 個、または 32 個のレプリカをサポートしています。Amazon Nova Pro では、6 個、12 個、または 24 個のレプリカをサポートしています。

    • data_s3_path: トレーニングデータセットの S3 の場所。これは JSONL ファイルです。このファイルは、クラスターと同じアカウントおよびリージョンに配置する必要があります。指定された S3 の場所は、同じアカウントとリージョンに存在している必要があります。

    • validation_data_s3_path: 検証データセットの S3 の場所。これは JSONL ファイルです。このファイルは、クラスターと同じ AWS アカウント およびリージョンに配置する必要があります。指定された S3 の場所は、同じアカウントとリージョンに存在している必要があります。

  • トレーニング設定

    • max_length: トークンの最大シーケンス長。これにより、トレーニングのコンテキストウィンドウのサイズが決まります。サポートされている最大値は、DPO で 32,768 トークンです。

      シーケンスを長くすると、メモリ要件の増加を犠牲にしてトレーニング効率が向上します。max_length パラメータをデータディストリビューションに一致させることをお勧めします。

  • トレーナー設定

    • max_epochs: トレーニングデータセットの完全なパスの数。最大値は 5 です。

      一般的に、データセットが大きいほど収束に必要なエポックが少なくなる一方、データセットが小さいほど収束に必要なエポックが多くなります。データのサイズに基づいてエポックの数を調整することをお勧めします。

  • モデル設定

    • hidden_dropout: 非表示状態の出力を削除する確率。この値を約 0.0~0.2 ずつ増やして、小さいデータセットのオーバーフィットを減らします。有効な値は 0~1 で、その範囲に限ります。

    • attention_dropout: 注意重みを削除する確率。このパラメータは一般化に役立ちます。有効な値は 0~1 で、その範囲に限ります。

    • ffn_dropout: フィードフォワードネットワーク出力を削除する確率。有効な値は 0~1 で、その範囲に限ります。

  • オプティマイザー設定

    • lr: 最適化中のステップサイズを制御する学習率。パフォーマンスを向上させるには、1e-6-1e-4 の間の値をお勧めします。有効な値は 0~1 で、その範囲に限ります。

    • name: オプティマイザーアルゴリズム。現在は、distributed_fused_adam のみがサポートされます。

    • weight_decay: L2 正則化の強度。値が大きいほど (0.01~0.1) 正則化が増加します。

    • warmup_steps: 学習率を徐々に増やすステップの数。これにより、トレーニングの安定性が向上します。有効な値は 1~20 で、その範囲に限ります。

    • min_lr: 減衰終了時の最小学習率。有効な値は 0~1 の範囲でその範囲に限られますが、学習率より小さくする必要があります。

  • DPO 設定

    • beta: モデルがトレーニングデータまたは元のモデルにどの程度合わせるかを決定します。有効な値は 0.001~0.5 で、その範囲に限ります。

      新しい設定をよりゆっくりと学習しながら、より多くの参照モデルの動作を保持するには、より大きな値 (0.5 など) を指定します。参照モデルの動作から逸脱するリスクがある新しい設定をより迅速に学習するには、より小さい値 (0.01~0.05 など) を指定します。

フルランク DPO のレシピ

DPO のフルランクレシピは以下のとおりです。

## Run config run: name: "my-dpo-micro-job" # A descriptive name for your training job model_type: "amazon.nova-micro-v1:0:128k" # Model variant specification, do not change model_name_or_path: "nova-micro/prod" # Base model path, do not change replicas: 2 # Number of compute instances for training, allowed values are 2, 4, 8 data_s3_path: s3:Replace with your S3 bucket name/input.jsonl validation_data_s3_path: [OPTIONAL] s3:your S3 bucket name/input.jsonl output_s3_path: [S3_PATH_TO_STORE_MANIFEST] ## Training specific configs training_config: max_length: 32768 # Maximum context window size (tokens). global_batch_size: 64 # Global batch size, allowed values are 16, 32, 64. trainer: max_epochs: 2 # Number of training epochs model: hidden_dropout: 0.0 # Dropout for hidden states, must be between 0.0 and 1.0 attention_dropout: 0.0 # Dropout for attention weights, must be between 0.0 and 1.0 ffn_dropout: 0.0 # Dropout for feed-forward networks, must be between 0.0 and 1.0 optim: lr: 1e-5 # Learning rate name: distributed_fused_adam # Optimizer algorithm, do not change adam_w_mode: true # Enable AdamW mode eps: 1e-06 # Epsilon for numerical stability weight_decay: 0.0 # L2 regularization strength, must be between 0.0 and 1.0 betas: # Adam optimizer betas, must be between 0.0 and 1.0 - 0.9 - 0.999 sched: warmup_steps: 10 # Learning rate warmup steps constant_steps: 0 # Steps at constant learning rate min_lr: 1e-6 # Minimum learning rate, must be lower than lr dpo_cfg: beta: 0.1 # Strength of preference enforcement. Limits: [0.001, 0.5] peft: peft_scheme: null # Disable LoRA, trigger full rank fine tuning

低ランクアダプター DPO

低ランクアダプター DPO で使用できる Amazon Nova パラメータは次のとおりです。

  • 実行設定

    • name: トレーニングジョブのわかりやすい名前。AWS マネジメントコンソール でジョブを区別しやすくなります。

    • model_type: 使用する Nova モデルバリアント。使用できるオプションは、amazon.nova-micro-v1:0:128kamazon.nova-lite-v1:0:300k または amazon.nova-pro-v1:0:300k です。

    • model_name_or_path: ベースモデルへのパス。nova-micro/prodnova-lite/prodnova-pro/prod、またはトレーニング後のチェックポイントの S3 パス (s3://<escrow bucket>/<job id>/outputs/checkpoints) から使用するモデルを選択します。

    • replicas: 分散トレーニングに使用するコンピューティングインスタンスの数。使用可能な値は選択したモデルによって異なります。Amazon Nova Micro では、2 個、4 個、または 8 個のレプリカをサポートしています。Amazon Nova Lite では、4 個、8 個、16 個、または 32 個のレプリカをサポートしています。Amazon Nova Pro では、6 個、12 個、または 24 個のレプリカをサポートしています。

  • トレーニング設定

    • max_length: トークンの最大シーケンス長。これにより、トレーニングのコンテキストウィンドウのサイズが決まります。サポートされている最大値は、DPO で 32,768 トークンです。

      シーケンスを長くすると、メモリ要件の増加を犠牲にしてトレーニング効率が向上します。max_length パラメータをデータディストリビューションに一致させることをお勧めします。

  • トレーナー設定

    • max_epochs: トレーニングデータセットの完全なパスの数。最大値は 5 です。

      一般的に、データセットが大きいほど収束に必要なエポックが少なくなる一方、データセットが小さいほど収束に必要なエポックが多くなります。データのサイズに基づいてエポックの数を調整することをお勧めします。

  • モデル設定

    • hidden_dropout: 非表示状態の出力を削除する確率。この値を約 0.0~0.2 ずつ増やして、小さいデータセットのオーバーフィットを減らします。有効な値は 0~1 で、その範囲に限ります。

    • attention_dropout: 注意重みを削除する確率。このパラメータは一般化に役立ちます。有効な値は 0~1 で、その範囲に限ります。

    • ffn_dropout: フィードフォワードネットワーク出力を削除する確率。有効な値は 0~1 で、その範囲に限ります。

  • オプティマイザー設定

    • lr: 最適化中のステップサイズを制御する学習率。パフォーマンスを向上させるには、1e-6-1e-4 の間の値をお勧めします。有効な値は 0~1 で、その範囲に限ります。

    • name: オプティマイザーアルゴリズム。現在は、distributed_fused_adam のみがサポートされます。

    • weight_decay: L2 正則化の強度。値が大きいほど (0.01~0.1) 正則化が増加します。

    • warmup_steps: 学習率を徐々に増やすステップの数。これにより、トレーニングの安定性が向上します。有効な値は 1~20 で、その範囲に限ります。

    • min_lr: 減衰終了時の最小学習率。有効な値は 0~1 の範囲でその範囲に限られますが、学習率より小さくする必要があります。

  • DPO 設定

    • beta: モデルがトレーニングデータまたは元のモデルにどの程度合わせるかを決定します。有効な値は 0.001~0.5 で、その範囲に限ります。

      新しい設定をよりゆっくりと学習しながら、より多くの参照モデルの動作を保持するには、より大きな値 (0.5 など) を指定します。参照モデルの動作から逸脱するリスクがある新しい設定をより迅速に学習するには、より小さい値 (0.01~0.05 など) を指定します。

  • LoRA 設定パラメータ

    • peft_scheme: lora に設定すると Low-Rank Adaptation が有効になり、より効率的で小さな出力モデルが生成されます。次の LoRA 固有のプロパティも利用できます。

      • alpha: LoRA 重みのスケーリング係数。これは通常、adapter_dim と同じ値に設定されます。

      • adapter_dropout: LoRA パラメータの正規化パラメータ。

LoRA DPO のレシピ

LoRA DPO のレシピは以下のとおりです。

## Run config run: name: "my-lora-run" # A descriptive name for your training job model_type: "amazon.nova-lite-v1:0:300k" # Model variant specification, do not change model_name_or_path: "nova-lite/prod" # Base model path, do not change replicas: 4 # Number of compute instances for training. All supported values: {4, 8, 16} data_s3_path: s3:Replace with your S3 bucket name/input.jsonl validation_data_s3_path: [OPTIONAL] s3:your S3 bucket name/input.jsonl output_s3_path: [S3_PATH_TO_STORE_MANIFEST] ## Training specific configs training_config: max_length: 16384 # Maximum context window size (tokens). Should be between [1024, 32768] and multiple of 1024. # Note: Image dataset for DPO has a limit on 20k samples and 16384 max_length global_batch_size: 64 # Total samples per step. Limits: {16, 32, 64, 128, 256} trainer: max_epochs: 2 # Number of training epochs model: hidden_dropout: 0.0 # Dropout for hidden states. Limits: [0.0, 1.0] attention_dropout: 0.0 # Dropout for attention weights. Limits: [0.0, 1.0] ffn_dropout: 0.0 # Dropout for feed-forward networks. Limits: [0.0, 1.0] optim: lr: 1e-5 # Learning rate name: distributed_fused_adam # Optimizer algorithm, do not change adam_w_mode: true # Enable AdamW mode eps: 1e-08 # Epsilon for numerical stability weight_decay: 0.01 # L2 regularization strength betas: # Adam optimizer betas. Limits: [0.0, 1.0] - 0.9 - 0.999 sched: warmup_steps: 10 # Learning rate warmup steps constant_steps: 0 # Steps at constant learning rate min_lr: 1e-6 # Minimum learning rate dpo_cfg: beta: 0.01 # Strength of preference enforcement. Limits: [0.001, 0.5] peft: peft_scheme: "lora" # Enable LoRA for parameter-efficient fine-tuning lora_tuning: loraplus_lr_ratio: 20.0 # LoRA+ learning rate scaling factor. Limits: [0.0, 100.0] alpha: 64 # Scaling factor for LoRA weights. [32, 64, 96, 128, 160, 192] adapter_dropout: 0.01 # Regularization for LoRA parameters. Limits: [0.0, 1.0]
制限

DPO には次の制限事項があります。

  • 中間チェックポイントは評価のために保存されず、中間チェックポイントから再開することはできません。最後のチェックポイントのみが保存されます。

  • MLflow ログ記録はサポートされていません。

  • ハイパーパラメータを調整するには、「ハイパーパラメータの選択」のガイダンスに従います。