View a markdown version of this page

模型評估 - Amazon SageMaker AI

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

模型評估

評估會根據提示集執行您的代理程式,並報告獎勵、Pass@k 和軌跡指標。使用它在部署之前,將微調後的模型與其基礎或候選項目的基準進行比較。

注意:評估任務使用 AgentRFT JobCategory: AgentRFTEvaluation(不適用於訓練)。在評估任務的 CreateJobDescribeJob呼叫上使用此類別。

準備評估資料

評估資料集使用與訓練資料集相同的格式和結構描述。請參閱 提示資料集格式。以下指引是 eval 特定的。

  1. 從訓練資料集保留評估資料。永遠不要評估訓練提示,因為分數會高估效能。為保留集保留一部分資料,或維護單獨的評估資料集。在反覆運算之間保持相同的評估集,以便結果相當。

  2. 符合訓練提示格式。代理程式必須剖析 eval 提示,與其剖析訓練提示的方式相同。如果您在訓練期間使用編碼或加密,請在此處使用相同的結構。從相同的程式碼路徑產生兩者可避免偏離。

  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(基礎與微調)

在單一管道中評估基礎模型和微調模型的單一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)

若要建立評估任務,請呼叫 CreateJob API,並將 JobCategory設定為 AgentRFTEvaluation。客服人員設定和組態遵循與訓練任務相同的程序。

使用 AWS CLI

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 Forwarder 自訂代理程式)

使用與 Bedrock AgentCore 評估相同的方法,但在 CustomAgentLambdaConfig中指定 AgentConfig

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

評估超參數

Category 參數 Type 預設 說明
批次 eval_group_size integer 1 每個提示的推展。注意:若要計算 pass@k,請設定 eval_group_size >= k。
eval_metrics_config pass_k_values 陣列 【1、2、4、8、16、32】 運算 pass@k 和 pass^k 指標的 k 值清單。 pass@k = 至少 1 個 k 抽樣推展成功的機率。 pass^k = 所有 k 推展成功的機率。
eval_metrics_config success_threshold float 1 當獎勵 >= success_threshold 時,推展為「成功」。請注意,這適用於 pass@k、pass^k、成功/失敗的計數指標。
eval_sampling_params 溫度 float 0 評估推展的取樣溫度。注意:建議將 pass@k 和 pass^k 指標的此值增加到 0 以上,以避免決定性的行為。
eval_sampling_params sampling_top_p float 1 評估推展的「Nucleus 取樣截止」。
eval_sampling_params sampling_max_tokens integer 4096 模型在評估推展期間每圈可產生的最大權杖數。
推展 timeout float 600 評估推展被視為失敗並可能重試的時間 (秒)。
推展 max_concurrency 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 個範例成功的機率。這是主要成功指標。
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 每圈字符的平均模型回應長度。
eval/tokens/response_min 字符中最短的模型回應。
eval/tokens/response_max 字符中最長的模型回應。
eval/tokens/response_std 回應長度的標準差。高度變異可能表示代理程式行為不一致。

轉動指標 (eval/turns/)

指標 說明
eval/turns/mean 每個推展的平均轉數。高值可能表示代理程式正在循環或過度重試。
eval/turns/min 在任何推展中轉換的次數最少。
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 零 logprob 權杖的總計數。
eval/logprob/zero_per_group 每個提示群組的平均零 logprob 權杖數。

計時指標 (timing_s/)

指標 說明
timing_s/eval 評估的總時鐘時間,以秒為單位。每個提示的平均時間除eval/reward/num_prompts以 。

如何診斷常見模式

模式 可能原因
pass_at_1 = 0,高 turns/mean 代理程式正在迴圈而不解決任務。檢查軌跡中的工具用量和動作模式。
pass_at_1 = 0,低 tokens/response_mean 客服人員產生非常短 (可能是空白或格式不正確) 的回應。檢查提示格式和模型相容性。
turns/max,低 turns/min 客服人員在提示中顯示不一致的行為。有些任務可能更困難,或者代理程式在特定工具互動時可能會失敗。
高可信度 (logprob/nz_mean接近 0) 但獎勵低 模型可放心地產生錯誤的輸出。它可能需要更多的訓練資料多樣性或獎勵訊號精簡。
zero_frac = 1.0 獎勵 完成失敗。驗證代理程式部署、工具連線,以及評估資料集格式是否正確。

對於原始結果,請檢閱寫入 中S3OutputPath指定 的成品OutputDataConfig

評估的限制和配額

使用 AWS 服務配額請求增加並行評估任務數量上限的限制。

配額 預設
rft-evaluation-job 並行任務上限 1