翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
評価の実行と結果の解釈
評価ジョブの実行
ステップ 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 ライブラリ
概要:
これらのプリセット関数は、以下に対してout-of-the-box評価機能を提供します。
-
prime_code – コードの生成と正確性の評価
-
prime_math – 数学的な推論と問題解決の評価
Quick Setup
-
nova-custom-eval-sdk リリース
から Lambda レイヤーをダウンロードする -
以下を使用して 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 -
で Lambda 関数にレイヤーを追加する AWS Management Console (カスタムレイヤーからpreset-function-layerを選択し、些細な依存関係に AWSSDKPandas-Python312 を追加する)
-
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」)
-
コードの問題で明確な関数署名を提供する
-
テスト入力にエッジケースを含める (ゼロ、負の数、空の入力)
-
参照回答で数式を一貫してフォーマットする
-
デプロイ前にサンプルデータを使用して報酬関数をテストする
エラー処理
どちらの関数にも、以下の堅牢なエラー処理が含まれています。
-
生成されたコードのコンパイルエラー
-
実行中のランタイム例外
-
不正な形式の入力データ
-
無限ループのタイムアウトシナリオ
-
無効な数式