評価の実行と結果の解釈 - Amazon SageMaker AI

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

評価の実行と結果の解釈

評価ジョブの実行

ステップ 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: 評価を実行する

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

評価コンテナ

708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-evaluation-repo:SM-TJ-Eval-V2-latest

ステップ 4: 進行状況を監視する

以下を通じて評価ジョブをモニタリングします。

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

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

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

評価結果について

出力形式

評価ジョブは、指定した S3 ロケーションに JSONL 形式で結果を出力します。各行には、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 不良 トレーニングデータと報酬関数を確認する
重要

これらは一般的なガイドラインです。以下に基づいて独自のしきい値を定義します。

  • ビジネス要件

  • ベースラインモデルのパフォーマンス

  • ドメイン固有の制約

  • さらなるトレーニングのコストメリット分析

結果を分析する

概要統計の計算

import json import numpy as np scores = [] with open('evaluation_results.jsonl', 'r') as f: for line in f: result = json.loads(line) scores.append(result['aggregate_reward_score']) print(f"Mean: {np.mean(scores):.3f}") print(f"Median: {np.median(scores):.3f}") print(f"Std Dev: {np.std(scores):.3f}") print(f"Min: {np.min(scores):.3f}") print(f"Max: {np.max(scores):.3f}")
  • 失敗ケースを特定する: スコアの低いサンプルを確認して弱点を理解する

  • メトリクスの比較: さまざまなメトリクス間の相関関係を分析してトレードオフを特定する

  • 時間の経過に伴う追跡: トレーニングの反復間で評価結果を比較する

トラブルシューティング

一般的な問題

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

デバッグチェックリスト

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

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

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

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

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

ベストプラクティス

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

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

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

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

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

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

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

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

次の手順

RFT 評価を完了した後:

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

  • 改善が必要な場合:

    • 報酬関数を調整する

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

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

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

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

プリセット報酬関数

オープンソースの verl ライブラリの 2 つのプリセット報酬関数 (prime_code、Prime_math) は、RFT Lambda にバンドルできる Lambda レイヤーで使用できます。

概要:

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

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

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

Quick Setup

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

  2. 以下を使用して Lambda レイヤーを公開します AWS CLI。

    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. で Lambda 関数にレイヤーを追加する AWS Management Console (カスタムレイヤーからpreset-function-layerを選択し、些細な依存関係に 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」)

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

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

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

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

エラー処理

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

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

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

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

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

  • 無効な数式