使用 Inspect AI 容器评测模型
SageMaker Inspect AI 容器依托 SageMaker 训练作业执行大语言模型评测。该容器借助 Inspect AI
以往基于 lighteval
概述
主要优势包括:
-
自带基准:按照 Inspect AI 规范编写评测任务,即可接入各类领域专属评测任务,无需依赖集中式团队完成上线流程。
-
灵活选用推理后端进行评测:兼容 SageMaker 推理(现有端点或即时创建)、Amazon Bedrock,后续还将支持更多推理后端。
-
加速迭代流程:从基准开发到生产环境评测,全程无需调整基础设施。以往耗时数日的全新基准上线工作,如今仅需数分钟即可完成。
-
支持大规模批量评测:可在单个作业中串联多项基准,并混用 inspect-evals 库中的标准基准与自定义任务。
-
统一入口适配各类训练技术:无论模型采用 SFT(SMTJ、SMHP)、CPT(SMHP)还是 RFT(SMTJ、SMHP)微调,容器均可通过统一接口完成评测。同时支持评测训练中途阶段性保存的检查点(例如第 500 步、第 1000 步生成的检查点),只需将
model_s3_uri指向对应检查点路径即可。
工作原理
向容器传入两类输入资源:
-
用于定义推理服务提供方、基准及评测参数的 YAML 配置文件(配方)
-
已上传至 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 |
先决条件
开始前,请确保已具备以下资源与权限。
| 要求 | 说明 |
|---|---|
| AWS具备 SageMaker 访问权限的 账户 | 拥有创建 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,将所有占位符值(REGION、ACCOUNT_ID、存储桶名称)替换为实际值:
范围缩小到正在使用的资源
将每个资源 ARN 的范围缩小到您需要的资源。以下策略提供了一个起始模板——限制存储桶名称、端点 ARN 和其他资源以匹配您的环境。
{ "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/*", "arn:aws:sagemaker:REGION:ACCOUNT_ID:endpoint/*", "arn:aws:sagemaker:REGION:ACCOUNT_ID:endpoint-config/*" ] }, { "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 配置文件,用于定义容器执行评测任务的方式。配方可指定推理服务提供方、基准测试、评测参数及输出设置。
有关端到端示例,请参阅 GitHub 上 Amazon Nova 示例
方案 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/– 该路径为来自您训练作业输出的托管存储桶路径。
托管的端点资源
向您的执行角色授予以下可选权限,以便容器可以使用原始训练作业名称和 ARN 标记托管推理资源。标记的资源包括端点、端点配置和模型。这有助于在清理中断时识别资源。仅当作为 SageMaker 训练作业运行时,容器才会应用标签。
{ "Sid": "SageMakerTagManagedResources", "Effect": "Allow", "Action": "sagemaker:AddTags", "Resource": [ "arn:aws:sagemaker:REGION:ACCOUNT_ID:model/*", "arn:aws:sagemaker:REGION:ACCOUNT_ID:endpoint/*", "arn:aws:sagemaker:REGION:ACCOUNT_ID:endpoint-config/*" ] }
容器将以下标签应用于托管资源:
| 标签键 | 示例值 |
|---|---|
sagemaker-inspect-ai:TrainingJobName |
my-eval-job-20260828-145940 |
sagemaker-inspect-ai:TrainingJobArn |
arn:aws:sagemaker:us-east-1:123456789012:training-job/my-eval-job-20260828-145940 |
外部来源可能会在运行时中断资源管理。有关处理剩余资源的信息,请参阅 问题排查。
方案 C:通过 Amazon Bedrock 运行时执行评测
若可通过 Amazon Bedrock 运行时评测模型,则选用此方案,无需管理端点。有关 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/
方案 D:通过 Amazon Bedrock Mantle 执行评测
Amazon Bedrock Mantle 为通过 Amazon Bedrock 提供的模型提供了与 OpenAI 兼容的推理端点。此选项不需要存储的凭证。容器会根据您的执行角色的 IAM 凭证生成一个短期持有者令牌,并在基准测试之间自动刷新该令牌。
inference_provider: openai_compatible_endpoint: auth: "bedrock_mantle" region: "us-east-1" model_name: "us.amazon.nova-pro-v1:0" benchmarks: s3_path: "s3://your-bucket/benchmarks/my_benchmarks/" tasks: - name: mmlu eval: max_connections: 10 max_retries: 50 timeout: 600 output: s3_path: s3://your-bucket/eval/output/
将以下权限添加到执行角色(请参阅 步骤 1:设置 IAM 权限):
{ "Sid": "BedrockMantleInference", "Effect": "Allow", "Action": [ "bedrock-mantle:CreateInference", "bedrock-mantle:CallWithBearerToken" ], "Resource": "*" }
有关权限指南,请参阅 Amazon Bedrock 文档中的 Amazon Bedrock 推理权限和 API 密钥权限控制。
方案 E:评估与 OpenAI 兼容的端点
使用此选项可通过任何与 OpenAI 兼容的 API 端点进行评估,包括 SageMaker InferenceAuthorization 标头中。默认情况下,不记录持有者令牌。
令牌提供程序指南
在配置凭证交付之前,请务必查看令牌提供程序的文档,以了解其推荐的密钥管理实践、轮换策略和安全指南。
HTTPS 要求
所有使用持有者令牌身份验证的端点都必须使用 HTTPS。仅允许本地主机地址使用 HTTP。
使用 AWS Secrets Manager(推荐)
AWS Secrets Manager 提供加密存储、通过 CloudTrail 进行访问审计,以及 API 密钥和其他凭证的自动轮换。将 API 密钥存储在 Secrets Manager 中,然后在配方中通过 ARN 引用它。容器在运行时获取密钥,并在基准测试之间自动刷新。
inference_provider: openai_compatible_endpoint: model_name: "my-model" base_url: "https://my-endpoint/v1" auth: api_key api_key_secret_arn: "arn:aws:secretsmanager:us-east-1:123456789012:secret:prod/my-api-key" region: "us-east-1" benchmarks: s3_path: "s3://your-bucket/benchmarks/my_benchmarks/" tasks: - name: mmlu eval: max_connections: 10 max_retries: 50 timeout: 600 output: s3_path: s3://your-bucket/eval/output/
将以下权限添加到执行角色(请参阅 步骤 1:设置 IAM 权限):
{ "Sid": "GetApiKeySecret", "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": "arn:aws:secretsmanager:REGION:ACCOUNT_ID:secret:YOUR_SECRET_NAME" }
使用环境变量
可以通过环境变量 INFERENCE_API_KEY 传递 API 密钥。请查阅运行时环境文档,了解环境变量是如何传递的,以及其安全影响。对于 SageMaker 训练作业,环境变量在 DescribeTrainingJob API 响应中可见,并且限制在 512 个字符以内。有关更多信息,请参阅 SageMaker 训练作业环境变量。
inference_provider: openai_compatible_endpoint: model_name: "my-model" base_url: "https://my-endpoint/v1" auth: api_key # No key source specified — reads from INFERENCE_API_KEY environment variable benchmarks: s3_path: "s3://your-bucket/benchmarks/my_benchmarks/" tasks: - name: mmlu eval: max_connections: 10 max_retries: 50 timeout: 600 output: s3_path: s3://your-bucket/eval/output/
例如,对于 SageMaker 训练作业:
aws sagemaker create-training-job \ ... --environment '{"INFERENCE_API_KEY": "your-api-key"}'
基准配置
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 系列模型)。可选值:low、high;设置为 null 代表关闭该功能。 |
输出配置
output 段用于定义评测结果的存储路径与存储方式。
| 字段 | 必填 | 默认值 | Description |
|---|---|---|---|
s3_path |
是 | — | 用于写入评测结果的 S3 URI 地址 |
output_format |
否 | eval | 结果文件存储格式。可选类型见下表。 |
支持以下输出格式:
| 格式 | 说明 |
|---|---|
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 存储库
基准示例
下方为最简基准示例,用于评测 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.toml 或 requirements.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.evaluate import InspectAIEvaluator evaluator = InspectAIEvaluator( model="nova-textgeneration-lite-v2", bedrock_model_id="us.amazon.nova-lite-v2:0", benchmarks_path="s3://your-bucket/benchmarks/my_benchmarks/", tasks=[{"name": "my_task", "limit": 100}], s3_output_path="s3://your-bucket/eval/output/", instance_type="ml.m5.large", ) execution = evaluator.evaluate() execution.wait() execution.show_results()
关键参数
| 参数 | 值 | 说明 |
|---|---|---|
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
日志输出内容说明
容器日志会依次展示以下运行阶段的进度信息:
-
容器启动阶段:容器初始化与配置验证
-
基准下载阶段:下载基准文件并安装依赖项
-
端点准备阶段:创建或连接至推理端点
-
评测执行阶段:运行各项基准任务并输出进度指示
-
结果上传阶段:将评测结果写入 S3,并可同步记录至 MLflow
-
资源清理阶段:若
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 扩展
-
通过 VS Code 应用市场安装插件(搜索关键词 Inspect AI)
-
在 Inspect 侧边活动栏打开“日志”面板,点击文件夹图标
-
填入 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 存储库
如需自定开发基准,请参阅 Inspect AI 任务开发文档
代理式评测
代理式基准用于测试模型完成多步骤任务的能力,这类任务需要调用工具、制定规划并开展迭代式推理。此类评测会模拟真实业务场景,模型在场景中需调用工具、解析返回结果并规划后续操作。
端点要求
执行代理式评测时,推理端点必须具备以下能力:
-
工具调用:端点需支持函数调用,使模型可在评测流程中调用各类工具
-
大容量上下文窗口:包含工具返回结果的多轮对话,需要充足上下文长度以留存完整对话历史
SageMaker 推理端点配置
若使用 SageMaker 推理端点执行代理式评测,需在端点上配置以下环境变量:
| 环境变量 | 值 | 说明 |
|---|---|---|
ENABLE_TOOL_CALLING |
True |
开启推理端点的工具调用功能 |
CONTEXT_LENGTH |
适配多轮对话的充足数值 | 设置足够大的数值,容纳包含工具返回结果的多轮对话内容 |
如需了解如何在 SageMaker 推理部署 Amazon Nova 端点,请参阅在 SageMaker 上部署 Amazon Nova 模型。关于容器功能与相关配置说明,请参阅容器功能。
Amazon Bedrock 端点
兼容模型的 Amazon Bedrock 端点原生支持工具调用功能。有关更多信息,请参阅 Amazon Bedrock 工具调用。
代理式评测入门
执行代理式评测前,需完成以下前提条件:
-
部署已开启工具调用能力的推理端点
-
从 inspect-evals 存储库
选取代理式基准(筛选搭载工具调用求解器的基准) -
在配方中,为多轮交互设置适配的
timeout与max_tokens
Amazon Bedrock 端点
-
有关完整部署与配置说明,请参阅 Amazon Bedrock 端点。
-
有关工具调用支持,请参阅与 Amazon Bedrock 配合使用的工具中的客户端工具调用部分。有关工具调用支持说明,请参阅 Amazon Bedrock 工具调用中的客户端工具调用部分。
示例笔记本
以下笔记本演示如何通过 Inspect AI 容器运行具备工具调用能力的代理式基准:
-
tau-bench
(基于训练作业):使用 Inspect AI 容器,在客服任务场景下评测模型结合工具调用后的推理能力
若代理式基准需要 Docker 沙盒环境,请使用 Inspect AI SDK:
-
SWE-bench + Inspect AI SDK
:通过 Docker 沙盒评测软件工程能力
重要
依赖 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 的数值。 |
手动清理托管资源
启用托管端点后,托管资源信息将通过筛选词 INFRA 记录到 CloudWatch。如果容器无法完成拆卸,日志中将包含用于手动清理的 AWS CLI 命令。仅在作业不再处于运行状态后才运行手动终止步骤。
示例日志输出:
[WARNING] [INFRA] Managed SMI resources created; auto-deleted on normal completion or stop. If this job is force-killed or stopped mid-creation, delete them manually: aws sagemaker delete-endpoint --endpoint-name inspectlens-ep-1787856688 --region us-east-1 aws sagemaker delete-endpoint-config --endpoint-config-name inspectlens-config-1787856688 --region us-east-1 aws sagemaker delete-model --model-name inspectlens-model-1787856688 --region us-east-1
通过 stop-training-job 手动终止作业后,容器会在 120 秒的宽限期内尽最大努力清理托管资源。如果无法清理资源,则作业将结束并显示错误状态。如果清理成功完成,则作业将以停止状态结束。
HuggingFace 下载超时
若从 HuggingFace Hub 下载数据集的基准测试出现超时,调大环境变量 HF_HUB_DOWNLOAD_TIMEOUT 的数值(单位:秒):
--environment '{"HF_HUB_DOWNLOAD_TIMEOUT": "600"}'
基准依赖冲突
若基准因与预装软件包存在依赖冲突而运行失败,可在基准目录新建 pyproject.toml 文件,明确限定各依赖项版本。容器会隔离安装基准所需依赖项,最大限度减少版本冲突。
评测得分异常
若评测得分偏低或结果波动不一致,请检查评测配方中的如下参数:
-
temperature:如需确定、可复现的输出结果,请设置为
0.0 -
max_tokens:确保数值足够大,能够支撑模型输出完整响应
-
completion_mode:基础(非对话)模型需在配方中设置
completion_mode: true,才能使用文本补全式提示词,而非对话格式
数据隐私
评测数据的处理方式取决于您选用的推理服务提供方。
SageMaker 端点
若使用 SageMaker 推理端点,所有数据均留存于您的 AWS 账户内。评测提示词与模型响应不会传输到您的账户外,也不会被用于优化 AWS 服务。无需开启退出政策。
Amazon Bedrock
若将 Amazon Bedrock 作为推理服务提供方,您的数据将受《AWS 人工智能服务退出政策》约束。如需阻止数据用于迭代优化 AWS 人工智能服务,请在 AWS Organizations 层级启用数据退出政策。有关更多信息,请参阅人工智能服务退出政策。
| 推理服务提供方 | 是否需要启用退出 | 说明 |
|---|---|---|
| SageMaker 端点 | 否 | 数据仅留存于您的账户内。不受人工智能退出政策约束。 |
| Amazon Bedrock | 是 | 需在 Organizations 层级开启 AWS 人工智能服务退出政策,避免数据用于服务改进。 |