翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
モデル評価
評価はプロンプトセットに対してエージェントを実行し、報酬、pass@k、および軌道メトリクスを報告します。ファインチューニングされたモデルをベースと比較したり、デプロイ前に候補をベンチマークしたりするために使用します。
注: 評価ジョブは を使用します JobCategory: AgentRFTEvaluation (トレーニングではAgentRFT使用されません)。このカテゴリは、評価ジョブの CreateJobおよび DescribeJob呼び出しで使用します。
評価データの準備
評価データセットは、トレーニングデータセットと同じ形式とスキーマを使用します。「プロンプトデータセットの形式」を参照してください。以下のガイダンスは評価固有です。
-
トレーニングデータセットから評価データを保留します。スコアはパフォーマンスを過大評価するため、トレーニングプロンプトでは評価しないでください。ホールドアウトセットのデータの一部を予約するか、個別の評価データセットを維持します。結果が比較できるように、反復間で同じ評価セットを維持します。
-
トレーニングプロンプトの形式を一致させます。エージェントは、トレーニングプロンプトを解析したのと同じ方法で評価プロンプトを解析する必要があります。トレーニング中にエンコードまたは暗号化を使用した場合は、ここで同じ構造を使用します。同じコードパスから両方を生成すると、ドリフトを回避できます。
-
関心のある動作について説明します。エージェントが使用する各ツールとツールの組み合わせを演習します。以前に障害を引き起こしたプロンプトを含め、リグレッションが表示されるようにします。
-
サービスが検査なしでプロンプトを渡すのと同じ方法で、機密コンテンツを保護します。
評価ジョブの起動
トレーニングが完了したら、次のいずれかの方法を使用してモデルを評価します。
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 |