近似ポリシー最適化 (PPO) - Amazon SageMaker AI

近似ポリシー最適化 (PPO)

近似ポリシー最適化 (PPO) は、複数の機械学習モデルを使用してモデルをトレーニングおよびスコアリングするプロセスです。以下のモデルは PPO プロセスの一部です。

  • Actor トレーニングモデルまたはポリシーモデル: エポックごとにファインチューニングおよび更新される、教師ありファインチューニング (SFT) モデル。更新は、プロンプトをサンプリングし、補完を生成し、クリップされた代理目的を使用して重みを更新することによって行われます。これにより、トークンごとのログ収益性の変更が制限され、その結果、各ポリシーステップが前のステップに近似し、トレーニングの安定性が維持されます。

  • Actor 生成モデル: Reward モデルと Critic モデルによって判断されることになるプロンプトの補完またはレスポンスを生成するモデル。このモデルの重みは、各エポックごとに Actor トレーニングモデルまたはポリシーモデルから更新されます。

  • 報酬モデル: Actor 生成モデルのスコアリングに使用される、凍結されている重みを持つモデル。

  • Critic モデル: Actor 生成モデルのスコアリングに使用される、凍結されていない重みを持つモデル。このスコアは、多くの場合、残りのトークンを生成するときに Actor が受け取る合計報酬の見積もりとして表示されます。

  • Anchor モデル: Actor トレーニングモデルとベースモデル間の KL ダイバージェンスを計算するために使用される、凍結された重みをもつ SFT モデル。Anchor モデルでは、Actor モデルの更新がベースモデルと比較してそれほど劇的にならないようになっています。大幅な変更は、不安定な状態やパフォーマンスの低下につながる可能性があります。

トレーニングデータは JSONL 形式にする必要があります。各行には、トレーニング例を表す 1 つの JSON オブジェクトが含まれます。以下がその例です。

{ "turns": ["string", "string", ...], // Required "turns_to_mask": [integer, integer, ...], // Required "reward_category": "string", // Required "meta_data": {} // Optional }
  • turns は、ダイアログシーケンスを表す会話文字列配列の配列です。この行には、システムプロンプト、ユーザーメッセージ、ボットレスポンスが含まれます。ユーザーメッセージは通常、モデル出力の開始位置を示す「Bot:」で終わります。例えば、[["System prompt"], ["User: Question Bot:"], ["Bot response"]]

  • turns_to_mask は、グラデーション更新を受信しないターンを識別する 0 ベースのインデックスの配列です。マスクされたターンは通常、システムプロンプトとユーザーのターンです。たとえば、[0, 1, 3] はシステムプロンプトとユーザーメッセージ (最初のメッセージと 3 番目のメッセージ) をマスクします。

  • reward_category は、評価するモデルパフォーマンスの側面を識別する文字列です。トレーニング中に適切な報酬モデルカテゴリを選択するために使用されます。報酬カテゴリは、defaultmathcodingifragrai の各報酬カテゴリで使用できます。

  • meta_data は、追加のコンテキスト情報またはグラウンドトゥルース情報を含むオプションのオブジェクトです。これには、識別子、ソース情報、または会話コンテキストが含まれます。構造はデータセットのニーズに応じて柔軟です。

以下はレコードの例です。

{ "turns": ["You are a helpful AI assistant.", "User: What is ML? Bot:", "Machine learning is...", "User: Examples? Bot:", "Email spam filtering is..." ], "turns_to_mask": [0, 1, 3], "reward_category": "default", "meta_data": { "messages": [{ "role": "system", "content": "You are a helpful AI assistant." }, { "role": "user", "content": "What is ML?" }, { "role": "assistant", "content": "Machine learning is..." }, { "role": "user", "content": "Examples?" }, { "role": "assistant", "content": "Email spam filtering is..." } ] } }

報酬モデリングフレームワークは、堅牢なモデル収束を容易にするために、異なるカテゴリ別目標にわたって多次元最適化を実装します。報酬カテゴリは、モデルを最適化する必要があるタスクに基づいて選択する必要があります。

タスクに適したフレームワークを選択するには、次のガイドラインをお勧めします。

  • default: 標準的な会話タスクと基本的なやり取りのための汎用オプティマイザー。一般的な会話とディスカッション、基本的な記述タスク、簡単な質問への回答、および専門的ではないナレッジクエリに使用されます。

    以下がその例です。

    { "turns": ["Write a summary of climate change"], "turns_to_mask": [0], "reward_category": "default" }
  • math: 数学的計算と数値推論タスクのための特殊なオプティマイザー。数学的な問題解決、算術計算、代数方程式、幾何学的問題、統計分析に使用されます。

    以下がその例です。

    { "turns": ["Calculate the derivative of x²"], "turns_to_mask": [0], "reward_category": "math" }
  • coding: プログラミングおよびソフトウェア開発関連のクエリ専用のカテゴリ。コード実装、デバッグ支援、アルゴリズム設計、技術ドキュメント、システムアーキテクチャに関する質問に使用されます。

    以下がその例です。

    { "turns": ["Write a function to check if a string is palindrome"], "turns_to_mask": [0], "reward_category": "coding" }
  • if: 正確な手順の実行とステップバイステップガイダンスを必要とするタスクのカテゴリ。マルチステップ手順、シーケンシャル命令、複雑なタスク分解、プロセスのドキュメント化に使用されます。

    以下がその例です。

    { "turns": ["Provide steps to deploy a web application"], "turns_to_mask": [0], "reward_category": "if" }
  • rag: 取得したコンテキスト情報に基づいてクエリに回答する必要があるタスクの報酬カテゴリ。提供された参考資料から直接回答を導き出す必要がある場合に使用され、取得した情報の範囲を超えることなく事実に基づくコンテンツを合成し、回答が一般的な知識ではなく提供されたコンテキストに基づいているようにします。

    以下がその例です。

    { "turns": ["The Synthesis Report integrates findings from all six IPCC assessment cycles, revealing that global surface temperature has increased 1.1°C from 1850-1900 to 2011-2020, with human activities unequivocally identified as the cause of this warming. Alarmingly, current policies put the world on track for 3.2°C warming by 2100. The document identifies 5 key climate system "tipping points" approaching and emphasizes that greenhouse gas emissions must decline 43% by 2030 (compared to 2019 levels) to limit warming to 1.5°C. Climate-related risks will escalate with every increment of warming, with loss and damage disproportionately affecting vulnerable populations. Despite some progress, climate adaptation remains uneven with significant gaps, and financial flows continue to fall below levels needed for mitigation goals.", "What were the key findings of the latest IPCC climate report?"], "turns_to_mask": [0, 0], "reward_category": "rag" }
  • rai: 公平性、透明性、倫理観などの責任ある AI 原則を適用する必要があるタスクの報酬カテゴリ。AI システムの潜在的なバイアスを評価し、プライバシー上の考慮事項を確保し、倫理的ジレンマに対処し、包括的な設計原則を促進するために使用されます。

    以下がその例です。

    { "turns": ["Identify potential bias concerns when developing a loan approval algorithm and suggest mitigation strategies"], "turns_to_mask": [0], "reward_category": "rai" }
マスキングターン

トレーニングデータセットでは、トレーニング中に勾配更新を受信する会話ターンを制御するうえで turns_to_maskパラメータが重要となります。このインデックスの配列は、生成する対話のどの部分をモデルが学習すべきか、どの部分をコンテキストとしてのみ扱うべきかを決定します。適切なマスキングにより、モデルはパフォーマンスを低下させる可能性のあるシステムプロンプトやユーザー入力のトレーニングを回避しながら、適切なレスポンスパターンを学習できます。

マスキングには次のガイダンスをお勧めします。

  • 常にインデックス 0 をマスクする - システムプロンプトが勾配の更新を受信しなくなります。

  • 常にユーザーターンをマスクする - モデルがユーザー入力の生成を学習できないようにします。

  • パターンの整合性 - マルチターンダイアログには (0, 1, 3, 5) など、同様の会話構造に同一のマスキングパターンを使用します。

  • 選択的トレーニング - 初期のボットレスポンスをマスクして、最終レスポンスの改善にトレーニングを集中させます。

  • Chain-of-thought 保持 - 推論シーケンスでトレーニングするときに、システムとユーザーターンのみをマスクします。

  • 品質フィルタリング - パフォーマンスの低下を防ぐために、低品質のアシスタントレスポンスをマスクします。

  • コンテキストの最適化 - マスクされたターンが後続のレスポンスに必要な必須コンテキストを削除しないようにします。

効果的なマスキングの鍵は、トレーニングメトリクスと検証パフォーマンスをモニタリングして、目的のモデル出力に勾配の更新を集中させながら、マスキング戦略が必要なコンテキストを保持するかどうかを特定することです。

KL 発散損失を有効にする

KL 発散損失を有効にするには、アンカーサーバーを有効にして、元の分散から現在のポリシーの発散を計算する必要があります。KL 損失タイプを指定し、係数を 0 以外の値にする必要があります。係数値が大きいほど、モデルは元のポリシーから大きく逸脱することがなくなり、全般的なパフォーマンスへの変更が少なくなります。係数値が低いと、以前のポリシーからの逸脱が大きくなり、ターゲットメトリクスのパフォーマンスは向上しますが、全般的なパフォーマンスには影響します。

ppo_anchor: max_length: 8192 trainer: num_nodes: ${recipes.run.cm_replicas} model: global_batch_size: 32 ppo_actor_train: model: ######## Use KL in actor loss ######## kl_loss_type: low_var_kl kl_loss_coeff: 0.1 ######## Use KL in reward model ###### kl_reward_penalty_coeff: 0.1
学習率

Critic モデルとポリシーモデルの学習率は調整でき、3e-6 がデフォルトのバランスの取れた選択です。学習率が高くなると通常、トレーニングが不安定になります。これは、KL の相違の急増や異常なポリシー動作によって特定できます。学習率が低いと、報酬が停滞しており、ポリシーの更新が最小限であることを示す収束の問題が発生したり、学習が遅くなったりする可能性があります。KL の発散、報酬スコア、値損失を定期的にモニタリングすることで、トレーニング中に学習率を調整するかどうかを判断できます。

ppo_critic: model: optim: lr: 3e-6 ppo_actor_train: model: optim: lr: 3e-06
グローバルバッチサイズ

グローバルバッチサイズは Amazon Nova の PPO パフォーマンスに大きな影響を与えます。バッチサイズを大きくすると、一般的にトレーニングの安定性と勾配の推定が改善され、並列処理がより効率的になります。ただし、バッチサイズが非常に大きいと、リターンが低下し、使用可能なメモリによって制約され、学習率やその他のハイパーパラメータとの慎重なバランスが必要になる場合があります。

ppo_actor_train: model: global_batch_size: 160

PPO で調整できる Amazon Nova パラメータは次のとおりです。

  • 実行設定

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

    • rm_replicas: 報酬モデルに使用されるコンピューティングインスタンスの数。任意のモデルサイズに 1 つのレプリカを使用することをお勧めします。

    • cm_replicas: Critic モデルに使用されるコンピューティングインスタンスの数。任意のモデルサイズに 1 つのレプリカを使用することをお勧めします。

    • actor_generation_replicas: アクターの生成に使用されるコンピューティングインスタンスの数。使用可能な値は選択したモデルによって異なります。Amazon Nova Micro では 1 個のレプリカをサポートしています。Amazon Nova Lite では、1 個または 2 個のレプリカをサポートしています。Amazon Nova Pro では、1 個または 2 個のレプリカをサポートしています。

    • am_replicas: アンカーモデルに使用されるコンピューティングインスタンスの数。任意のモデルサイズに 1 つのレプリカを使用することをお勧めします。

  • アクタートレーニング設定 (ポリシー設定)

    • max_steps: アクタートレーニングモデルをファインチューニングまたはトレーニングするステップの最大数。ここでは、1 つのステップをロールアウトとして定義し、次にサンプル数 global_batch_size を使用してアクタートレーニングモデルをトレーニングします。1 つのエポックは global_batch_size * trajectory_buffer_scale として定義されます。

      ここで選択する値は、ユースケースとデータセットの複雑さによって異なります。65 エポックまたは 520 ステップから開始することをお勧めします。これは、エポックの数に trajectory_buffer_scale の値を乗じたものです。ただし、一部のタスクでは、同じパフォーマンスを達成するためにより長い PPO トレーニング時間が必要です。

      PPO の場合、ml-flow コンソールからの報酬モデルスコアの飽和や平均アクション長などのトレーニングメトリクスは、評価に最適なポイントを特定するのに役立ちます。

    • actor_model_max_length: 完了を生成するためにアクター生成コンポーネントに送信される入力データの最大長。

    • reward_model_max_length: 完了をスコアリングするために報酬サーバーに送信される入力データの最大長。

    • trajectory_buffer_scale: このバッファは、重みを更新して新しいロールアウトを生成する前に、古いアクタートレーニング (ポリシー) モデルを使用して生成されたロールアウトの数を表します。サポートされている値は 1、2、4、8、16 です。

      trajectory_buffer_scale が 1 の場合、トレーニングはポリシーに従っています。つまり、ロールアウトは最新のモデルの重みで生成されますが、スループットが低下します。16 の場合、モデルはわずかにポリシーに違反していますが、スループットは高くなります。各モデルで 8 から始めることをお勧めします。

    • kl_reward_penalty_coeff: これは、更新がそれほど劇的にならず、ポリシーがベースモデルまたは SFT モデルからドラフトされないようにする KL 発散項です。

    • kl_loss_coeff: この値は、KL 発散ペナルティが PPO の全体的なトレーニング目標にどの程度影響するかを制御します。

    • kl_loss_type: この値では、現在のポリシーディストリビューションと参照ポリシーディストリビューション間の相違を計算する方法を指定します。使用可能な kl_loss_types は、kl (標準 KL 発散)、mse (平均二乗誤差)、abs (対数確率間の絶対差)、low_var_kl (低分散 KL 近似) です。

    • model.clip_ratio: PPO のアクタークリップ比率 (ε) は、各更新中にポリシーを変更できる量を制限するハイパーパラメータです。

    • model.optim.lr: アクターモデルのモデル損失トレーニングの代理に使用される学習率。

    • model.lam: 優位推定プロセスの一部。λ が高いほど長期的な報酬に重みが付けられますが、分散が大きくなります。一方、λ が低いほど分散が低くなり、バイアスが多い即時報酬に重点が置かれます。

    • model.ent_coeff: PPO のエントロピー損失は、決定論的すぎる場合 (つまり、常に高い信頼性で同じアクションを選択する場合) にポリシーにペナルティを課すことで探索を促進します。

  • 報酬モデル設定

    • global_batch_size: 報酬モデルを使用して完了をスコアリングするためのバッチサイズ。ppo_actor_train.model.global_batch_sizeppo_reward.model.global_batch_size より大きい場合、複数のバッチで処理されます。ppo_actor_train.model.global_batch_size % ppo_reward.model.global_batch_size は 0 に等しくなければなりません。

    • max_length: 報酬モデルの最大コンテキスト長。これは ppo_actor_train.model.max_length と同じである必要があります。

  • Critic モデル設定

    • global_batch_size: Critic モデル値のバッチサイズ。Critic モデルは、アクターモデルによって提供されるレスポンス内の各トークンの値の見積もりを提供します。バッチサイズは推論とトレーニングの両方に使用されます。

      ppo_actor_train.model.global_batch_size % ppo_critic.model.global_batch_size は 0 および ppo_actor_train.model.global_batch_size * ppo_actor_train.model.trajectory_buffer_size % ppo_critic.model.global_batch_size == 0 と等しくなければなりません。

    • max_length: Critic モデルの最大コンテキスト長。これは ppo_actor_train.model.max_length と同じである必要があります。

    • model.optim.lr: アクターモデルのモデル損失トレーニングの代理に使用される学習率。

  • アンカーモデル設定

    • global_batch_size: 凍結された SFT またはアンカーモデルのログを生成するためのバッチサイズ。ppo_actor_train.model.global_batch_size % ppo_anchor.model.global_batch_size は 0 に等しくなければなりません。

    • max_length: 報酬モデルの最大コンテキスト長。これは ppo_actor_train.model.max_length と同じである必要があります。

  • アクター生成モデル設定

    • actor_model_max_length: アクターモデル生成コンポーネントの最大コンテキスト長。これは ppo_actor_train.model.max_length と同じである必要があります。

PPO のレシピ

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

## Run config run: name: ndry-ppo-pro model_type: amazon.nova-pro-v1:0:300k model_name_or_path: nova-pro/prod data_s3_path: s3://testing/train.jsonl # Your training data S3 path actor_train_replicas: 6 # Actor train model replicas rm_replicas: 1 # Reward model replicas cm_replicas: 1 # Critic model replicas actor_generation_replicas: 2 # Actor generation model replicas am_replicas: 1 # Anchor model replicas ## Training config for each PPO component ppo_reward: max_length: 8192 # model architecture max length trainer: num_nodes: ${recipes.run.rm_replicas} model: global_batch_size: 16 ppo_critic: max_length: 8192 trainer: num_nodes: ${recipes.run.cm_replicas} model: global_batch_size: 16 optim: lr: 3e-6 name: distributed_fused_adam adam_w_mode: true eps: 1e-06 weight_decay: 0.0 betas: - 0.9 - 0.999 ppo_anchor: max_length: 8192 trainer: num_nodes: ${recipes.run.am_replicas} model: global_batch_size: 16 ppo_actor_generation: actor_model_max_length: 8192 trainer: num_nodes: ${recipes.run.actor_generation_replicas} ppo_actor_train: max_length: 8192 max_steps: 520 # Stopping criteria Desired epoch num * trajectory_buffer_scale actor_model_max_length: 8192 # truncate input data to max length reward_model_max_length: 8192 # truncate input data to max length trajectory_buffer_scale: 8 trainer: num_nodes: ${recipes.run.actor_train_replicas} model: global_batch_size: 160 ent_coeff: 0 clip_ratio: 0.2 lam: 1 kl_loss_coeff: 0.0 kl_loss_type: low_var_kl kl_reward_penalty_coeff: 0.0 hidden_dropout: 0.0 # Dropout probability for hidden state transformer. attention_dropout: 0.0 # Dropout probability in the attention layer. ffn_dropout: 0.0 # Dropout probability in the feed-forward layer. optim: lr: 3e-06 name: distributed_fused_adam # only this one is available for p0. adam_w_mode: true eps: 1e-08 weight_decay: 0.0 betas: - 0.9 - 0.999
制限

PPO には次の制約事項があります。

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

  • マルチモーダルデータセットはサポートされていません。

  • トレーニングジョブは自動的に停止されません。HyperPod CLI を使用してジョブを停止する必要があります。

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

  • Critic トレーニングメトリクスは TensorBoard ではサポートされていません。

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