View a markdown version of this page

モデル評価 - Amazon SageMaker AI

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

モデル評価

評価はプロンプトセットに対してエージェントを実行し、報酬、pass@k、および軌道メトリクスを報告します。ファインチューニングされたモデルをベースと比較したり、デプロイ前に候補をベンチマークしたりするために使用します。

注: 評価ジョブは を使用します JobCategory: AgentRFTEvaluation (トレーニングではAgentRFT使用されません)。このカテゴリは、評価ジョブの CreateJobおよび DescribeJob呼び出しで使用します。

評価データの準備

評価データセットは、トレーニングデータセットと同じ形式とスキーマを使用します。「プロンプトデータセットの形式」を参照してください。以下のガイダンスは評価固有です。

  1. トレーニングデータセットから評価データを保留します。スコアはパフォーマンスを過大評価するため、トレーニングプロンプトでは評価しないでください。ホールドアウトセットのデータの一部を予約するか、個別の評価データセットを維持します。結果が比較できるように、反復間で同じ評価セットを維持します。

  2. トレーニングプロンプトの形式を一致させます。エージェントは、トレーニングプロンプトを解析したのと同じ方法で評価プロンプトを解析する必要があります。トレーニング中にエンコードまたは暗号化を使用した場合は、ここで同じ構造を使用します。同じコードパスから両方を生成すると、ドリフトを回避できます。

  3. 関心のある動作について説明します。エージェントが使用する各ツールとツールの組み合わせを演習します。以前に障害を引き起こしたプロンプトを含め、リグレッションが表示されるようにします。

  4. サービスが検査なしでプロンプトを渡すのと同じ方法で、機密コンテンツを保護します

評価ジョブの起動

トレーニングが完了したら、次のいずれかの方法を使用してモデルを評価します。

SageMaker AI Studio

  • カスタムモデルの詳細ページに移動します (モデル > マイモデル > MTRL モデルを選択します)。

  • 評価を選択して評価設定ページを開きます。

  • 評価タイプとしてマルチターン RL を選択します。

  • エージェント環境を設定する — Bedrock AgentCore ランタイムを選択するか、Lambda フォワーダー ARN を指定します。

  • 評価データセット (S3 URI または保留評価プロンプトを含む登録済みデータセット) を指定します。

  • 送信を選択して評価ジョブを開始します。

SageMaker AI Python SDK

MultiTurnRLEvaluator は、評価ジョブを起動するための高レベルのインターフェイスを提供します。完了したトレーナーに合格すると、評価者はモデルパッケージの ARN、エージェント設定、エージェント修飾子を自動的に解決します。

微調整されたモデルを評価する

from sagemaker.train.evaluate import MultiTurnRLEvaluator from sagemaker.train.multi_turn_rl_trainer import MultiTurnRLTrainer # Attach to a completed training job trainer = MultiTurnRLTrainer.attach(job_name="my-mtrl-job-20260512082005") # Minimal evaluator — everything else inferred from trainer evaluator = MultiTurnRLEvaluator( model=trainer, dataset="s3://my-bucket/eval-prompts.parquet", s3_output_path="s3://my-bucket/eval-output/", ) execution = evaluator.evaluate() print(f"Evaluation started: {execution.arn}") # Wait for completion execution.wait() print(f"Status: {execution.status.overall_status}") print(f"S3 Output: {execution.s3_output_path}") print(f"MLflow: {execution.mlflow_url}")

ベースモデルを評価する (トレーニングなし)

ベースモデルを直接評価するときは、継承するトレーナーがないため、 agent_configが必要です。

from sagemaker.train.evaluate import MultiTurnRLEvaluator # With Bedrock AgentCore evaluator_base = MultiTurnRLEvaluator( model="openai-reasoning-gpt-oss-20b", dataset="s3://my-bucket/eval-prompts.parquet", agent_config="arn:aws:bedrock-agentcore:us-west-2:123456789012:runtime/my-agent", s3_output_path="s3://my-bucket/eval-output/base/", mlflow_resource_arn="arn:aws:sagemaker:us-west-2:123456789012:mlflow-tracking-server/my-mlflow", role="arn:aws:iam::123456789012:role/SageMakerRole", accept_eula=True, ) execution = evaluator_base.evaluate() execution.wait()

Side-by-side比較 (ベースとファインチューニング)

1 つのパイプラインでベースモデルと微調整されたモデルの両方を評価する 1 回のevaluate()呼び出し。

comparison_evaluator = MultiTurnRLEvaluator( model=trainer, dataset="s3://my-bucket/eval-prompts.parquet", s3_output_path="s3://my-bucket/eval-output/comparison/", evaluate_base_model=True, ) execution = comparison_evaluator.evaluate() execution.wait() print(f"Status: {execution.status.overall_status}")

結果をモニタリングして取得する

# Refresh status execution.refresh() print(f"Status: {execution.status.overall_status}") # Step-level detail for step in execution.status.step_details: print(f" {step.name}: {step.status}") if step.job_arn: print(f" Job ARN: {step.job_arn}") # MLflow URL print(f"MLflow: {execution.mlflow_url}")

AWS CLI と boto3

CreateJob API を使用して評価ジョブを直接作成することもできます。

評価ジョブを作成する (Bedrock AgentCore)

評価ジョブを作成するには、 を JobCategoryに設定して CreateJob API を呼び出しますAgentRFTEvaluation。エージェントのセットアップと設定は、トレーニングジョブと同じプロセスに従います。

CLI AWS の使用

aws sagemaker create-job \ --job-category AgentRFTEvaluation \ --job-name "my-agent-rft-eval-job" \ --role-arn "arn:aws:iam::123456789012:role/SageMakerFineTuningJobRole" \ --job-config-schema-version "1.0.0" \ --job-config-document '{ "AgentConfig": { "BedrockAgentCoreConfig": { "AgentRuntimeArn": "arn:aws:bedrock-agentcore:us-west-2:123456789012:runtime/my-agent" } }, "InputDataConfig": [{ "ChannelName": "evaluation", "DataSource": { "S3DataSource": { "S3DataType": "S3Prefix", "S3Uri": "s3://your-bucket-name/eval-prompts/" } } }], "OutputDataConfig": { "S3OutputPath": "s3://your-bucket-name/eval-output/", "MlflowConfig": { "MlflowResourceArn": "arn:aws:sagemaker:us-west-2:123456789012:mlflow-app/my-rft-mlflow-app" } }, "EvaluationConfig": { "BaseModelArn": "arn:aws:sagemaker:us-west-2:aws:hub-content/SageMakerPublicHub/Model/openai-reasoning-gpt-oss-20b", "AcceptEula": true, "HyperParameters": {"batch": { "eval_group_size": 1 }, "eval_metrics_config": { "pass_k_values": [1, 2, 4, 8, 16, 32], "success_threshold": 1 }} } }' \ --region us-west-2

SageMaker AI Python SDK の使用 (boto3)

import json import boto3 sm = boto3.client("sagemaker") response = sm.create_job( JobName="my-agent-rft-eval-job", RoleArn="arn:aws:iam::123456789012:role/SageMakerFineTuningJobRole", JobCategory="AgentRFTEvaluation", JobConfigSchemaVersion="1.0.0", JobConfigDocument=json.dumps({ "AgentConfig": { "BedrockAgentCoreConfig": { "AgentRuntimeArn": "arn:aws:bedrock-agentcore:us-west-2:123456789012:runtime/my-agent" } }, "InputDataConfig": [{ "ChannelName": "evaluation", "DataSource": { "S3DataSource": { "S3DataType": "S3Prefix", "S3Uri": "s3://your-bucket-name/eval-prompts/" } } }], "OutputDataConfig": { "S3OutputPath": "s3://your-bucket-name/eval-output/", "MlflowConfig": { "MlflowResourceArn": "arn:aws:sagemaker:us-west-2:123456789012:mlflow-app/my-rft-mlflow-app" } }, "EvaluationConfig": { "BaseModelArn": "arn:aws:sagemaker:us-west-2:aws:hub-content/SageMakerPublicHub/Model/openai-reasoning-gpt-oss-20b", "AcceptEula": True, "HyperParameters": {"batch": { "eval_group_size": 1 }, "eval_metrics_config": { "pass_k_values": [1, 2, 4, 8, 16, 32], "success_threshold": 1 }} } }) ) print(f"Eval Job ARN: {response['JobArn']}")

微調整されたモデルの評価

トレーニングジョブによって生成されたモデルを評価するには、 ModelPackageConfigに を含めますInputModelPackageArn

import json import boto3 sm = boto3.client("sagemaker") response = sm.create_job( JobName="my-agent-rft-eval-finetuned", RoleArn="arn:aws:iam::123456789012:role/SageMakerFineTuningJobRole", JobCategory="AgentRFTEvaluation", JobConfigSchemaVersion="1.0.0", JobConfigDocument=json.dumps({ "AgentConfig": {...}, "InputDataConfig": [...], "OutputDataConfig": {...}, "ModelPackageConfig": { "InputModelPackageArn": "arn:aws:sagemaker:us-west-2:123456789012:model-package/my-final-models/1" }, "EvaluationConfig": {...} }) ) print(f"Eval Job ARN: {response['JobArn']}")

評価ジョブを作成する (Lambda フォワーダーを使用したカスタムエージェント)

Bedrock AgentCore 評価と同じアプローチを使用しますが、 CustomAgentLambdaConfigで を指定しますAgentConfig

"AgentConfig": { "CustomAgentLambdaConfig": { "LambdaArn": "arn:aws:lambda:us-west-2:account-id:function:rft-agent-forwarder" } }

評価ハイパーパラメータ

Category パラメータ タイプ デフォルト 説明
バッチ eval_group_size 整数 1 プロンプトあたりのロールアウト数。注: pass@k を計算するには、eval_group_size >= k を設定します。
eval_metrics_config pass_k_values array [1、2、4、8、16、32] pass@k および pass^k メトリクスを計算するための k 値のリスト。pass@k = k サンプルロールアウトの少なくとも 1 つが成功する確率。pass^k = すべての k ロールアウトが成功する確率。
eval_metrics_config success_threshold float 1 ロールアウトは、報酬 >= success_threshold の場合、「successful」です。これは、pass@k、pass^k、成功/失敗したカウントメトリクスに適用されます。
eval_sampling_params 温度 float 0 評価ロールアウトのサンプリング温度。注: pass@k ではこの値を 0 以上に増やし、決定論的な動作を避けるために^k メトリクスを渡すことをお勧めします。
eval_sampling_params sampling_top_p float 1 評価ロールアウトの Nucleus サンプリングカットオフ。
eval_sampling_params sampling_max_tokens 整数 4096 評価のロールアウト中にモデルがターンごとに生成できるトークンの最大数。
ロールアウト タイムアウト float 600 評価ロールアウトが失敗として扱われ、再試行されるまでの時間 (秒)。
ロールアウト 最大同時実行数 int 96 が並行して実行できる評価ロールアウトの最大数。
ロールアウト max_retries int 3 失敗した評価ロールアウトを永続的に失敗したとマークするまでの再試行回数。

評価のモニタリング

aws sagemaker describe-job \ --job-name "my-agent-rft-eval-job" \ --job-category AgentRFTEvaluation \ --region us-west-2

評価結果の解釈

MLflow アプリを開いて、評価実行のログに記録されたメトリクス、報酬分布、および軌道の視覚化を表示します。各メトリクスの意味については、以下を参照してください。

報酬メトリクス (eval/reward/)

メトリクス 説明
eval/reward/mean すべてのロールアウトの平均報酬スコア。
eval/reward/min すべてのロールアウトにおける最小報酬スコア。
eval/reward/max すべてのロールアウトにおける最大報酬スコア。
eval/reward/std すべてのロールアウトにおける報酬スコアの標準偏差。
eval/reward/zero_frac スコアが正確に 0 (完全な失敗) のロールアウトの割合。
eval/reward/pass_at_1 プロンプトごとに 1 つのサンプルのうち少なくとも 1 つが成功する確率。これは主要な成功メトリクスです。
eval/reward/pass_power_1 電力の重み付けでレートを渡します。
eval/reward/succeeded_rollouts 正の報酬に達したロールアウトの合計数。
eval/reward/failed_rollouts スコアが 0 のロールアウトの合計数。
eval/reward/num_prompts 評価された個別のプロンプトの数。
eval/reward/rollouts_per_prompt プロンプトごとに生成された試行回数 (サンプル)。
eval/reward/success_threshold ロールアウトを「成功」としてカウントするために必要な報酬値。
eval/reward/mean_within_groups プロンプトグループあたりの平均報酬 (rollouts_per_prompt > 1 の設定が必要)。
eval/reward/std_within_groups 各プロンプトグループ内の報酬の標準偏差。
eval/reward/min_within_groups 各プロンプトグループ内の最小報酬。
eval/reward/max_within_groups 各プロンプトグループ内の最大報酬。

トークンメトリクス (eval/tokens/)

メトリクス 説明
eval/tokens/prompt_mean トークンの平均プロンプト長 (システムプロンプト、ツールの説明、マルチターンコンテキストを含む)。
eval/tokens/response_mean 1 ターンあたりのトークン数の平均モデル応答時間。
eval/tokens/response_min トークンでのモデル応答が最も短くなります。
eval/tokens/response_max トークンの最長モデルレスポンス。
eval/tokens/response_std レスポンスの長さの標準偏差。分散が大きい場合は、エージェントの動作に一貫性がないことを示している可能性があります。

Turn メトリクス (eval/turns/)

メトリクス 説明
eval/turns/mean ロールアウトあたりの平均ターン数。値が大きいと、エージェントがループしているか、過度に再試行している可能性があります。
eval/turns/min Fewest はすべてのロールアウトを有効にします。
eval/turns/max ほとんどの はすべてのロールアウトを切り替えます。非常に高い値は、タスクを解決せずにエージェントが停止したことを示します。

ログ確率メトリクス (eval/logprob/)

メトリクス 説明
eval/logprob/nz_mean ゼロ以外の (ページ分割されていない) トークンの平均ログ確率。0 に近い値は、モデルの信頼性が高いことを示します。
eval/logprob/nz_min 最も低いログ確率トークン (最も信頼性の低い予測)。
eval/logprob/nz_max 最も高いログ確率トークン (最も信頼性の高い予測)。
eval/logprob/nz_std ゼロ以外のログ確率の標準偏差。低い値は、一貫して高い信頼度を意味します。
eval/logprob/zero_frac ログ確率が正確にゼロ (確率 1.0) のトークンの割合。通常はパディングまたは強制トークン。
eval/logprob/zero_count ゼロログプローブトークンの合計数。
eval/logprob/zero_per_group プロンプトグループあたりの平均ゼロログプローブトークン。

タイミングメトリクス (timing_s/)

メトリクス 説明
timing_s/eval 評価の合計ウォールクロック時間を秒単位で表します。プロンプトあたりのeval/reward/num_prompts平均時間を で除算します。

一般的なパターンを診断する方法

パターン 考えられる原因
pass_at_1 = 0、高 turns/mean エージェントはタスクを解決せずにループしています。軌道のツールの使用状況とアクションパターンを確認します。
pass_at_1 = 0、低 tokens/response_mean エージェントは、非常に短い (空の、または形式が正しくない) レスポンスを生成します。プロンプト形式とモデルの互換性を確認します。
High turns/maxと Low turns/min エージェントはプロンプト間で一貫性のない動作を示しています。一部のタスクははるかに難しい場合や、エージェントが特定のツールインタラクションで失敗している場合があります。
高い信頼度 (logprob/nz_mean0 に近い) だが報酬が低い モデルは自信を持って間違った出力を生成しています。より多くのトレーニングデータの多様性や報酬シグナルの改良が必要になる場合があります。
zero_frac = 1.0 報酬 完全な失敗。エージェントのデプロイ、ツールの接続、評価データセットの形式が正しいことを確認します。

raw の結果については、 でS3OutputPath指定された に書き込まれたアーティファクトを確認しますOutputDataConfig

評価の制限とクォータ

AWS サービスクォータを使用して、同時評価ジョブの最大数の制限の引き上げをリクエストします。

クォータ デフォルト
rft-evaluation-job の最大同時ジョブ数 1