RFT 評価 - Amazon SageMaker AI

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

RFT 評価

RFT 評価とは

RFT 評価では、強化学習トレーニングの前、最中、または後にカスタム報酬関数を使用してモデルのパフォーマンスを評価できます。事前定義されたメトリクスを使用する標準評価とは異なり、RFT 評価では、特定の要件に基づいてモデル出力をスコアリングする Lambda 関数を通じて独自の成功基準を定義できます。

RFT で を評価する理由

RL ファインチューニングプロセスに以下があるかどうかを判断するには、評価が不可欠です。

  • 特定のユースケースとヒューマン値とのモデルアライメントを改善

  • 主要なタスクでモデル機能を維持または改善

  • 事実の軽減、冗長性の向上、他のタスクのパフォーマンスの低下などの意図しない副作用を回避しました

  • 報酬関数で定義されたカスタム成功基準を満たした

RFT 評価を使用するタイミング

以下のシナリオでは RFT 評価を使用します。

  • RFT トレーニング前: 評価データセットにベースラインメトリクスを確立する

  • RFT トレーニング中: 中間チェックポイントでトレーニングの進行状況をモニタリングする

  • RFT トレーニング後: 最終モデルが要件を満たしていることを確認する

  • モデルの比較: 一貫した報酬基準を使用して複数のモデルバージョンを評価する

注記

カスタムのドメイン固有のメトリクスが必要な場合は、RFT 評価を使用します。汎用評価 (精度、多重度、BLEU) には、標準的な評価方法を使用します。

データ形式の要件

入力データ構造

RFT 評価入力データは、OpenAI 強化ファインチューニング形式に従う必要があります。各例は、以下を含む JSON オブジェクトです。

  • messagessystemおよび userロールとの会話ターンの配列

  • reference_answer – 報酬関数がスコアリングに使用する予想される出力またはグラウンドトゥルースデータ

データ形式の例

{ "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Solve for x. Return only JSON like {\"x\": <number>}. Equation: 2x + 5 = 13" } ] } ], "reference_answer": { "x": 4 } }

現在の制限事項

  • テキストのみ: マルチモーダル入力 (イメージ、オーディオ、ビデオ) はサポートされていません

  • シングルターン会話: はシングルユーザーメッセージのみをサポートします (マルチターンダイアログなし)

  • JSON 形式: 入力データは JSONL 形式である必要があります (1 行あたり 1 つの JSON オブジェクト)

  • モデル出力: 指定されたモデルから生成された完了時に評価が実行されます。

評価レシピの準備

サンプルノートブック

完全な例については、「評価ノートブック」を参照してください。

サンプルレシピ設定

run: name: nova-lite-rft-eval-job model_type: amazon.nova-lite-v1:0:300k model_name_or_path: s3://escrow_bucket/model_location # [MODIFIABLE] S3 path to your model or model identifier replicas: 1 # [MODIFIABLE] For SageMaker Training jobs only; fixed for HyperPod jobs data_s3_path: "" # [REQUIRED FOR HYPERPOD] Leave empty for SageMaker Training jobs and use TrainingInput in sagemaker python SDK output_s3_path: "" # [REQUIRED] Output artifact S3 path for evaluation results evaluation: task: rft_eval # [FIXED] Do not modify strategy: rft_eval # [FIXED] Do not modify metric: all # [FIXED] Do not modify # Inference Configuration inference: max_new_tokens: 8192 # [MODIFIABLE] Maximum tokens to generate top_k: -1 # [MODIFIABLE] Top-k sampling parameter top_p: 1.0 # [MODIFIABLE] Nucleus sampling parameter temperature: 0 # [MODIFIABLE] Sampling temperature (0 = deterministic) top_logprobs: 0 # [MODIFIABLE] Set between 1-20 to enable logprobs output # ============================================================================= # Bring Your Own Reinforcement Learning Environment # ============================================================================= rl_env: reward_lambda_arn: arn:aws:lambda:<region>:<account_id>:function:<reward-function-name>

プリセット報酬関数

オープンソースの verl ライブラリから 2 つのプリセット報酬関数 (prime_codeprime_math) を Lambda レイヤーとして利用でき、RFT Lambda 関数と簡単に統合できます。

概要:

これらのプリセット関数は、以下に対してout-of-the-box評価機能を提供します。

  • prime_code – コードの生成と正確性の評価

  • prime_math – 数学的な推論と問題解決の評価

Quick Setup

  1. nova-custom-eval-sdk リリースから Lambda レイヤーをダウンロードします。

  2. コマンドラインインターフェイス (AWS CLI) AWS を使用して Lambda レイヤーを公開する:

    aws lambda publish-layer-version \ --layer-name preset-function-layer \ --description "Preset reward function layer with dependencies" \ --zip-file fileb://universal_reward_layer.zip \ --compatible-runtimes python3.9 python3.10 python3.11 python3.12 \ --compatible-architectures x86_64 arm64
  3. AWS マネジメントコンソールの Lambda 関数に Layer を追加します (カスタム Layer から preset-function-layer を選択し、numpy 依存関係に AWSSDKPandas-Python312 も追加します)。

  4. Lambda コードで をインポートして使用します。

    from prime_code import compute_score # For code evaluation from prime_math import compute_score # For math evaluation

prime_code 関数

テストケースに対してコードを実行し、正確性を測定することで、Python コード生成タスクを評価します。

入力データセット形式の例

{"messages":[{"role":"user","content":"Write a function that returns the sum of two numbers."}],"reference_answer":{"inputs":["3\n5","10\n-2","0\n0"],"outputs":["8","8","0"]}} {"messages":[{"role":"user","content":"Write a function to check if a number is even."}],"reference_answer":{"inputs":["4","7","0","-2"],"outputs":["True","False","True","True"]}}

主な特徴

  • マークダウンコードブロックからのコードの自動抽出

  • 関数検出と通話ベースのテスト

  • タイムアウト保護を使用したテストケースの実行

  • 構文の検証とコンパイルのチェック

  • トレースバックを使用した詳細なエラーレポート

prime_math 関数

シンボリック数学のサポートにより、数学的な推論と問題解決能力を評価します。

入力形式

{"messages":[{"role":"user","content":"What is the derivative of x^2 + 3x?."}],"reference_answer":"2*x + 3"}

主な特徴

  • SymPy を使用したシンボリック数学評価

  • 複数の回答形式 (LaTeX、プレーンテキスト、シンボリック)

  • 数学的同等性チェック

  • 式の正規化と簡素化

データ形式の要件

コード評価用

  • 入力: 関数引数の配列 (プロパティタイプ: 整数、文字列など)

  • 出力: 予想される戻り値の配列 (プロパティタイプ: ブール値、数値など)

  • コード: 関数定義が明確な Python である必要があります

数学評価用

  • 参照回答: 数式または数値

  • レスポンス: LaTeX、プレーンテキスト、シンボリック表記のいずれか

  • 同等性: 文字列マッチングだけでなく、シンボリックにチェックされます

ベストプラクティス

  • テストケースで適切なデータ型を使用する (整数と文字列、ブール値と「True」)

  • コードの問題で明確な関数署名を提供する

  • テスト入力にエッジケースを含める (ゼロ、負の数、空の入力)

  • 参照回答で数式を一貫してフォーマットする

  • デプロイ前にサンプルデータを使用して報酬関数をテストする

エラー処理

どちらの関数にも、以下の堅牢なエラー処理が含まれています。

  • 生成されたコードのコンパイルエラー

  • 実行中のランタイム例外

  • 不正な形式の入力データ

  • 無限ループのタイムアウトシナリオ

  • 無効な数式

報酬関数の作成

Lambda ARN の要件

Lambda ARN は次の形式に従う必要があります。

"arn:aws:lambda:*:*:function:*SageMaker*"

Lambda にこの命名スキームがない場合、ジョブはこのエラーで失敗します。

[ERROR] Unexpected error: lambda_arn must contain one of: ['SageMaker', 'sagemaker', 'Sagemaker'] when running on SMHP platform (Key: lambda_arn)

Lambda リクエスト形式

Lambda 関数は次の形式でデータを受け取ります。

[ { "id": "sample-001", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Do you have a dedicated security team?" } ] }, { "role": "nova_assistant", "content": [ { "type": "text", "text": "As an AI developed by Company, I don't have a dedicated security team..." } ] } ], "reference_answer": { "compliant": "No", "explanation": "As an AI developed by Company, I do not have a traditional security team..." } } ]
注記

メッセージ構造には、入力データ形式に一致するネストされたcontent配列が含まれます。ロールを含む最後のメッセージには、モデルが生成したレスポンスnova_assistantが含まれます。

Lambda レスポンス形式

Lambda 関数は次の形式でデータを返す必要があります。

[ { "id": "sample-001", "aggregate_reward_score": 0.75, "metrics_list": [ { "name": "accuracy", "value": 0.85, "type": "Metric" }, { "name": "fluency", "value": 0.90, "type": "Reward" } ] } ]

レスポンスフィールド

  • id – 入力サンプル ID と一致する必要があります

  • aggregate_reward_score – 総合スコア (通常は 0.0~1.0)

  • metrics_list – 以下を使用した個々のメトリクスの配列。

    • name – メトリクス識別子 (「精度」、「流暢さ」など)

    • value – メトリクススコア (通常は 0.0~1.0)

    • type – 「メトリクス」 (レポート用) または「報酬」 (トレーニングに使用)

IAM アクセス許可

必要なアクセス許可

SageMaker 実行ロールには、Lambda 関数を呼び出すためのアクセス許可が必要です。このポリシーを SageMaker 実行ロールに追加します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:region:account-id:function:function-name" } ] }

Lambda 実行ロール

Lambda 関数の実行ロールには、基本的な Lambda 実行アクセス許可が必要です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:*" } ] }

Lambda 関数が他の AWS サービス (参照データの場合は S3、ログ記録の場合は DynamoDB など) にアクセスする場合は、それらのアクセス許可を Lambda 実行ロールに追加します。

評価ジョブの実行

  1. データの準備 – データ形式の要件に従って評価データをフォーマットし、JSONL ファイルを S3 にアップロードします。 s3://your-bucket/eval-data/eval_data.jsonl

  2. レシピの設定 – 設定でサンプルレシピを更新します。

    • model_name_or_path をモデルの場所に設定する

    • lambda_arn を報酬関数 ARN に設定する

    • output_s3_path 必要な出力場所に を設定する

    • 必要に応じてinferenceパラメータを調整する

    レシピを として保存する rft_eval_recipe.yaml

  3. 評価を実行する – 提供されたノートブックを使用して評価ジョブを実行します: 評価ノートブック

  4. 進行状況のモニタリング – 以下を通じて評価ジョブをモニタリングします。

    • SageMaker コンソール: ジョブのステータスとログを確認する

    • CloudWatch Logs: 詳細な実行ログを表示する

    • Lambda ログ: 報酬関数の問題をデバッグする

評価結果について

出力形式

評価ジョブは、JSONL 形式で指定された S3 の場所に結果を出力します。各行には、1 つのサンプルの評価結果が含まれます。

{ "id": "sample-001", "aggregate_reward_score": 0.75, "metrics_list": [ { "name": "accuracy", "value": 0.85, "type": "Metric" }, { "name": "fluency", "value": 0.90, "type": "Reward" } ] }
注記

RFT 評価ジョブの出力は、Lambda レスポンス形式と同じです。評価サービスは Lambda 関数の応答を変更せずに通過するため、報酬の計算と最終結果の一貫性が確保されます。

結果の解釈

報酬スコアの集計

  • 範囲: 通常 0.0 (最悪)~1.0 (最良) ですが、実装によって異なります

  • 目的: 全体的なパフォーマンスをまとめた 1 つの数値

  • 使用法: モデルを比較し、トレーニングに対する改善を追跡する

個々のメトリクス

  • メトリクスタイプ: 分析のための情報メトリクス

  • 報酬タイプ: RFT トレーニング中に使用されるメトリクス

  • 解釈: 値が大きいほど一般的にパフォーマンスが向上する (逆メトリクスを設計しない限り)

パフォーマンスベンチマーク

「良い」パフォーマンスを構成するものは、ユースケースによって異なります。

スコア範囲 解釈 Action
0.8~1.0 孤立性 デプロイの準備ができたモデル
0.6~0.8 良好 軽微な改善が有益である可能性がある
0.4~0.6 フェア 大幅な改善が必要
0.0~0.4 不良 トレーニングデータと報酬関数を確認する
重要

これらは一般的なガイドラインです。ビジネス要件、ベースラインモデルのパフォーマンス、ドメイン固有の制約、さらなるトレーニングの費用対効果分析に基づいて、独自のしきい値を定義します。

トラブルシューティング

一般的な問題

問題 原因 ソリューション
Lambda タイムアウト 複雑な報酬計算 Lambda タイムアウトを増やすか、関数を最適化する
アクセス許可が拒否されました IAM アクセス許可がない SageMaker ロールが Lambda を呼び出せることを確認する
スコアの不整合 非決定的報酬関数 固定シードまたは決定論的ロジックを使用する
欠落している結果 Lambda エラーがキャッチされない Lambda で包括的なエラー処理を追加する

デバッグチェックリスト

  • ネストされたコンテンツ配列で入力データが正しい形式に従っていることを確認する

  • Lambda ARN が正しく、関数がデプロイされていることを確認する

  • SageMaker → Lambda 呼び出しの IAM アクセス許可を確認する

  • CloudWatch ログで Lambda エラーを確認する

  • Lambda レスポンスが予想される形式と一致することを確認する

ベストプラクティス

  • Start Simple: 基本的な報酬関数から始めて反復する

  • Lambda を個別にテストする: 完全な評価の前に Lambda テストイベントを使用する

  • スモールデータセットで検証する: フルデータセットの前にサブセットで評価を実行する

  • バージョン管理: モデルバージョンとともに報酬関数のバージョンを追跡する

  • コストのモニタリング: Lambda 呼び出しとコンピューティング時間がコストに影響を与える

  • 広範なログ記録: Lambda の印刷ステートメントを使用してデバッグする

  • タイムアウトを適切に設定する: 忍耐とコストのバランスをとる

  • ドキュメントメトリクス: 各メトリクスが測定するものを明確に定義する

次の手順

RFT 評価を完了した後:

  • 結果が満足できる場合: モデルを本番環境にデプロイする

  • 改善が必要な場合:

    • 報酬関数を調整する

    • より多くのトレーニングデータを収集する

    • トレーニングハイパーパラメータを変更する

    • 追加の RFT トレーニングの反復を実行する

  • 継続的なモニタリング: 新しいデータを使用して定期的に再評価する