View a markdown version of this page

模型评测 - 亚马逊 SageMaker AI

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

模型评测

评估会根据提示集运行你的特工,并报告奖励、pass @k 和轨迹指标。在部署之前,使用它可以将经过微调的模型与其基础进行比较,或者对候选模型进行基准测试。

注意:评估作业使用JobCategory: AgentRFTEvaluation(不AgentRFT像训练中那样使用)。使用此类别CreateJobDescribeJob要求进行评估工作。

准备评估数据

评估数据集使用与训练数据集相同的格式和架构。请参阅提示数据集格式。以下指南是针对评估的。

  1. 保留训练数据集中的评估数据。切勿根据训练提示进行评估,因为分数会夸大表现。将一部分数据保留给被搁置的集合,或者维护一个单独的评估数据集。在迭代中保持相同的评估集,以便结果具有可比性。

  2. 匹配训练提示格式。代理必须像解析训练提示一样解析 eval 提示。如果您在训练期间使用了编码或加密,请在此处使用相同的结构。从相同的代码路径生成两者可以避免偏差。

  3. 掩盖你关心的行为。使用您的代理使用的每种工具和工具组合。包括以前导致失败的提示,这样回归就会浮出水面。

  4. 保护敏感内容的方式与培训中的方法相同,因为服务无需检查即可通过提示。

启动评估作业

训练完成后,使用以下方法之一评估您的模型。

SageMaker 人工智能工作室

  • 导航至您的自定义模型的详细信息页面(模型 > 我的模型 > 选择您的 MTRL 型号)。

  • 选择评估以打开评估配置页面。

  • 选择 Multi-Turn RL 作为评估类型。

  • 配置您的代理环境 — 选择您的 Bedrock AgentCore 运行时或提供您的 Lambda 转发器 ARN。

  • 提供您的评估数据集(S3 URI 或包含已保留评估提示的注册数据集)。

  • 选择 “提交” 以开始评估作业。

SageMaker AI Python SD

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)

要创建评估作业,请在JobCategory设置为CreateJob的情况下调用 API 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 转发器的自定义代理)

使用与 Bedrock AgentCore 评估相同的方法,但在以下内容CustomAgentLambdaConfig中指AgentConfig定:

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

评估超参数

类别 参数 Type 默认值 说明
批处理 评估组大小 integer 1 每个提示的推出次数。注意:要计算 pass @k,请将 eval_group_size 设置为 >= k。
评估_metrics_config pass_k _values array [1、2、4、8、16、32] 计算 pass @k 和 pass^k 指标的 k 个值列表。pass @k = k 个采样推出中至少 1 个成功的概率。pass^k = 所有 k 个部署成功的概率。
评估_metrics_config 成功阈值 浮点数 1 当奖励 >= 成功阈值时,推出就是 “成功”。请注意,这适用于 pass @k、pass^k、 succeeded/failed 计数指标。
eval_sampling_params temperature 浮点数 0 用于评估部署的采样温度。注意:建议将 pass @k 和 pass^k 指标的此值增加到 0 以上,以避免确定性行为。
eval_sampling_params sampling_top_p 浮点数 1 用于评估部署的 Nucleus 采样截止时间。
eval_sampling_params 采样_max_tokens integer 4096 在评估推出期间,模型每回合可以生成的最大代币数量。
推出 timeout 浮点数 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 个样本成功的可能性。这是主要的成功指标。
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_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 零日志探测令牌的总数。
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 代理生成非常短(可能为空或格式错误)的响应。检查提示格式和型号兼容性。
turns/max高到低 turns/min 代理在各个提示中表现出不一致的行为。有些任务可能会困难得多,或者代理在特定的工具交互中可能失败。
信心高(logprob/nz_mean接近 0)但回报低 模型自信地产生了错误的输出。它可能需要更多的训练数据多样性或奖励信号的完善。
zero_frac = 1.0作为奖励 完全失败。验证代理部署、工具连接以及评估数据集格式是否正确。

要获得原始结果,请查看写入中S3OutputPath指定内容的对象OutputDataConfig

限制评估&配额

使用 AWS 服务配额来请求提高并发评估任务的最大数量的限制。

配额 默认
rft-评估任务最大并发作业 1