SageMaker 推論でホストされるモデルを評価する
このガイドでは、オープンソースの評価フレームワークである Inspect AI
注記
実践的なチュートリアルについては、「SageMaker Inspect AI クイックスタートノートブック
概要:
AI 研究コミュニティの標準化されたベンチマークを使用して、SageMaker エンドポイントにデプロイされたカスタマイズされた Amazon Nova モデルを評価できます。このアプローチにより、以下のことが可能になります。
-
カスタマイズされた Amazon Nova モデル (ファインチューニング済み、蒸留済み、またはその他の方法で適応させた) を大規模に評価する
-
複数のエンドポイントインスタンスで並列推論を使用して評価を実行する
-
MMLU、TruthfulQA、HumanEval などのベンチマークを使用してモデルのパフォーマンスを比較する
-
既存の SageMaker インフラストラクチャとの統合
サポートされているモデル
SageMaker 推論プロバイダーは以下を使用します。
-
Amazon Nova モデル (Nova Micro、Nova Lite、Nova Lite 2)
-
vLLM または OpenAI 互換推論サーバーを介してデプロイされたモデル
-
OpenAI Chat Completions API 形式をサポートするエンドポイント
前提条件
開始する前に、以下を確認してください。
-
SageMaker エンドポイントを作成して呼び出すアクセス許可を持つ AWS アカウント
-
AWS CLI、環境変数、または IAM ロールで設定された AWS 認証情報
-
Python 3.9 以降
必要な IAM アクセス許可
IAM ユーザーまたはロールには以下のアクセス許可が必要です。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sagemaker:InvokeEndpoint", "sagemaker:DescribeEndpoint" ], "Resource": "arn:aws:sagemaker:*:*:endpoint/*" } ] }
ステップ 1: SageMaker エンドポイントをデプロイする
評価を実行する前に、モデルを実行する SageMaker 推論エンドポイントが必要です。
Amazon Nova モデルで SageMaker 推論エンドポイントを作成する手順については、「開始方法」を参照してください。
エンドポイントのステータスが InService になったら、評価コマンドで使用するエンドポイント名を書き留めます。
ステップ 2: 評価の依存関係をインストールする
Python 仮想環境を作成し、必要なパッケージをインストールします。
# Create virtual environment python3.12 -m venv venv source venv/bin/activate # Install uv for faster package installation pip install uv # Install Inspect AI and evaluation benchmarks uv pip install inspect-ai inspect-evals # Install AWS dependencies uv pip install aioboto3 boto3 botocore openai
ステップ 3: AWS 認証情報を設定する
以下のいずれかの認証方法を選択します。
オプション 1: AWS CLI (推奨)
aws configure
プロンプトが表示されたら、AWS アクセスキー ID、シークレットアクセスキー、およびデフォルトのリージョンを入力します。
オプション 2: 環境変数
export AWS_ACCESS_KEY_ID=your_access_key export AWS_SECRET_ACCESS_KEY=your_secret_key export AWS_DEFAULT_REGION=us-west-2
オプション 3: IAM ロール
Amazon EC2 または SageMaker ノートブックで実行されている場合、インスタンスの IAM ロールが自動的に使用されます。
認証情報を検証する
import boto3 sts = boto3.client('sts') identity = sts.get_caller_identity() print(f"Account: {identity['Account']}") print(f"User/Role: {identity['Arn']}")
ステップ 4: SageMaker プロバイダーをインストールする
SageMaker プロバイダーは、Inspect AI が SageMaker エンドポイントと通信できるようにします。プロバイダーのインストールプロセスは、クイックスタートノートブック
ステップ 5: 評価ベンチマークをダウンロードする
Inspect Evals リポジトリのクローンを作成して、標準ベンチマークにアクセスします。
git clone https://github.com/UKGovernmentBEIS/inspect_evals.git
このリポジトリには、以下のようなベンチマークが含まれています。
-
MMLU と MMLU-Pro (知識と推論)
-
TruthfulQA (真実性)
-
HumanEval (コード生成)
-
GSM8K (数学的推論)
ステップ 6: 評価を実行する
SageMaker エンドポイントを使用して評価を実行します。
cd inspect_evals/src/inspect_evals/ inspect eval mmlu_pro/mmlu_pro.py \ --model sagemaker/my-nova-endpoint \ -M region_name=us-west-2 \ --max-connections 256 \ --max-retries 100 \ --display plain
主要パラメータ
| パラメータ | デフォルト | 説明 |
|---|---|---|
--max-connections |
10 | エンドポイントへの並列リクエストの数。インスタンス数でスケールします (例: 10 インスタンス × 25 = 250)。 |
--max-retries |
3 | 失敗したリクエストの再試行。大規模な評価には 50~100 を使用します。 |
-M region_name |
us–east–1 | エンドポイントがデプロイされている AWS リージョン。 |
-M read_timeout |
600 | リクエストのタイムアウト (秒)。 |
-M connect_timeout |
60 | 接続タイムアウト (秒)。 |
チューニングの推奨事項
マルチインスタンスエンドポイントの場合:
# 10-instance endpoint example --max-connections 250 # ~25 connections per instance --max-retries 100 # Handle transient errors
--max-connections を高く設定しすぎると、エンドポイントが過負荷になり、スロットリングが発生する可能性があります。これを低く設定すると、キャパシティの使用率が低くなります。
ステップ 7: 結果を表示する
Inspect AI ビューワーを起動して、評価結果を分析します。
inspect view
ビューワーに以下が表示されます。
-
全体的なスコアとメトリクス
-
モデルレスポンスを含むサンプルごとの結果
-
エラー分析と障害パターン
エンドポイントの管理
エンドポイントを更新する
既存のエンドポイントを新しいモデルまたは設定で更新するには:
import boto3 sagemaker = boto3.client('sagemaker', region_name=REGION) # Create new model and endpoint configuration # Then update the endpoint sagemaker.update_endpoint( EndpointName=EXISTING_ENDPOINT_NAME, EndpointConfigName=NEW_ENDPOINT_CONFIG_NAME )
エンドポイントを削除する
sagemaker.delete_endpoint(EndpointName=ENDPOINT_NAME)
カスタムベンチマークをオンボードする
以下のワークフローを使用して、Inspect AI に新しいベンチマークを追加できます。
-
ベンチマークのデータセット形式と評価メトリクスを調べる
-
inspect_evals/で同様の実装を確認する -
データセットレコードを Inspect AI サンプルに変換するタスクファイルを作成する
-
適切なソルバーとスコアラーを実装する
-
小規模なテストランで検証する
タスク構造の例:
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("dataset_name", split="test"), solver=multiple_choice(), scorer=choice() )
トラブルシューティング
一般的な問題
エンドポイントのスロットリングまたはタイムアウト
-
--max-connectionsを減らします -
--max-retriesを増やします -
エンドポイントの CloudWatch メトリクスにキャパシティの問題がないか確認します
認証エラー
-
AWS 認証情報が正しく設定されていることを確認します
-
IAM アクセス許可に
sagemaker:InvokeEndpointが含まれているか確認します
モデルエラー
-
エンドポイントが
InServiceステータスであることを確認します -
モデルが OpenAI Chat Completions API 形式をサポートしていることを確認します