View a markdown version of this page

HyperPod 上推論的資料擷取 - Amazon SageMaker AI

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

HyperPod 上推論的資料擷取

Amazon SageMaker HyperPod 推論資料擷取可讓您記錄推論請求和回應資料,以進行模型監控、偵錯和模型改進。推論請求會從 SageMaker AI 端點流向 Application Load Balancer,然後流向模型 Pod。您可以在每個層級獨立啟用擷取,從最外層 (第 1 層,SageMaker AI 端點) 到最深層 (第 3 層,模型 Pod):

資料擷取層
Tier 擷取點 擷取的內容 Amazon S3 路徑
第 1 層 SageMaker AI 端點 輸入和輸出承載、取樣、 AWS KMS 加密 {s3Uri}/{hash}/sme/
第 2 層 Application Load Balancer 存取日誌 (請求路徑、用戶端 IPs、延遲) {s3Uri}/{hash}/alb/
第 3 層 模型 Pod 具有可設定取樣、緩衝和承載大小限制的推論輸入和輸出承載。當您提供金鑰時支援 AWS KMS 加密。擷取最接近模型的資料,以獲得最深層的可見性。 {s3Uri}/{hash}/pod/

第 1 層會在 SageMaker AI 執行期 API 界限擷取完整承載,且需要端點註冊。當您需要與 SageMaker AI Model Monitor 的相容性時,請使用第 1 層。第 3 層使用可設定的緩衝、取樣和承載限制擷取推論容器的完整承載,無需 SageMaker AI 端點註冊即可運作。當您需要最接近模型的深入可見性時,請使用第 3 層。啟用任意組合 — 每個層都會在請求流程中的不同點擷取。

所有層都會寫入您的 Amazon S3 儲存貯體。如果您未指定 s3Uri,資料預設會存放在 TLS 憑證儲存貯體的/data-capture/字首下。在儲存貯體中,每個部署都會根據衍生自叢集 ARN、命名空間、CRD 類型和部署名稱的雜湊取得唯一的路徑。相同的部署一律會產生相同的字首,因此資料擷取來自多個 CRD 提交的成品,以相同的部署流程為目標到相同的 Amazon S3 子資料夾。

若要停用層的資料擷取,請將其enabled欄位設定為 ,false或從 CRD 中移除層區段。若要停用所有資料擷取,請完全移除 dataCapture區段。

設定資料擷取

透過將dataCapture區段新增至您的 InferenceEndpointConfigJumpStartModel CRD 來啟用資料擷取。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 (選用,字串)

存放擷取資料的 Amazon S3 URI。如果未指定,TLS 憑證儲存貯體會與/data-capture/字首搭配使用。長度上限: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) 或兩者。每個項目都有一個captureMode欄位設定為 InputOutput。預設:[Input, Output](同時擷取請求和回應)。上限:32 個項目。

sagemakerEndpoint.kmsKeyId (選用,字串)

用於加密靜態擷取資料的 AWS KMS 金鑰 ARN、金鑰 ID、別名名稱或別名 ARN。指定時,系統會使用此金鑰加密擷取的資料。省略時,會使用預設的 Amazon S3 儲存貯體加密設定來加密資料。長度上限:2048 個字元。

sagemakerEndpoint.captureContentTypeHeader (選用)

指定如何解譯所擷取承載的內容類型。支援 jsonContentTypescsvContentTypes陣列。上限:每個 10 個項目。

第 2 層:負載平衡器擷取

第 2 層啟用 ALB 存取日誌,擷取請求中繼資料,例如用戶端 IPs、請求路徑和延遲。

loadBalancer: enabled: true
loadBalancer.enabled (必要,布林值)

設定為 true以啟用第 2 層擷取。

注意

ALB 存取日誌會擷取請求中繼資料,包括 URLs和查詢參數。使用 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) 或兩者。每個項目都有一個captureMode欄位設定為 InputOutput。預設:[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 為單位。超過此限制的承載會被截斷。如果未設定,則會擷取整個承載。

更新附加元件

先決條件:驗證並連線至您的 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

等待附加元件處於作用中狀態,然後部署模型

更新現有叢集的許可

若要在 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}" } } }
  2. 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}" } } }
  3. 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 層指定 。