使用 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 |
先决条件
开始前,请确保已具备以下资源与权限。
| 要求 | 说明 |
|---|---|
| 具备 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,将所有占位符值(REGION、ACCOUNT_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 系列模型)。可选值:low、high;设置为 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 存储库
基准示例
下方为最简基准示例,用于评测 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 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
日志输出内容说明
容器日志会依次展示以下运行阶段的进度信息:
-
容器启动阶段:容器初始化与配置验证
-
基准下载阶段:下载基准文件并安装依赖项
-
端点准备阶段:创建或连接至推理端点
-
评测执行阶段:运行各项基准任务并输出进度指示
-
结果上传阶段:将评测结果写入 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 的数值。 |
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 人工智能服务退出政策,避免数据用于服务改进。 |