View a markdown version of this page

使用 Inspect AI 容器评测模型 - Amazon Nova

使用 Inspect AI 容器评测模型

SageMaker Inspect AI 容器依托 SageMaker 训练作业执行大语言模型评测。该容器借助 Inspect AI,为部署至 SageMaker 推理端点或 Amazon Bedrock 的模型提供标准化评测流程,支持 Amazon Nova 1.0(Micro、Lite、Pro)与 2.0(Lite 2)系列模型。

以往基于 lighteval评测方案将离线推理与评测逻辑深度耦合,限制了模型部署与测试方式的灵活度。Inspect AI 容器将评测逻辑与推理流程完全解耦。

概述

主要优势包括:

  • 自带基准:按照 Inspect AI 规范编写评测任务,即可接入各类领域专属评测任务,无需依赖集中式团队完成上线流程。

  • 灵活选用推理后端进行评测:兼容 SageMaker 推理(现有端点或即时创建)、Amazon Bedrock,后续还将支持更多推理后端。

  • 加速迭代流程:从基准开发到生产环境评测,全程无需调整基础设施。以往耗时数日的全新基准上线工作,如今仅需数分钟即可完成。

  • 支持大规模批量评测:可在单个作业中串联多项基准,并混用 inspect-evals 库中的标准基准与自定义任务。

  • 统一入口适配各类训练技术:无论模型采用 SFT(SMTJ、SMHP)、CPT(SMHP)还是 RFT(SMTJ、SMHP)微调,容器均可通过统一接口完成评测。同时支持评测训练中途阶段性保存的检查点(例如第 500 步、第 1000 步生成的检查点),只需将 model_s3_uri 指向对应检查点路径即可。

工作原理

向容器传入两类输入资源:

  1. 用于定义推理服务提供方、基准及评测参数的 YAML 配置文件(配方)

  2. 已上传至 Amazon S3 的基准文件(搭载 @task 装饰器的 Python 脚本)

容器统一完成端点管理、评测执行与结果汇总。训练作业运行完毕后,评测结果将写入您指定的 S3 输出路径。

容器映像

下表按 AWS 区域列出了 Inspect AI 容器映像 URI。

区域 容器映像 URI
us-east-1 763104351884.dkr.ecr.us-east-1.amazonaws.com/sagemaker-inspect-ai:latest
us-west-2 763104351884.dkr.ecr.us-west-2.amazonaws.com/sagemaker-inspect-ai:latest
eu-west-2 763104351884.dkr.ecr.eu-west-2.amazonaws.com/sagemaker-inspect-ai:latest

先决条件

开始前,请确保已具备以下资源与权限。

要求 说明
具备 SageMaker 访问权限的 AWS 账户 拥有创建 SageMaker 训练作业权限的有效 AWS 账户
S3 存储桶 用于存放评测配方、基准文件及输出结果的存储桶
IAM 执行角色 SageMaker 可担任该角色以访问您资源
SageMaker 推理端点或 Amazon Bedrock 访问权限 已部署的模型端点,或该模型的 Amazon Bedrock 访问权限
AWS CLI 或 SageMaker Python SDK 用于提交训练作业、管理各类资源的工具
容量预留(大模型) 若模型需使用加速型实例(如运行 Nova Lite 2 所需的 p5 实例),请联系 AWS Support 为 SageMaker 推理或 Amazon Bedrock 预留容量

步骤 1:设置 IAM 权限

SageMaker 训练作业将使用您指定的执行角色运行。该角色需具备以下权限:从 S3 读取基准文件、写入评测结果、调用推理端点,以及输出 CloudWatch 日志。

1.1 创建信任策略

将以下内容保存为 trust_policy.json

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "sagemaker.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

1.2 创建角色

aws iam create-role \ --role-name InspectLensEvalRole \ --assume-role-policy-document file://trust_policy.json

1.3 附加权限策略

将以下内容保存为 eval_policy.json,将所有占位符值(REGIONACCOUNT_ID、存储桶名称)替换为实际值:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3ReadBenchmarkData", "Effect": "Allow", "Action": ["s3:GetObject", "s3:ListBucket"], "Resource": [ "arn:aws:s3:::YOUR_BENCHMARK_BUCKET", "arn:aws:s3:::YOUR_BENCHMARK_BUCKET/*" ] }, { "Sid": "S3WriteResults", "Effect": "Allow", "Action": ["s3:GetObject", "s3:PutObject", "s3:ListBucket"], "Resource": [ "arn:aws:s3:::YOUR_RESULTS_BUCKET", "arn:aws:s3:::YOUR_RESULTS_BUCKET/*" ] }, { "Sid": "SageMakerInvokeExistingEndpoint", "Effect": "Allow", "Action": [ "sagemaker:InvokeEndpoint", "sagemaker:InvokeEndpointWithResponseStream", "sagemaker:DescribeEndpoint" ], "Resource": "arn:aws:sagemaker:REGION:ACCOUNT_ID:endpoint/*" }, { "Sid": "BedrockInference", "Effect": "Allow", "Action": [ "bedrock:InvokeModel", "bedrock:InvokeModelWithResponseStream" ], "Resource": [ "arn:aws:bedrock:REGION::foundation-model/*", "arn:aws:bedrock:REGION:ACCOUNT_ID:inference-profile/*", "arn:aws:bedrock:REGION:ACCOUNT_ID:provisioned-model/*", "arn:aws:bedrock:REGION:ACCOUNT_ID:custom-model/*", "arn:aws:bedrock:REGION:ACCOUNT_ID:imported-model/*", "arn:aws:bedrock:REGION:ACCOUNT_ID:custom-model-deployment/*" ] }, { "Sid": "BedrockCustomModelAccess", "Effect": "Allow", "Action": [ "bedrock:GetCustomModel", "bedrock:GetImportedModel", "bedrock:GetProvisionedModelThroughput", "bedrock:GetCustomModelDeployment", "bedrock:GetInferenceProfile" ], "Resource": [ "arn:aws:bedrock:REGION:ACCOUNT_ID:custom-model/*", "arn:aws:bedrock:REGION:ACCOUNT_ID:imported-model/*", "arn:aws:bedrock:REGION:ACCOUNT_ID:provisioned-model/*", "arn:aws:bedrock:REGION:ACCOUNT_ID:custom-model-deployment/*", "arn:aws:bedrock:REGION:ACCOUNT_ID:inference-profile/*" ] }, { "Sid": "SageMakerCreateEndpointLifecycle", "Effect": "Allow", "Action": [ "sagemaker:CreateModel", "sagemaker:DescribeModel", "sagemaker:DeleteModel", "sagemaker:CreateEndpointConfig", "sagemaker:DescribeEndpointConfig", "sagemaker:DeleteEndpointConfig", "sagemaker:CreateEndpoint", "sagemaker:DescribeEndpoint", "sagemaker:DeleteEndpoint", "sagemaker:InvokeEndpoint", "sagemaker:InvokeEndpointWithResponseStream" ], "Resource": [ "arn:aws:sagemaker:REGION:ACCOUNT_ID:model/inspectlens-*", "arn:aws:sagemaker:REGION:ACCOUNT_ID:endpoint/inspectlens-*", "arn:aws:sagemaker:REGION:ACCOUNT_ID:endpoint-config/inspectlens-*" ] }, { "Sid": "ECRAuth", "Effect": "Allow", "Action": "ecr:GetAuthorizationToken", "Resource": "*" }, { "Sid": "PassRoleToSageMaker", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::ACCOUNT_ID:role/InspectLensEvalRole", "Condition": { "StringEquals": { "iam:PassedToService": "sagemaker.amazonaws.com" } } }, { "Sid": "VPCNetworkingForEndpoint", "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterface", "ec2:CreateNetworkInterfacePermission", "ec2:DeleteNetworkInterface", "ec2:DeleteNetworkInterfacePermission", "ec2:DescribeNetworkInterfaces", "ec2:DescribeVpcs", "ec2:DescribeDhcpOptions", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups" ], "Resource": "*" }, { "Sid": "CloudWatchLogs", "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:REGION:ACCOUNT_ID:log-group:/aws/sagemaker/TrainingJobs:*", "arn:aws:logs:REGION:ACCOUNT_ID:log-group:/aws/sagemaker/Endpoints/*" ] }, { "Sid": "MLflowTrackingServer", "Effect": "Allow", "Action": [ "sagemaker:DescribeMlflowTrackingServer", "sagemaker:CreatePresignedMlflowTrackingServerUrl" ], "Resource": "arn:aws:sagemaker:REGION:ACCOUNT_ID:mlflow-tracking-server/*" }, { "Sid": "MLflowTrackingOperations", "Effect": "Allow", "Action": [ "sagemaker-mlflow:AccessUI", "sagemaker-mlflow:CreateExperiment", "sagemaker-mlflow:GetExperiment", "sagemaker-mlflow:GetExperimentByName", "sagemaker-mlflow:SearchExperiments", "sagemaker-mlflow:CreateRun", "sagemaker-mlflow:GetRun", "sagemaker-mlflow:UpdateRun", "sagemaker-mlflow:SearchRuns", "sagemaker-mlflow:LogMetric", "sagemaker-mlflow:LogParam", "sagemaker-mlflow:LogBatch", "sagemaker-mlflow:SetTag", "sagemaker-mlflow:LogArtifact", "sagemaker-mlflow:ListArtifacts" ], "Resource": "arn:aws:sagemaker:REGION:ACCOUNT_ID:mlflow-tracking-server/*" }, { "Sid": "KMSForVolumeEncryption", "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:GenerateDataKey", "kms:CreateGrant", "kms:DescribeKey" ], "Resource": "arn:aws:kms:REGION:ACCOUNT_ID:key/*" } ] }

将该策略附加到角色:

aws iam put-role-policy \ --role-name InspectLensEvalRole \ --policy-name InspectLensEvalPolicy \ --policy-document file://eval_policy.json

步骤 2:编写评测配方

评测配方为 YAML 配置文件,用于定义容器执行评测任务的方式。此类配方可指定推理服务提供方、基准、评测参数及输出配置。

如需完整端到端示例,请参阅下述笔记本:

方案 A:评测现有 SageMaker 端点

若模型已部署至 SageMaker 推理端点,则选用此方案。

inference_provider: sagemaker_endpoint: endpoint_name: "my-existing-endpoint" region: "us-east-1" benchmarks: s3_path: "s3://your-bucket/benchmarks/my_benchmarks/" tasks: - name: mmlu eval: max_connections: 10 max_retries: 100 timeout: 600 output: s3_path: "s3://your-bucket/eval-results/"

方案 B:创建端点、执行评测、清理资源

选择该方选择该方案时,容器会自动部署 Amazon Nova 基础模型或经过微调的模型、运行评测,并在评测完成后删除端点。该方式推荐用于单次临时评测任务。您可前往 Amazon Nova SageMaker 推理容器映像文档,获取最新版 SageMaker 推理容器。

inference_provider: sagemaker_endpoint: endpoint_name: null # null = create new endpoint model_s3_uri: "s3://your-bucket/models/nova-micro/" inference_image_uri: "708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-inference-repo:SM-Inference-latest" instance_type: "ml.p5.48xlarge" instance_count: 1 execution_role_arn: "arn:aws:iam::ACCOUNT_ID:role/InspectLensEvalRole" region: "us-east-1" context_length: "16000" max_concurrency: "32" cleanup_endpoint: true # Auto-delete after eval benchmarks: s3_path: "s3://your-bucket/benchmarks/my_benchmarks/" tasks: - name: mmlu_pro - name: arc_c - name: boolq eval: fail_on_error: false decoding: temperature: 0.0 top_p: 1.0 top_k: -1 max_tokens: 16000 reasoning_effort: null max_connections: 16 max_retries: 100 timeout: 600 extra_args: - "-M" - "completion_mode=True" - "--logprobs" - "--top-logprobs" - "5" output: s3_path: "s3://your-bucket/eval-results/"

关于 model_s3_uri 的说明:

  • Amazon Nova 正式发布版基础模型(基础检查点):示例路径 s3://escrow-nova-model-708977205387-us-east-1/nova-lite-2/prod/ – SageMaker 自动管理访问权限,无需额外配置 S3 权限。

  • Amazon Nova 自定义模型(训练后检查点):示例路径 s3://customer-escrow-ACCOUNT_ID-SUFFIX/YOUR_RUN_NAME/outputs/checkpoints/step_N/ – 该路径为训练作业输出所在的存储桶路径。

方案 C:通过 Amazon Bedrock 执行评测

若可通过 Amazon Bedrock 评测模型,则选用此方案,无需维护端点。

inference_provider: bedrock: model_id: amazon.nova-pro-v1:0 region: us-east-1 benchmarks: - name: mmlu path: benchmarks/mmlu_pro.py limit: 100 eval: fail_on_error: false decoding: temperature: 0.0 top_p: 1.0 top_k: -1 max_tokens: 8192 reasoning_effort: null max_connections: 10 max_retries: 50 timeout: 600 extra_args: - "--display" - "plain" output: s3_path: s3://your-bucket/eval/output/

基准配置

benchmarks 段用于指定待执行的评测任务,支持在单个作业内串联多项基准。

字段 必填 默认值 Description
name 本次基准运行的自定义标识名称
path 基准 Python 文件在 S3 基准目录下的相对路径
limit 无限制(全部样本) 参与评测的最大样本数量。可用于完整运行前的调试测试。
epochs 1 评测重复执行次数,用于保障统计显著性
task_args 传入基准任务函数的键值对参数

评测配置

eval 段用于控制容器执行评测任务的方式。

参数 必填 默认值 说明
fail_on_error false 存在样本评测失败时,终止整体评测。如需严格校验可设置为 true
max_connections 10 向推理端点发起的并行请求数
max_retries 3 推理请求失败后的最大重试次数
timeout 600 单次推理调用的请求超时时间(单位:秒)
extra_args 直接传递至 Inspect AI 评测命令的额外键值对参数

解码参数

可在 eval.decoding 段中设置模型生成解码相关参数:

参数 必填 默认值 说明
temperature 0.0 控制生成内容的随机性。设置为 0.0 可得到确定、可复现的基准结果。
top_p 1.0 核采样阈值。设置为 1.0 代表不施加限制。
top_k –1 仅限概率最高的前 K 个词元作为候选。设置为 -1 代表关闭该过滤规则。
max_tokens 8192 单次响应可生成的最大词元数量。若基准任务需要超长推理链路,可调高该数值。
reasoning_effort null 为支持该功能的模型设置推理深度(例如具备扩展思考能力的 Amazon Nova 系列模型)。可选值:lowhigh;设置为 null 代表关闭该功能。

输出配置

output 段用于定义评测结果的存储路径与存储方式。

字段 必填 默认值 Description
s3_path 用于写入评测结果的 S3 URI 地址
output_format eval 结果文件存储格式。可选类型见下表。

支持以下输出格式:

Format 说明
eval Inspect AI 原生格式。可通过 inspect view 工具开展交互式分析。
csv 逗号分隔值文件。适用于表格分析与数据管道处理。
jsonl JSON Lines 格式。每行包含一个 JSON 对象,适配流式处理场景。
json 标准 JSON 格式。完整结果存储为单一结构化文件。

MLflow 配置

您可选择将评测指标记录至 MLflow 跟踪服务器。在配方中新增 tracking 段:

tracking: mlflow_tracking_arn: null # ARN of SageMaker MLflow tracking server mlflow_experiment_name: "inspectlens" # experiment name mlflow_tracing: true # log full request/response traces mlflow_log_artifacts: true # upload .eval files to MLflow
字段 必填 默认值 说明
mlflow_tracking_arn null SageMaker MLflow 跟踪服务器对应的 ARN。配置该参数后将开启 MLflow 日志记录功能。若省略或设置为 null,则表示关闭该功能。
mlflow_experiment_name inspectlens 用于记录运行记录的 MLflow 实验名称。
mlflow_tracing true 设置为 true 时,会记录每条样本完整的请求与响应日志。
mlflow_log_artifacts true 设置为 true 时,会将 .eval 日志文件上传为 MLflow 构件。

完整配方参考

下方示例展示包含全部可用配置项的完整评测配方:

inference_provider: sagemaker_endpoint: endpoint_name: my-nova-endpoint model_s3_uri: s3://your-bucket/models/my-model/ inference_image_uri: "708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-inference-repo:SM-Inference-latest" instance_type: ml.g5.12xlarge cleanup_endpoint: true region: us-west-2 benchmarks: - name: mmlu path: benchmarks/mmlu_pro.py limit: 100 epochs: 3 task_args: subject: math - name: truthfulqa path: benchmarks/truthfulqa.py limit: 50 eval: fail_on_error: false decoding: temperature: 0.0 top_p: 1.0 top_k: -1 max_tokens: 8192 reasoning_effort: null max_connections: 256 max_retries: 50 timeout: 600 extra_args: - "--display" - "plain" output: s3_path: s3://your-bucket/eval/output/ output_format: eval tracking: mlflow_tracking_arn: "arn:aws:sagemaker:us-west-2:123456789012:mlflow-tracking-server/my-server" mlflow_experiment_name: "inspectlens" mlflow_tracing: true mlflow_log_artifacts: true

步骤 3:准备基准文件

基准为通过 Inspect AI @task 的装饰器定义评测任务的 Python 文件。inspect-evals 存储库提供 128 种以上开箱即用的基准,您也可自行开发自定义基准。

基准示例

下方为最简基准示例,用于评测 HuggingFace 数据集上的模型选择题作答效果:

from inspect_ai import task, Task from inspect_ai.dataset import hf_dataset from inspect_ai.scorer import choice from inspect_ai.solver import multiple_choice @task def my_benchmark(): return Task( dataset=hf_dataset( path="cais/mmlu", name="abstract_algebra", split="test", ), solver=multiple_choice(), scorer=choice(), )

依赖项

若您基准需要额外依赖项,请在同一 S3 目录中放置 pyproject.tomlrequirements.txt

[project] name = "my-benchmark" version = "0.1.0" requires-python = ">=3.12" dependencies = [ "datasets>=2.14.0", ]

预装软件包

容器已内置下述软件包。无需在 pyproject.toml 中重复列出。

软件包 版本
Python 3.12
inspect-ai 0.3.220
boto3 1.40.61
aioboto3 15.5.0
openai 2.36.0
mlflow 3.12.0
pyyaml 6.0.3

任务选择

配方中的 tasks 字段用于控制基准文件内需要执行的评测任务。

配置 示例 行为
tasks tasks: [] 运行该基准文件中定义的全部任务
名称筛选 tasks: ["algebra"] 运行名称包含子串“algebra”的任务
limit limit: 50 限制单任务参与评测的最大样本数
epochs epochs: 3 多次重复执行评测,用于测算结果波动幅度

步骤 4:规划 S3 目录结构

以下目录结构为推荐规范,便于统一管理配置文件、基准与结果。您可将容器指向任意 S3 路径,该目录结构并非强制要求。

s3://your-bucket/ ├── config/ │ └── inspect_config.yaml # Your eval recipe ├── benchmarks/ │ └── my_benchmarks/ # Your benchmark Python files │ ├── pyproject.toml # Optional: benchmark dependencies │ ├── my_task.py # @task decorated functions │ └── _helpers.py # Shared utilities └── output/ # Results written here

将文件上传到 S3:

# Upload benchmark files aws s3 cp my_benchmarks/ s3://your-bucket/benchmarks/my_benchmarks/ --recursive # Upload your eval recipe aws s3 cp inspect_config.yaml s3://your-bucket/config/inspect_config.yaml

步骤 5:提交训练作业

提交 SageMaker 训练作业执行评测任务。可通过 AWS CLI 或 SageMaker Python SDK 完成操作。

方案 A:AWS CLI

aws sagemaker create-training-job \ --training-job-name inspect-eval-$(date +%Y%m%d-%H%M%S) \ --algorithm-specification \ TrainingImage=763104351884.dkr.ecr.us-east-1.amazonaws.com/sagemaker-inspect-ai:latest,TrainingInputMode=File \ --role-arn arn:aws:iam::123456789012:role/SageMakerInspectAIRole \ --resource-config \ InstanceType=ml.m5.large,InstanceCount=1,VolumeSizeInGB=30 \ --stopping-condition MaxRuntimeInSeconds=86400 \ --input-data-config '[ { "ChannelName": "config", "DataSource": { "S3DataSource": { "S3DataType": "S3Prefix", "S3Uri": "s3://your-bucket/eval/config/", "S3DataDistributionType": "FullyReplicated" } } } ]' \ --output-data-config S3OutputPath=s3://your-bucket/eval/output/ \ --region us-west-2

方案 B:SageMaker Python SDK V3

from sagemaker.train import ModelTrainer from sagemaker.train.configs import InputData, Compute from sagemaker.core.shapes.shapes import StoppingCondition, OutputDataConfig trainer = ModelTrainer( training_image="763104351884.dkr.ecr.us-east-1.amazonaws.com/sagemaker-inspect-ai:latest", compute=Compute( instance_type="ml.m5.large", instance_count=1, volume_size_in_gb=30, ), output_data_config=OutputDataConfig( s3_output_path="s3://your-bucket/eval/output/" ), role="arn:aws:iam::123456789012:role/SageMakerInspectAIRole", stopping_condition=StoppingCondition(max_runtime_in_seconds=86400), ) trainer.train( input_data_config=[ InputData( channel_name="config", data_source="s3://your-bucket/eval/config/", ) ] )

关键参数

参数 说明
TrainingImage 763104351884.dkr.ecr.us-east-1.amazonaws.com/sagemaker-inspect-ai:latest Inspect AI 容器映像
InstanceType ml.m5.large 编排工具实例类型(非推理实例)
VolumeSizeInGB 30 基准数据与日志存储空间
MaxRuntimeInSeconds 86400 作业最长运行时长(24 小时)
ChannelName config 存放评测配方与基准文件的输入通道

编排工具实例类型选型说明

训练作业实例仅负责运行评测编排逻辑,不承载模型推理任务。请根据评测工作负载选择实例类型。

实例类型 使用案例 选型说明
ml.m5.large 默认推荐 可满足大多数中等并发规模的评测工作负载
ml.m5.4xlarge 大规模基准套件 适用于运行大量基准且 max_connections 取值较高的场景
ml.c5.large 成本敏感型场景 低成本备选方案,适合并发量低的轻量级评测任务

环境变量

可向容器传入环境变量,用于身份验证或参数配置。向 AWS CLI 命令添加 --environment 参数:

aws sagemaker create-training-job \ ... --environment '{ "HF_TOKEN": "hf_your_token_here", "HF_HUB_DOWNLOAD_TIMEOUT": "300" }'

步骤 6:监控作业

提交训练作业后,可通过 AWS CLI 或 CloudWatch Logs 查看作业运行进度。

查看作业状态

aws sagemaker describe-training-job \ --training-job-name your-job-name \ --query "TrainingJobStatus" \ --output text

流式查看日志

aws logs tail /aws/sagemaker/TrainingJobs \ --log-stream-name-prefix your-job-name \ --follow

日志输出内容说明

容器日志会依次展示以下运行阶段的进度信息:

  1. 容器启动阶段:容器初始化与配置验证

  2. 基准下载阶段:下载基准文件并安装依赖项

  3. 端点准备阶段:创建或连接至推理端点

  4. 评测执行阶段:运行各项基准任务并输出进度指示

  5. 结果上传阶段:将评测结果写入 S3,并可同步记录至 MLflow

  6. 资源清理阶段:若 cleanup_endpoint: true,自动删除临时端点

预计耗时

暂存区 预计时长
容器启动 2–5 分钟
创建端点(如适用) 15 – 30 分钟
评估 视基准规模与模型推理延迟而定
资源清理 1–2 分钟

步骤 7:查看并解读结果

作业运行完成后,可查看评测结果。

通过 Inspect AI 查看结果

借助 Inspect AI 可视化工具,直接读取 S3 中的结果文件并交互式分析:

inspect view --log-dir s3://your-bucket/eval-results/

执行该命令后会打开本地 Web 界面,可查看各项得分、单条样本,以及多轮评测结果对比。

下载并分享

将结果下载至本地:

aws s3 cp s3://your-bucket/eval/output/ ./results/ --recursive INSPECT_LOG_DIR=./results inspect view

VS Code 扩展

Inspect AI VS Code 扩展支持直接读取 S3 中的评测日志,无需预先下载文件。

  1. 通过 VS Code 应用市场安装插件(搜索关键词 Inspect AI)

  2. 在 Inspect 侧边活动栏打开“日志”面板,点击文件夹图标

  3. 填入 S3 存储路径:s3://your-bucket/eval-results/

输出结构

每次评测会生成一份 .eval 日志文件,内含以下模块:

  • results.scores:各指标的汇总得分

  • samples:单条评测样本,包含输入、模型输出与对应得分

  • stats:运行时统计数据,含词元消耗与推理延迟

  • eval.config:本次评测任务使用的完整配置

通过 MLflow 查看结果(可选)

若已在配方中配置 MLflow,可执行以下命令生成预签名 URL 以访问跟踪服务器:

aws sagemaker create-presigned-mlflow-tracking-server-url \ --tracking-server-name my-server \ --region us-west-2

将命令返回的 URL 在浏览器打开,即可查看评测指标、对比多轮任务、分析多批次评测的数据趋势。

可用基准

Inspect AI 容器可兼容所有采用 Inspect AI 任务规范编写的基准。inspect-evals 存储库提供 128 种以上开箱即用的基准,覆盖推理能力、知识问答、代码生成、安全对齐等评测领域。

如需自定开发基准,请参阅 Inspect AI 任务开发文档。若有公开基准数据集尚未收录至 inspect-evals,您可借助人工智能助手引导提示,将其转换为 Inspect AI 标准格式。

代理式评测

代理式基准用于测试模型完成多步骤任务的能力,这类任务需要调用工具、制定规划并开展迭代式推理。此类评测会模拟真实业务场景,模型在场景中需调用工具、解析返回结果并规划后续操作。

端点要求

执行代理式评测时,推理端点必须具备以下能力:

  • 工具调用:端点需支持函数调用,使模型可在评测流程中调用各类工具

  • 大容量上下文窗口:包含工具返回结果的多轮对话,需要充足上下文长度以留存完整对话历史

SageMaker 推理端点配置

若使用 SageMaker 推理端点执行代理式评测,需在端点上配置以下环境变量:

环境变量 说明
ENABLE_TOOL_CALLING True 开启推理端点的工具调用功能
CONTEXT_LENGTH 适配多轮对话的充足数值 设置足够大的数值,容纳包含工具返回结果的多轮对话内容

如需了解如何在 SageMaker 推理部署 Amazon Nova 端点,请参阅在 SageMaker 上部署 Amazon Nova 模型。关于容器功能与相关配置说明,请参阅容器功能

Amazon Bedrock 端点

兼容模型的 Amazon Bedrock 端点原生支持工具调用功能。有关更多信息,请参阅 Amazon Bedrock 工具调用

代理式评测入门

执行代理式评测前,需完成以下前提条件:

  1. 部署已开启工具调用能力的推理端点

  2. inspect-evals 存储库选取代理式基准(筛选搭载工具调用求解器的基准)

  3. 在配方中,为多轮交互设置适配的 timeoutmax_tokens

Amazon Bedrock 端点

示例笔记本

以下笔记本演示如何通过 Inspect AI 容器运行具备工具调用能力的代理式基准:

  • tau-bench(基于训练作业):使用 Inspect AI 容器,在客服任务场景下评测模型结合工具调用后的推理能力

若代理式基准需要 Docker 沙盒环境,请使用 Inspect AI SDK:

重要

依赖 Docker 沙盒环境的代理式基准(例如 SWE-bench)无法在 Inspect AI 容器运行流程中使用。SageMaker 训练作业环境不支持 Docker 嵌套运行能力。如需执行此类基准,请在具备 Docker 访问权限的计算环境中使用 Inspect AI SDK(例如 Amazon EC2 实例、预装 Docker 的 SageMaker 笔记本)。

问题排查

此部分提供使用 Inspect AI 容器执行评测时常见问题的解决办法。

快速迭代技巧

在提交 SageMaker 训练作业前,可通过 Inspect AI SDK 在本地调试基准。在本地设备执行 inspect eval my_benchmark.py 命令,提前校验任务定义、依赖项及评分逻辑,再大规模运行任务。

InsufficientInstanceCapacity 错误

该错误表示 AWS 在当前区域无充足容量供应所请求的实例类型。

  • 更换实例类型,或切换至其他 AWS 区域提交作业

  • 选用其他实例类型(例如使用 ml.m5.xlarge 替代 ml.m5.large

  • 等待数分钟后重新提交任务

AccessDenied 错误

若训练作业因访问被拒而失败,请逐项核查以下内容:

  • 作业配置中的角色 ARN 填写无误

  • 信任策略允许 sagemaker.amazonaws.com 担任该角色

  • 用户或角色具备执行角色的 iam:PassRole 权限

  • 执行角色拥有访问 S3 存储桶、推理端点或 Amazon Bedrock 模型的权限

端点创建失败

当配置 cleanup_endpoint: true 并开启自动创建推理端点时,可能出现以下问题:

错误 解决方案
ResourceLimitExceeded 提交服务配额提升申请,扩容当前区域对应推理实例类型的服务配额
OutOfMemoryError 更换更高配置的推理实例类型,或缩减模型大小
Wrong model_s3_uri 确认 S3 路径指向合法的模型构件目录
Wrong inference image URI 确认映像 URI 适配当前区域与模型框架
Endpoint stuck in Creating 在 CloudWatch Logs 中查看端点的日志。模型可能未通过运行状况检查。若端点需要更长时间,调大 MaxRuntimeInSeconds 的数值。

HuggingFace 下载超时

若基准从 HuggingFace Hub 下载数据集时出现超时,调大环境变量 HF_HUB_DOWNLOAD_TIMEOUT 的数值(单位:秒):

--environment '{"HF_HUB_DOWNLOAD_TIMEOUT": "600"}'

作业终止但端点仍在运行

若训练作业在资源清理流程完成前被中断,推理端点会持续占用资源。请手动删除端点,避免持续产生费用:

# List endpoints to find the orphaned one aws sagemaker list-endpoints \ --name-contains inspect \ --query "Endpoints[].EndpointName" \ --output table # Delete the endpoint aws sagemaker delete-endpoint \ --endpoint-name your-endpoint-name # Delete the endpoint configuration aws sagemaker delete-endpoint-config \ --endpoint-config-name your-endpoint-name # Delete the model aws sagemaker delete-model \ --model-name your-endpoint-name

基准依赖冲突

若基准因与预装软件包存在依赖冲突而运行失败,可在基准目录新建 pyproject.toml 文件,明确限定各依赖项版本。容器会隔离安装基准所需依赖项,最大限度减少版本冲突。

评测得分异常

若评测得分偏低或结果波动不一致,请检查评测配方中的如下参数:

  • temperature:如需确定、可复现的输出结果,请设置为 0.0

  • max_tokens:确保数值足够大,能够支撑模型输出完整响应

  • completion_mode:基础(非对话)模型需在配方中设置 completion_mode: true,才能使用文本补全式提示词,而非对话格式

数据隐私

评测数据的处理方式取决于您选用的推理服务提供方。

SageMaker 端点

若使用 SageMaker 推理端点,所有数据均留存于您的 AWS 账户内。评测提示词与模型响应不会传输到您的账户外,也不会被用于优化 AWS 服务。无需开启退出政策。

Amazon Bedrock

若将 Amazon Bedrock 作为推理服务提供方,您的数据将受《AWS 人工智能服务退出政策》约束。如需阻止数据用于迭代优化 AWS 人工智能服务,请在 AWS Organizations 层级启用数据退出政策。有关更多信息,请参阅人工智能服务退出政策

推理服务提供方 是否需要启用退出 Details
SageMaker 端点 数据仅留存于您的账户内。不受人工智能退出政策约束。
Amazon Bedrock 需在 Organizations 层级开启 AWS 人工智能服务退出政策,避免数据用于服务改进。