

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 用于推断的数据采集 HyperPod
<a name="sagemaker-hyperpod-model-deployment-data-capture"></a>

Amazon SageMaker HyperPod 推理数据采集使您能够记录推理请求和响应数据，以便进行模型监控、调试和模型改进。推理请求从 SageMaker AI 终端节点流向 Application Load Balancer，然后流向模型容器。您可以在每个级别上单独启用捕获，从最外层（第 1 层， SageMaker AI 端点）到最深层（第 3 层，模型 pod）：


**数据采集层**  

| Tier | 占领点 | 捕获了什么 | Amazon S3 路径 | 
| --- | --- | --- | --- | 
| 第 1 层 | SageMaker AI 端点 | 输入和输出有效载荷、采样、 AWS KMS 加密 | {s3Uri}/{hash}/sme/ | 
| 第 2 层 | 应用程序负载均衡器 | 访问日志（请求路径、客户端 IP、延迟） | {s3Uri}/{hash}/alb/ | 
| 第 3 层 | 模型吊舱 | 推断输入和输出有效负载，具有可配置的采样、缓冲和有效载荷大小限制。在您提供密钥时支持 AWS KMS 加密。捕获最接近模型的数据，以获得最深层次的可见性。 | {s3Uri}/{hash}/pod/ | 

第 1 层在 SageMaker AI 运行时 API 边界捕获全部有效负载，并且需要注册端点。需要与 SageMaker AI 模型监控器兼容时，请使用第 1 层。第 3 层通过可配置的缓冲、采样和有效载荷限制在推理容器上捕获全部有效负载，并且无需注册 SageMaker AI 端点即可运行。当您需要最接近模型的最深可见度时，请使用第 3 层。启用任意组合 — 每个层级在请求流的不同时刻捕获。

所有等级都会写入您的 Amazon S3 存储桶。如果您未指定，则默认情况下`s3Uri`，数据将以`/data-capture/`前缀存储在 TLS 证书存储桶中。在存储桶中，每个部署都会根据从集群 ARN、命名空间、CRD 类型和部署名称派生的哈希值获得唯一路径。同一个部署总是生成相同的前缀，因此来自多个 CRD 提交的数据采集项目将相同的部署流程发送到同一 Amazon S3 子文件夹。

要禁用某个等级的数据采集，请将其`enabled`字段设置为`false`或从 CRD 中移除该等级部分。要禁用所有数据采集，请完全删除该`dataCapture`部分。

## 配置数据采集
<a name="sagemaker-hyperpod-model-deployment-data-capture-config"></a>

通过在您的`InferenceEndpointConfig`或 `JumpStartModel` CRD 中添加一个`dataCapture`部分来启用数据采集。该`dataCapture`区块包含单个`s3Uri`（可选）和一个或多个层级配置。以下示例显示了启用所有三个层的总体结构：

```
  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`（可选，字符串）  
存储捕获数据的亚马逊 S3 URI。如果未指定，则使用带`/data-capture/`前缀的 TLS 证书存储桶。最大长度：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`（必填，布尔值）  
设置`true`为可启用第 1 层捕获。

`sagemakerEndpoint.initialSamplingPercentage`（可选，整数，0—100）  
要捕获的推理请求的百分比。默认：`100`（捕获所有请求）。

`sagemakerEndpoint.captureOptions`（可选，列表）  
指定是捕获推理请求负载 (`Input`)、推理响应负载 (`Output`) 还是同时捕获两者。每个项目都有一个设置为`Input`或的`captureMode`字段`Output`。默认：`[Input, Output]`（请求和响应都被捕获）。最大值：32 个项目。

`sagemakerEndpoint.kmsKeyId`（可选，字符串）  
用于加密捕获的静态数据的密钥的 ARN、 AWS KMS 密钥 ID、别名或别名 ARN。如果指定，则使用此密钥对捕获的数据进行加密。如果省略，则使用默认 Amazon S3 存储桶加密设置对数据进行加密。最大长度：2048 个字符。

`sagemakerEndpoint.captureContentTypeHeader`（可选）  
指定如何解释捕获的负载的内容类型。支架`jsonContentTypes`和`csvContentTypes`阵列。最多：每个 10 个项目。

### 第 2 级：负载均衡器捕获
<a name="sagemaker-hyperpod-model-deployment-data-capture-tier2"></a>

第 2 层启用 ALB 访问日志，捕获请求元数据，例如客户端 IP、请求路径和延迟。

```
    loadBalancer:
      enabled: true
```

`loadBalancer.enabled`（必填，布尔值）  
设置为`true`以启用 2 级捕获。

**注意**  
ALB 访问日志会捕获请求元数据，包括 URL 和查询参数。对于敏感输入，请使用 POST 请求正文而不是查询参数。ALB 日志不支持 AWS KMS 加密，并且仅使用 Amazon S3 的默认加密。

### 第 3 级：捕获模型 pod
<a name="sagemaker-hyperpod-model-deployment-data-capture-tier3"></a>

第 3 层在模型 pod 级别捕获推理输入和输出有效负载，从而提供对推理流量的最深入可见性。当您需要对缓冲、有效载荷大小限制和最接近模型的捕获进行精细控制时，请使用此层。

```
    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`（必填，布尔值）  
设置`true`为可启用第 3 层捕获。

`modelPod.initialSamplingPercentage`（可选，整数，0—100）  
要捕获的推理请求的百分比。默认：`100`（捕获所有请求）。

`modelPod.captureOptions`（可选，列表）  
指定是捕获推理请求负载 (`Input`)、推理响应负载 (`Output`) 还是同时捕获两者。每个项目都有一个设置为`Input`或的`captureMode`字段`Output`。默认：`[Input, Output]`（请求和响应都被捕获）。最大值：32 个项目。

`modelPod.kmsKeyId`（可选，字符串）  
用于加密捕获的静态数据的密钥的 ARN、 AWS KMS 密钥 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 推理部署上启用数据捕获，请配置以下 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 写入访问日志时，才添加此存储桶策略。`$ACCOUNT_ID`替换为您的 AWS 账户 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 钥`kmsKeyId`进行静态加密，请为第 1 层和第 3 层指定。