

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

# 使用檢查 AI 容器進行評估
<a name="nova-eval-inspect-ai-container"></a>

SageMaker Inspect AI 容器會在 SageMaker 訓練任務上執行 LLM 模型評估。容器使用[檢查 AI](https://inspect.ai-safety-institute.org.uk/) 為部署到 SageMaker 推論端點或 Amazon Bedrock 的模型提供標準化評估程序，包括 Amazon Nova 1.0 (Micro、Lite、Pro) 和 2.0 (Lite 2) 模型。

先前的[評估方法](https://docs.aws.amazon.com//nova/latest/nova2-userguide/nova-model-evaluation.html) （根據 [lighteval](https://github.com/huggingface/lighteval)) 緊密耦合的離線推論和評估邏輯，這限制了如何提供和測試模型的靈活性。檢查 AI 容器會將評估邏輯與推論完全分離。

## 概觀
<a name="nova-eval-container-overview"></a>

主要優點包括：
+ **使用您自己的基準** — 以檢查 AI 格式撰寫評估任務，然後插入特定網域的評估任務，而不依賴集中式團隊加入這些任務。
+ **使用不同的推論選項進行評估** — 使用 SageMaker Inference （現有端點或on-the-fly)、Amazon Bedrock 和傳入的更多推論後端。
+ **加快迭代速度** — 從基準開發到生產評估，無需變更基礎設施。先前花費數天的新基準上線會在幾分鐘內發生。
+ **大規模執行**：在一個任務中鏈結多個基準測試，在相同任務中混合來自 inspect-evals 程式庫的標準基準測試與您自己的自訂任務。
+ **所有訓練技術的一個進入點**：無論您的模型是使用 SFT (SMTJ、SMHP)、CPT (SMHP) 或 RFT (SMTJ、SMHP) 進行微調，容器都會透過相同的界面進行評估。也支援透過指向檢查點路徑來評估在特定步驟中儲存的訓練中`model_s3_uri`檢查點 （例如步驟 500、步驟 1000)。

### 運作方式
<a name="nova-eval-container-how-it-works"></a>

您提供兩個輸入給容器：

1. 定義推論提供者、基準測試和評估參數的 YAML 組態檔案 （配方）

1. 上傳至 Amazon S3 的基準檔案 (Python 指令碼與`@task`裝飾項目）

容器會處理端點管理、評估執行和結果收集。當訓練任務完成時，結果會寫入您指定的 S3 輸出位置。

## 容器映像
<a name="nova-eval-container-images"></a>

下表列出依 AWS 區域檢查 AI 容器映像 URIs。


| 區域 | 容器映像 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 | 

## 先決條件
<a name="nova-eval-container-prerequisites"></a>

開始之前，請確定您擁有下列資源和存取權。


| 需求 | 說明 | 
| --- | --- | 
| AWS 具有 SageMaker 存取的帳戶 |  AWS 帳戶 具備建立 SageMaker 訓練任務許可的作用中 | 
| S3 bucket (S3 儲存貯體) | 存放評估配方、基準檔案和輸出結果的儲存貯體 | 
| IAM 執行角色 | SageMaker 可以擔任的角色來存取您的資源 | 
| SageMaker 推論端點或 Amazon Bedrock 存取 | 您要評估之模型的部署模型端點或 Amazon Bedrock 模型存取權 | 
| AWS CLI 或 SageMaker Python SDK | 提交訓練任務和管理資源的工具 | 
| 容量保留 （大型模型） | 對於需要加速執行個體的模型 （例如 Nova Lite 2 的 p5)，請聯絡 AWS Support 為 SageMaker Inference 或 Amazon Bedrock 預留容量 | 

## 步驟 1：設定 IAM 許可
<a name="nova-eval-container-step1"></a>

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：撰寫您的評估配方
<a name="nova-eval-container-step2"></a>

評估配方是 YAML 組態檔案，可定義容器執行評估的方式。配方會指定推論提供者、基準測試、評估參數和輸出設定。

如需end-to-end範例，請參閱下列筆記本：
+ [評估現有的 SageMaker 端點](https://github.com/aws-samples/amazon-nova-samples/blob/main/customization/sagemaker-inspect-ai/inspect_eval_container/eval_sagemaker_endpoint.ipynb)
+ [使用受管端點評估](https://github.com/aws-samples/amazon-nova-samples/blob/main/customization/sagemaker-inspect-ai/inspect_eval_container/eval_managed_endpoint.ipynb)
+ [評估 Amazon Bedrock 模型](https://github.com/aws-samples/amazon-nova-samples/blob/main/customization/sagemaker-inspect-ai/inspect_eval_container/eval_bedrock_model.ipynb)

**選項 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 推論容器。 [ SageMaker ](https://docs.aws.amazon.com//nova/latest/userguide/nova-model-sagemaker-inference.html#nova-sagemaker-inference-container-images) 

```
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 GA 模型 （基本檢查點）**：例如：`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` 區段定義要執行的評估任務。您可以在單一任務中鏈結多個基準。


| 欄位 | 必要 | 預設 | 說明 | 
| --- | --- | --- | --- | 
| name | 是 | — | 基準執行的描述性名稱 | 
| path | 是 | — | S3 基準測試目錄中基準測試 Python 檔案的相對路徑 | 
| limit | 否 | 無 （所有範例） | 要評估的樣本數量上限。用於在完整執行之前進行測試。 | 
| epochs | 否 | 1 | 重複統計意義評估的次數 | 
| task\_args | 否 | — | 做為引數傳遞給基準任務函數的鍵值對 | 

**評估組態**

`eval` 區段控制容器執行評估的方式。


| 參數 | 必要 | 預設 | 說明 | 
| --- | --- | --- | --- | 
| fail\_on\_error | 否 | false | 如果任何範例失敗，請停止評估。將 設定為 true以進行嚴格驗證。 | 
| max\_connections | 否 | 10 | 對推論端點的平行請求數量 | 
| max\_retries | 否 | 3 | 失敗推論請求的重試嘗試次數 | 
| timeout | 否 | 600 | 為每個推論呼叫請求以秒為單位的逾時 | 
| extra\_args | 否 | — | 直接傳遞至 Inspect AI eval 命令的其他鍵/值對 | 

**解碼參數**

在 `eval.decoding`區段中設定模型解碼參數：


| 參數 | 必要 | 預設 | 說明 | 
| --- | --- | --- | --- | 
| temperature | 否 | 0.0 | 控制產生時的隨機性。用於確定性、可重現0.0的基準結果。 | 
| top\_p | 否 | 1.0 | Nucleus 取樣閾值。 1.0表示沒有限制。 | 
| top\_k | 否 | -1 | 將單字選擇限制在最前面的 K 字符。 會-1停用此篩選條件。 | 
| max\_tokens | 否 | 8192 | 每個回應要產生的字符數量上限。需要長推理鏈的基準測試增加。 | 
| reasoning\_effort | 否 | null | 控制支援模型的推理深度 （例如，具有延伸思維的 Amazon Nova 模型）。選項：high、 low或 null以停用。 | 

**輸出組態**

`output` 本節定義評估結果的存放位置和方式。


| 欄位 | 必要 | 預設 | 說明 | 
| --- | --- | --- | --- | 
| s3\_path | 是 | — | 撰寫評估結果的 S3 URI | 
| output\_format | 否 | 評估 | 結果檔案的格式。如需選項，請參閱下表。 | 

可用的輸出格式如下：


| 格式 | 說明 | 
| --- | --- | 
| eval | 原生檢查 AI 格式。相容於 inspect view 以進行互動式分析。 | 
| csv | 逗號分隔值。適合試算表分析和資料管道。 | 
| jsonl | JSON 行格式。每行一個用於串流處理的 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 | 否 | 檢測器 | 要記錄執行的 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：準備基準檔案
<a name="nova-eval-container-step3"></a>

基準是使用檢查 AI `@task`裝飾項目來定義評估任務的 Python 檔案。[inspect-evals 儲存庫](https://github.com/UKGovernmentBEIS/inspect_evals)提供超過 128 個ready-to-use基準，或者您可以自行撰寫。

**範例基準**

下列範例顯示評估 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(),
    )
```

**相依性**

如果您的基準需要額外的相依性，`requirements.txt`請在相同的 S3 目錄中包含 `pyproject.toml`或 ：

```
[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` 欄位會控制基準檔案中要執行的任務。


| Configuration | 範例 | Behavior (行為) | 
| --- | --- | --- | 
| 空白 tasks | tasks: [] | 執行基準檔案中定義的所有任務 | 
| 名稱篩選條件 | tasks: ["algebra"] | 執行名稱包含「代數」子字串的任務 | 
| limit | limit: 50 | 限制每個任務評估的範例數量 | 
| epochs | epochs: 3 | 重複多次評估以測量變異數 | 

## 步驟 4：準備 S3 結構
<a name="nova-eval-container-step4"></a>

下列結構是保持組態、基準和結果井然有序的建議。您可以將容器指向任何 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：提交訓練任務
<a name="nova-eval-container-step5"></a>

提交 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/",
        )
    ]
)
```

**金鑰參數**


| 參數 | Value | 說明 | 
| --- | --- | --- | 
| TrainingImage | 763104351884.dkr.ecr.us-east-1.amazonaws.com/sagemaker-inspect-ai:latest | 檢查 AI 容器映像 | 
| InstanceType | ml.m5.large | 協調器執行個體類型 （非推論執行個體） | 
| VolumeSizeInGB | 30 | 基準資料和日誌的儲存體 | 
| MaxRuntimeInSeconds | 86400 | 最長任務持續時間 (24 小時） | 
| ChannelName | config | 包含配方和基準檔案的輸入通道 | 

**Orchestrator 執行個體類型指引**

訓練任務執行個體會執行評估協同運作邏輯，而非模型推論。根據您的評估工作負載選擇執行個體類型。


| 執行個體類型 | 使用案例 | 指引 | 
| --- | --- | --- | 
| ml.m5.large | 建議的預設值 | 適用於大多數具有中等平行處理的評估工作負載 | 
| ml.m5.4xlarge | 大型基準測試套件 | 在執行許多具有高max\_connections值的基準測試時使用 | 
| ml.c5.large | 成本敏感 | 低平行處理之簡單評估的較低成本替代方案 | 

**環境變數**

您可以將環境變數傳遞至容器以進行身分驗證或組態。將 `--environment` 參數新增至 AWS CLI 命令：

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

## 步驟 6：監控任務
<a name="nova-eval-container-step6"></a>

提交訓練任務後，您可以透過 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. **啟動** — 容器初始化和組態驗證

1. **基準下載** — 下載基準檔案並安裝相依性

1. **端點設定** — 建立或連線至推論端點

1. **評估** — 使用進度指標執行基準任務

1. **結果上傳** — 將結果寫入 S3 並選擇性地記錄到 MLflow

1. **清除** — 刪除暫時端點，如果 `cleanup_endpoint: true`

**預估時間軸**


| 階段 | 預估持續時間 | 
| --- | --- | 
| 容器啟動 | 2-5 分鐘 | 
| 建立端點 （如適用） | 15-30 分鐘 | 
| 評估 | 依基準大小和模型延遲而有所不同 | 
| 清除 | 1-2 分鐘 | 

## 步驟 7：檢視和解譯結果
<a name="nova-eval-container-step7"></a>

任務完成後，檢視您的評估結果。

**使用檢查 AI 檢視**

使用檢查 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 程式碼延伸**

[檢查 AI VS 程式碼延伸](https://inspect.aisi.org.uk/vscode.html)可讓您直接從 S3 瀏覽評估日誌，而無需先下載它們。

1. 從 VS Code Marketplace 安裝擴充功能 （搜尋「檢查 AI」)

1. 在檢查活動列中，找到日誌窗格，然後選擇資料夾圖示

1. 輸入您的 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，以檢視指標、比較執行和分析評估的趨勢。

## 可用的基準
<a name="nova-eval-container-benchmarks"></a>

Inspect AI 容器可與以 Inspect AI 任務格式撰寫的任何基準搭配使用。[inspect-evals 儲存庫](https://github.com/UKGovernmentBEIS/inspect_evals)提供超過 128 個ready-to-use基準，涵蓋推理、知識、編碼和安全性等領域。

若要撰寫自己的基準，請參閱[檢查 AI 任務撰寫文件](https://inspect.aisi.org.uk/tasks.html)。如果您找到尚未在 inspect-evals 中使用的公有基準，您可以使用 [AI 助理加入提示](https://github.com/aws-samples/amazon-nova-samples/blob/main/customization/sagemaker-inspect-ai/ai_assisted_benchmark_creation.md)，協助將其轉換為 Inspect AI 格式。

## 代理程式評估
<a name="nova-eval-container-agentic"></a>

代理程式基準測試模型完成需要工具使用、規劃和反覆推理的多步驟任務的能力。這些評估模擬實際案例，其中模型必須呼叫工具、解譯結果，並決定下一個動作。

**端點需求**

代理程式評估需要支援下列功能的端點：
+ **工具呼叫** — 端點必須支援函數呼叫，讓模型在評估期間叫用工具
+ **大型內容大小** — 包含工具結果的多迴轉對話需要足夠的內容長度來維護對話歷史記錄

**SageMaker 推論端點組態**

使用 SageMaker 推論端點進行代理程式評估時，請在端點上設定下列環境變數：


| 環境變數 | Value | 說明 | 
| --- | --- | --- | 
| ENABLE\_TOOL\_CALLING | True | 在推論端點上啟用工具呼叫支援 | 
| CONTEXT\_LENGTH | 足以進行多轉 | 將 設定為足夠大的值，以容納具有工具結果的多迴轉對話 | 

如需有關在 SageMaker 推論上設定 Amazon Nova 端點的資訊，請參閱在 [ SageMaker 上部署 Amazon Nova 模型](https://docs.aws.amazon.com//nova/latest/userguide/deploy-sagemaker.html)。如需容器功能和組態的資訊，請參閱[容器功能](https://docs.aws.amazon.com//nova/latest/userguide/container-features.html)。

**Amazon Bedrock 端點**

對於 Amazon Bedrock 端點，相容模型原生支援工具呼叫。如需詳細資訊，請參閱[搭配 Amazon Bedrock 使用工具](https://docs.aws.amazon.com//bedrock/latest/userguide/tool-use.html)。

**客服人員評估入門**

若要執行代理程式評估，請完成下列先決條件：

1. 部署已啟用工具呼叫的端點

1. 從 [inspect-evals 儲存庫](https://github.com/UKGovernmentBEIS/inspect_evals)中選擇代理基準 （尋找使用工具呼叫求解器的基準）

1. 使用適當的 `timeout`和 `max_tokens`值來設定您的配方，以進行多迴轉互動

**Amazon Bedrock 端點**
+ 如需完整的設定和部署，請參閱 [Amazon Bedrock 端點](https://docs.aws.amazon.com//bedrock/latest/userguide/endpoints.html)。
+ 如需工具呼叫支援，請參閱[搭配 Amazon Bedrock 使用工具中的用戶端工具](https://docs.aws.amazon.com//bedrock/latest/userguide/tool-use.html)呼叫一節。

**筆記本範例**

下列筆記本示範使用 Inspect AI 容器執行工具呼叫代理程式基準測試：
+ [tau-bench （以工作為基礎）](https://github.com/aws-samples/amazon-nova-samples/blob/main/customization/sagemaker-inspect-ai/inspect_eval_container/eval_tau_bench.ipynb) — 使用檢查 AI 容器評估客戶服務任務的工具強化推理

對於需要 Docker 沙盒的代理程式基準測試，請使用檢查 AI SDK：
+ [SWE-bench with Inspect AI SDK](https://github.com/aws-samples/amazon-nova-samples/blob/main/customization/sagemaker-inspect-ai/local_inspect_sdk/eval_swe_bench.ipynb) — 使用 Docker 沙盒評估軟體工程功能

**重要**  
Inspect AI 容器體驗不支援需要 Docker 沙盒 （例如 SWE-bench) 的代理程式基準。SageMaker 訓練任務環境不提供 Docker-in-Docker 功能。若要執行這些基準測試，請在具有 Docker 存取權的運算環境中使用[檢查 AI SDK](nova-eval-on-sagemaker-inference.md) （例如，已安裝 Docker 的 Amazon EC2 執行個體或 SageMaker 筆記本）。

## 疑難排解
<a name="nova-eval-container-troubleshooting"></a>

本節提供使用檢查 AI 容器執行評估時常見問題的解決方案。

**快速反覆運算秘訣**

提交 SageMaker 訓練任務之前，請使用檢查 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 | 使用較大的推論執行個體類型或減少模型大小 | 
| 錯誤 model\_s3\_uri | 驗證 S3 路徑指向有效的模型成品目錄 | 
| 錯誤的推論映像 URI | 驗證映像 URI 是否適合您的區域和模型架構 | 
| 端點卡在建立中 | 檢查 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`請在基準測試目錄中建立具有明確版本限制的 。容器會單獨安裝基準相依性，將衝突降至最低。

**評估分數看起來有誤**

如果評估分數意外低或不一致，請檢查配方中的下列設定：
+ **溫度** — 設定為 `0.0`以取得確定性、可重現的結果
+ **max\_tokens** — 確保值夠大，讓模型完成其回應
+ **completion\_mode** — 對於基本 （非聊天） 模型，請在配方`completion_mode: true`中設定 以使用 completion-style 提示，而非聊天格式

## 資料隱私權
<a name="nova-eval-container-data-privacy"></a>

視您使用的推論提供者而定，您的評估資料處理方式會有所不同。

**SageMaker 端點**

當您使用 SageMaker 推論端點時，所有資料都會保留在您的 中 AWS 帳戶。評估提示和模型回應不會傳送到您的帳戶之外，也不會用於改善 AWS 服務。不需要選擇不接收政策。

**Amazon Bedrock**

當您使用 Amazon Bedrock 做為推論提供者時，您的資料會受到 AWS AI 服務選擇退出政策的約束。若要防止您的資料用於改善 AWS AI 服務，請在 AWS Organizations 層級啟用選擇退出政策。如需詳細資訊，請參閱 [AI 服務選擇退出政策](https://docs.aws.amazon.com//organizations/latest/userguide/orgs_manage_policies_ai-opt-out.html)。


| 推論提供者 | 需要選擇退出 | 詳細資訊 | 
| --- | --- | --- | 
| SageMaker 端點 | 否 | 資料會保留在您的 帳戶中。AI 選擇不接收政策未涵蓋。 | 
| Amazon Bedrock | 是 | 在 Organizations 層級啟用 AWS AI 服務選擇退出政策，以防止資料用於改善服務。 | 