

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# HyperPod での推論のためのデータキャプチャ
<a name="sagemaker-hyperpod-model-deployment-data-capture"></a>

Amazon SageMaker HyperPod 推論データキャプチャを使用すると、モデルのモニタリング、デバッグ、モデルの改善のために推論のリクエストとレスポンスのデータを記録できます。推論リクエストは、SageMaker AI エンドポイントから Application Load Balancer に、次にモデルポッドに流れます。キャプチャは、最も外側のレイヤー (階層 1、SageMaker AI エンドポイント) から最も深いレイヤー (階層 3、モデルポッド) まで、各レベルで個別に有効にできます。


**データキャプチャ階層**  

| Tier | キャプチャポイント | キャプチャされる内容 | Amazon S3 パス | 
| --- | --- | --- | --- | 
| 階層 1 | SageMaker AI エンドポイント | 入出力ペイロード、サンプリング、 AWS KMS 暗号化 | {s3Uri}/{hash}/sme/ | 
| 階層 2 | Application Load Balancer | アクセスログ (リクエストパス、クライアント IPs、レイテンシー) | {s3Uri}/{hash}/alb/ | 
| 階層 3 | モデルポッド | 設定可能なサンプリング、バッファリング、ペイロードサイズ制限を持つ推論入出力ペイロード。キーを指定するときに AWS KMS 暗号化をサポートします。モデルに最も近いデータをキャプチャして、最も深い可視性を実現します。 | {s3Uri}/{hash}/pod/ | 

階層 1 は、SageMaker AI ランタイム API 境界で完全なペイロードをキャプチャし、エンドポイント登録が必要です。SageMaker AI Model Monitor との互換性が必要な場合は、Tier 1 を使用します。階層 3 は、設定可能なバッファリング、サンプリング、ペイロード制限を使用して推論コンテナで完全なペイロードをキャプチャし、SageMaker AI エンドポイント登録なしで動作します。モデルに最も近い最も深い可視性が必要な場合は、階層 3 を使用します。任意の組み合わせを有効にする — 各階層は、リクエストフローの異なるポイントでキャプチャします。

すべての階層は Amazon S3 バケットに書き込みます。を指定しない場合`s3Uri`、データはデフォルトで TLS 証明書バケットの`/data-capture/`プレフィックスに保存されます。バケット内では、各デプロイはクラスター ARN、名前空間、CRD タイプ、デプロイ名から派生したハッシュに基づいて一意のパスを取得します。同じデプロイでは常に同じプレフィックスが生成されるため、同じデプロイフローをターゲットとする複数の CRD 送信から同じ Amazon S3 サブフォルダへのデータキャプチャアーティファクトが生成されます。

階層のデータキャプチャを無効にするには、その`enabled`フィールドを に設定する`false`か、CRD から階層セクションを削除します。すべてのデータキャプチャを無効にするには、 `dataCapture`セクションを完全に削除します。

## データキャプチャの設定
<a name="sagemaker-hyperpod-model-deployment-data-capture-config"></a>

`InferenceEndpointConfig` または `JumpStartModel` CRD に `dataCapture`セクションを追加して、データキャプチャを有効にします。`dataCapture` ブロックには、1 つの `s3Uri` (オプション) 階層設定と 1 つ以上の階層設定が含まれています。次の例は、3 つの階層すべてを有効にした全体的な構造を示しています。

```
  dataCapture:
    s3Uri: s3://my-capture-bucket/captures/   # Optional. Defaults to TLS bucket.
    sagemakerEndpoint:
      enabled: true
      # Tier 1 fields...
    loadBalancer:
      enabled: true
    modelPod:
      enabled: true
      # Tier 3 fields...
```

`dataCapture.s3Uri` (オプション、文字列)  
キャプチャされたデータが保存される Amazon S3 URI。指定しない場合、TLS 証明書バケットは`/data-capture/`プレフィックスとともに使用されます。最大長: 512 文字。バケットはクラスターと同じアカウントにある必要があります。

### 階層 1: SageMaker AI エンドポイントキャプチャ
<a name="sagemaker-hyperpod-model-deployment-data-capture-tier1"></a>

階層 1 は、SageMaker AI のネイティブ `DataCaptureConfig` を使用して、エンドポイントレベルで推論入出力ペイロードをキャプチャします。これは最も外側のキャプチャポイントであり、自動データ品質モニタリングのために SageMaker AI Model Monitor と互換性があります。SageMaker AI データキャプチャの詳細については、[「リアルタイムエンドポイントからのデータのキャプチャ](https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-data-capture.html)」を参照してください。

```
    sagemakerEndpoint:
      enabled: true
      initialSamplingPercentage: 100
      kmsKeyId: arn:aws:kms:us-east-2:123456789012:key/my-key-id
      captureOptions:
        - captureMode: Input
        - captureMode: Output
      captureContentTypeHeader:
        jsonContentTypes:
          - application/json
```

`sagemakerEndpoint.enabled` (必須、ブール値)  
階層 1 キャプチャを有効にする`true`には、 に設定します。

`sagemakerEndpoint.initialSamplingPercentage` (オプション、整数、0～100)  
キャプチャする推論リクエストの割合。デフォルト: `100` (すべてのリクエストがキャプチャされます）。

`sagemakerEndpoint.captureOptions` (オプション、リスト)  
推論リクエストペイロード (`Input`)、推論レスポンスペイロード (`Output`)、またはその両方をキャプチャするかどうかを指定します。各項目には、 `Input` または に設定された`captureMode`フィールドがあります`Output`。デフォルト: `[Input, Output]` (リクエストとレスポンスの両方がキャプチャされます）。最大: 32 項目。

`sagemakerEndpoint.kmsKeyId` (オプション、文字列)  
保管時にキャプチャされたデータを暗号化するための AWS KMS キーの ARN、キー ID、エイリアス名、またはエイリアス ARN。指定した場合、キャプチャされたデータはこのキーで暗号化されます。省略すると、データはデフォルトの Amazon S3 バケット暗号化設定で暗号化されます。最大長: 2048 文字。

`sagemakerEndpoint.captureContentTypeHeader` (オプション)  
キャプチャされたペイロードのコンテンツタイプを解釈する方法を指定します。`jsonContentTypes` および `csvContentTypes`配列をサポートします。最大: 各 10 項目。

### 階層 2: ロードバランサーのキャプチャ
<a name="sagemaker-hyperpod-model-deployment-data-capture-tier2"></a>

階層 2 では、ALB アクセスログが有効になり、クライアント IPs、レイテンシーなどのリクエストメタデータがキャプチャされます。

```
    loadBalancer:
      enabled: true
```

`loadBalancer.enabled` (必須、ブール値)  
を に設定`true`して、階層 2 キャプチャを有効にします。

**注記**  
ALB アクセスログは、URLs。機密入力のクエリパラメータではなく、POST リクエスト本文を使用します。ALB ログは AWS KMS 暗号化をサポートしておらず、Amazon S3 のデフォルトの暗号化のみを使用します。

### 階層 3: モデルポッドキャプチャ
<a name="sagemaker-hyperpod-model-deployment-data-capture-tier3"></a>

階層 3 は、モデルポッドレベルで推論入出力ペイロードをキャプチャし、推論トラフィックを最も深く可視化します。この階層は、バッファリング、ペイロードサイズ制限、モデルに最も近いキャプチャをきめ細かく制御する必要がある場合に使用します。

```
    modelPod:
      enabled: true
      initialSamplingPercentage: 100
      kmsKeyId: arn:aws:kms:us-east-2:123456789012:key/my-key-id
      captureOptions:
        - captureMode: Input
        - captureMode: Output
      bufferConfig:
        batchSize: 100
        flushIntervalSeconds: 60
      payloadConfig:
        maxPayloadSizeKB: 1024
```

`modelPod.enabled` (必須、ブール値)  
階層 3 キャプチャを有効にする`true`には、 に設定します。

`modelPod.initialSamplingPercentage` (オプション、整数、0～100)  
キャプチャする推論リクエストの割合。デフォルト: `100` (すべてのリクエストがキャプチャされます）。

`modelPod.captureOptions` (オプション、リスト)  
推論リクエストペイロード (`Input`)、推論レスポンスペイロード (`Output`)、またはその両方をキャプチャするかどうかを指定します。各項目には、 `Input` または に設定された`captureMode`フィールドがあります`Output`。デフォルト: `[Input, Output]` (リクエストとレスポンスの両方がキャプチャされます）。最大: 32 項目。

`modelPod.kmsKeyId` (オプション、文字列)  
保管時にキャプチャされたデータを暗号化するための AWS KMS キーの ARN、キー ID、エイリアス名、またはエイリアス ARN。指定した場合、キャプチャされたデータはこのキーで暗号化されます。省略すると、データはデフォルトの Amazon S3 バケット暗号化設定で暗号化されます。最大長: 2048 文字。

`modelPod.bufferConfig.batchSize` (オプション、整数、1～1000)  
フラッシュ前にバッチ処理する推論リクエストの数。デフォルト: `10`。

`modelPod.bufferConfig.flushIntervalSeconds` (オプション、整数、10～300)  
バッチサイズに達したかどうかにかかわらず、フラッシュされる前にバッチが保持される秒単位の最大時間。デフォルト: `60`。

`modelPod.payloadConfig.maxPayloadSizeKB` (オプション、整数)  
リクエストあたりの最大ペイロードサイズは KB です。この制限を超えるペイロードは切り捨てられます。設定しない場合、ペイロード全体がキャプチャされます。

## アドオンの更新
<a name="sagemaker-hyperpod-model-deployment-update-addon"></a>

**前提条件: EKS クラスターを認証して接続する**

 AWS アカウントに対して認証します。接続する前に、EKS クラスター名、リージョン、HyperPod クラスター ARN を収集します。

```
CLUSTER={{EKS_CLUSTER_NAME}}
REGION={{REGION}}
HP_ARN={{HYPERPOD_CLUSTER_ARN}}
```

EKS クラスターに接続します。

```
aws eks update-kubeconfig --region {{REGION}} --name {{EKS_CLUSTER_NAME}}
```

アドオン設定を更新します。

```
VERSION=$(aws eks describe-addon --cluster-name $CLUSTER --addon-name amazon-sagemaker-hyperpod-inference --region $REGION --query 'addon.addonVersion' --output text)
CURRENT_CONFIG=$(aws eks describe-addon --cluster-name $CLUSTER --addon-name amazon-sagemaker-hyperpod-inference --region $REGION --query 'addon.configurationValues' --output text)
NEW_CONFIG=$(echo "$CURRENT_CONFIG" | jq --arg arn "$HP_ARN" '. + {hyperpodClusterArn: $arn}')

aws eks update-addon \
--cluster-name $CLUSTER \
--addon-name amazon-sagemaker-hyperpod-inference \
--addon-version "$VERSION" \
--configuration-values "$NEW_CONFIG" \
--resolve-conflicts OVERWRITE \
--region $REGION
```

**アドオンがアクティブになるまで待ってから、モデルをデプロイします。**

## 既存のクラスターのアクセス許可の更新
<a name="sagemaker-hyperpod-model-deployment-data-capture-iam"></a>

HyperPod Inference デプロイでデータキャプチャを有効にするには、次の IAM アクセス許可を設定します。

1. **推論演算子の実行ロール**

   次の S3 アクセス許可を追加します。

   ```
   {
       "Sid": "DataCaptureS3Access",
       "Effect": "Allow",
       "Action": "s3:PutObject",
       "Resource": "arn:aws:s3:::hyperpod-tls*/data-capture/*",
       "Condition": {
           "StringEquals": {
               "aws:ResourceAccount": "${aws:PrincipalAccount}"
           }
       }
   }
   ```

   カスタム S3 バケットを使用する場合は、バケット名を追加します。

   カスタマーマネージド KMS キーを使用する場合は、以下も追加します。

   ```
   {
       "Sid": "DataCaptureKmsAccess",
       "Effect": "Allow",
       "Action": [
           "kms:Decrypt",
           "kms:GenerateDataKey"
       ],
       "Resource": "arn:aws:kms:*:*:key/*",
       "Condition": {
           "StringLike": {
               "kms:ViaService": "s3.*.amazonaws.com",
               "kms:EncryptionContext:aws:s3:arn": "arn:aws:s3:::hyperpod-tls*"
           },
           "StringEquals": {
               "aws:ResourceAccount": "${aws:PrincipalAccount}"
           }
       }
   }
   ```

1. **S3 CSI ドライバーロール**

   次の S3 アクセス許可を追加します。

   ```
   {
       "Sid": "DataCaptureWriteAccess",
       "Effect": "Allow",
       "Action": [
           "s3:PutObject",
           "s3:AbortMultipartUpload"
       ],
       "Resource": "arn:aws:s3:::hyperpod-tls*/data-capture/*",
       "Condition": {
           "StringEquals": {
               "aws:ResourceAccount": "${aws:PrincipalAccount}"
           }
       }
   }
   ```

   カスタマーマネージド KMS キーを使用する場合は、以下も追加します。

   ```
   {
       "Sid": "DataCaptureKmsAccess",
       "Effect": "Allow",
       "Action": [
           "kms:Decrypt",
           "kms:GenerateDataKey",
           "kms:DescribeKey"
       ],
       "Resource": "arn:aws:kms:*:*:key/*",
       "Condition": {
           "StringLike": {
               "kms:ViaService": "s3.*.amazonaws.com"
           },
           "StringEquals": {
               "aws:ResourceAccount": "${aws:PrincipalAccount}"
           }
       }
   }
   ```

1. **S3 バケットポリシー**

   このバケットポリシーは、ロードバランサーデータキャプチャ (階層 2) を有効にして ALB がアクセスログを書き込むことを許可する場合にのみ追加します。を AWS アカウント ID `$ACCOUNT_ID`に置き換えます。

   ```
   {
       "Sid": "AllowALBAccessLogDelivery",
       "Effect": "Allow",
       "Principal": {
           "Service": "logdelivery.elasticloadbalancing.amazonaws.com"
       },
       "Action": "s3:PutObject",
       "Resource": "arn:aws:s3:::hyperpod-tls*/data-capture/*",
       "Condition": {
           "StringEquals": {
               "aws:SourceAccount": "$ACCOUNT_ID"
           }
       }
   }
   ```

## ベストプラクティス
<a name="sagemaker-hyperpod-model-deployment-data-capture-perf"></a>
+ を使用して`initialSamplingPercentage`、キャプチャされたデータの量を制御します。本番環境の割合を低くして開始し、必要に応じて増やします。
+ `payloadConfig.maxPayloadSizeKB` (階層 3) を使用して、キャプチャされたペイロードのサイズを制限し、ストレージコストを制御します。
+ ワークロードで保管時に独自の AWS KMS キーによる暗号化が必要な場合は、Tier 1 と Tier 3 `kmsKeyId`に を指定します。