本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
用于推断的数据采集 HyperPod
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部分。
配置数据采集
通过在您的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 端点捕获
第 1 层使用 SageMaker AI 原生DataCaptureConfig设备在端点级别捕获推理输入和输出有效负载。这是最外层的捕获点,与 SageMaker AI Model Monitor 兼容,用于自动监控数据质量。有关 SageMaker AI 数据采集的更多信息,请参阅从实时端点捕获数据。
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 级:负载均衡器捕获
第 2 层启用 ALB 访问日志,捕获请求元数据,例如客户端 IP、请求路径和延迟。
loadBalancer: enabled: true
loadBalancer.enabled(必填,布尔值)设置为
true以启用 2 级捕获。
注意
ALB 访问日志会捕获请求元数据,包括 URL 和查询参数。对于敏感输入,请使用 POST 请求正文而不是查询参数。ALB 日志不支持 AWS KMS 加密,并且仅使用 Amazon S3 的默认加密。
第 3 级:捕获模型 pod
第 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 为单位)。超过此限制的有效载荷将被截断。如果未设置,则会捕获整个有效载荷。
更新插件
先决条件:进行身份验证并连接到您的 EKS 集群
对您的 AWS 账户进行身份验证。在连接之前,请收集 EKS 集群名称、区域和 HyperPod 集群 ARN:
CLUSTER=EKS_CLUSTER_NAMEREGION=REGIONHP_ARN=HYPERPOD_CLUSTER_ARN
连接到您的 EKS 集群:
aws eks update-kubeconfig --regionREGION--nameEKS_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
等待插件激活,然后部署模型
更新现有集群的权限
要在 HyperPod 推理部署上启用数据捕获,请配置以下 IAM 权限。
-
推理运算符执行角色
添加以下 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}" } } } -
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}" } } } -
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" } } }
最佳实践
-
initialSamplingPercentage用于控制捕获的数据量。从较低的产量百分比开始,然后根据需要增加。 -
使用
payloadConfig.maxPayloadSizeKB(第 3 级)来限制捕获的有效载荷的大小并控制存储成本。 -
如果您的工作负载需要使用自己的密 AWS KMS 钥
kmsKeyId进行静态加密,请为第 1 层和第 3 层指定。