

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Capture de données à des fins d'inférence sur HyperPod
<a name="sagemaker-hyperpod-model-deployment-data-capture"></a>

Amazon SageMaker HyperPod Inference Data Capture vous permet d'enregistrer les données de demande et de réponse d'inférence à des fins de surveillance, de débogage et d'amélioration du modèle. Les demandes d'inférence circulent du point de terminaison de l' SageMaker IA vers l'équilibreur de charge d'application, puis vers le module de modèle. Vous pouvez activer la capture indépendamment à chaque niveau, de la couche la plus externe (niveau 1, point de terminaison de l' SageMaker IA) à la couche la plus profonde (niveau 3, module de modèle) :


**Niveaux de capture de données**  

| Tier | Point de capture | Ce qui est capturé | Parcours Amazon S3 | 
| --- | --- | --- | --- | 
| Niveau 1 | SageMaker Point de terminaison IA | Charges utiles d'entrée et de sortie, échantillonnage, chiffrement AWS KMS  | {s3Uri}/{hash}/sme/ | 
| Niveau 2 | Application Load Balancer | Journaux d'accès (chemins de demande, adresses IP des clients, latences) | {s3Uri}/{hash}/alb/ | 
| Niveau 3 | Modèle de pod | Inferencez les charges utiles d'entrée et de sortie avec des limites configurables d'échantillonnage, de mise en mémoire tampon et de taille de charge utile. Supporte AWS KMS le chiffrement lorsque vous fournissez une clé. Capture les données les plus proches du modèle pour une visibilité optimale. | {s3Uri}/{hash}/pod/ | 

Le niveau 1 capture les charges utiles complètes à la limite de l'API SageMaker AI Runtime et nécessite l'enregistrement des terminaux. Utilisez le niveau 1 lorsque vous avez besoin d'une compatibilité avec SageMaker AI Model Monitor. Le niveau 3 capture les charges utiles complètes dans le conteneur d'inférence avec des limites de mise en mémoire tampon, d'échantillonnage et de charge utile configurables, et fonctionne sans SageMaker enregistrement des points de terminaison AI. Utilisez le niveau 3 lorsque vous avez besoin de la visibilité la plus profonde la plus proche du modèle. Activez n'importe quelle combinaison : chaque niveau capture à un moment différent du flux de demandes.

Tous les niveaux écrivent dans votre compartiment Amazon S3. Si vous ne spécifiez pas de`s3Uri`, les données sont stockées dans le compartiment de certificats TLS sous un `/data-capture/` préfixe par défaut. Dans le compartiment, chaque déploiement obtient un chemin unique basé sur un hachage dérivé de l'ARN du cluster, de l'espace de noms, du type CRD et du nom du déploiement. Le même déploiement génère toujours le même préfixe, de sorte que des artefacts de capture de données provenant de plusieurs soumissions CRD ciblant le même flux de déploiement vers le même sous-dossier Amazon S3.

Pour désactiver la capture de données pour un niveau, définissez son `enabled` champ sur `false` ou supprimez la section du niveau de votre CRD. Pour désactiver toutes les captures de données, supprimez complètement la `dataCapture` section.

## Configuration de la capture de données
<a name="sagemaker-hyperpod-model-deployment-data-capture-config"></a>

Activez la capture de données en ajoutant une `dataCapture` section à votre `InferenceEndpointConfig` `JumpStartModel` CRD. Le `dataCapture` bloc contient une configuration à un seul niveau `s3Uri` (facultatif) et à un ou plusieurs niveaux. L'exemple suivant montre la structure globale avec les trois niveaux activés :

```
  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`(Facultatif, chaîne)  
L'URI Amazon S3 dans lequel les données capturées sont stockées. S'il n'est pas spécifié, le bucket de certificats TLS est utilisé avec un `/data-capture/` préfixe. Longueur maximale : 512 caractères. Le bucket doit se trouver dans le même compte que le cluster.

### Niveau 1 : capture des terminaux par SageMaker IA
<a name="sagemaker-hyperpod-model-deployment-data-capture-tier1"></a>

Le niveau 1 utilise l' SageMaker IA native `DataCaptureConfig` pour capturer les charges utiles d'entrée et de sortie d'inférence au niveau des terminaux. Il s'agit du point de capture le plus externe et il est compatible avec SageMaker AI Model Monitor pour une surveillance automatisée de la qualité des données. Pour plus d'informations sur la capture de données par SageMaker IA, voir [ Capture de données depuis un point de terminaison en temps réel](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`(Obligatoire, booléen)  
Réglez sur `true` pour activer la capture de niveau 1.

`sagemakerEndpoint.initialSamplingPercentage`(Facultatif, entier, 0—100)  
Pourcentage de demandes d'inférence à saisir. Par défaut : `100` (toutes les demandes sont capturées).

`sagemakerEndpoint.captureOptions`(Facultatif, liste)  
Spécifie s'il faut capturer la charge utile de la demande d'inférence (`Input`), la charge utile de la réponse d'inférence (`Output`), ou les deux. Chaque élément possède un `captureMode` champ défini sur `Input` ou`Output`. Par défaut : `[Input, Output]` (la demande et la réponse sont capturées). Maximum : 32 articles.

`sagemakerEndpoint.kmsKeyId`(Facultatif, chaîne)  
ARN, ID de clé, nom d'alias ou ARN d'alias d'une AWS KMS clé pour chiffrer les données capturées au repos. Lorsque cela est spécifié, les données capturées sont cryptées avec cette clé. En cas d'omission, les données sont chiffrées avec les paramètres de chiffrement par défaut du compartiment Amazon S3. Longueur maximale : 2048 caractères.

`sagemakerEndpoint.captureContentTypeHeader` (facultatif)  
Spécifie comment interpréter le type de contenu des charges utiles capturées. Supports `jsonContentTypes` et `csvContentTypes` matrices. Maximum : 10 articles chacun.

### Niveau 2 : capture de l'équilibreur de charge
<a name="sagemaker-hyperpod-model-deployment-data-capture-tier2"></a>

Le niveau 2 active les journaux d'accès ALB, capturant les métadonnées des demandes telles que les adresses IP des clients, les chemins de demande et les latences.

```
    loadBalancer:
      enabled: true
```

`loadBalancer.enabled`(Obligatoire, booléen)  
Réglez sur `true` pour activer la capture de niveau 2.

**Note**  
Les journaux d'accès ALB capturent les métadonnées des demandes, y compris les URL et les paramètres de requête. Utilisez des corps de requête POST plutôt que des paramètres de requête pour les entrées sensibles. Les journaux ALB ne prennent pas en charge AWS KMS le chiffrement et utilisent uniquement le cryptage par défaut d'Amazon S3.

### Niveau 3 : capture d'un module de modélisation
<a name="sagemaker-hyperpod-model-deployment-data-capture-tier3"></a>

Le niveau 3 capture les charges utiles d'entrée et de sortie d'inférence au niveau du module du modèle, offrant ainsi la meilleure visibilité sur le trafic d'inférence. Utilisez ce niveau lorsque vous avez besoin d'un contrôle précis de la mise en mémoire tampon, des limites de taille de charge utile et de la capture au plus près du modèle.

```
    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`(Obligatoire, booléen)  
Réglez sur `true` pour activer la capture de niveau 3.

`modelPod.initialSamplingPercentage`(Facultatif, entier, 0—100)  
Pourcentage de demandes d'inférence à saisir. Par défaut : `100` (toutes les demandes sont capturées).

`modelPod.captureOptions`(Facultatif, liste)  
Spécifie s'il faut capturer la charge utile de la demande d'inférence (`Input`), la charge utile de la réponse d'inférence (`Output`), ou les deux. Chaque élément possède un `captureMode` champ défini sur `Input` ou`Output`. Par défaut : `[Input, Output]` (la demande et la réponse sont capturées). Maximum : 32 articles.

`modelPod.kmsKeyId`(Facultatif, chaîne)  
ARN, ID de clé, nom d'alias ou ARN d'alias d'une AWS KMS clé pour chiffrer les données capturées au repos. Lorsque cela est spécifié, les données capturées sont cryptées avec cette clé. En cas d'omission, les données sont chiffrées avec les paramètres de chiffrement par défaut du compartiment Amazon S3. Longueur maximale : 2048 caractères.

`modelPod.bufferConfig.batchSize`(Facultatif, entier, 1 à 1 000)  
Nombre de demandes d'inférence à traiter par lots avant le vidage. Valeur par défaut : `10`.

`modelPod.bufferConfig.flushIntervalSeconds`(Facultatif, entier, 10 à 300)  
Durée maximale en secondes pendant laquelle un lot est conservé avant d'être vidé, que la taille du lot soit atteinte ou non. Valeur par défaut : `60`.

`modelPod.payloadConfig.maxPayloadSizeKB` (facultatif, entier)  
Taille maximale de la charge utile en Ko par demande. Les charges utiles dépassant cette limite sont tronquées. Si ce paramètre n'est pas défini, l'intégralité de la charge utile est capturée.

## Mettre à jour l'addon
<a name="sagemaker-hyperpod-model-deployment-update-addon"></a>

**Prérequis : Authentifiez-vous et connectez-vous à votre cluster EKS **

Authentifiez-vous sur votre AWS compte. Avant de vous connecter, collectez le nom, la région et l'ARN HyperPod du cluster EKS :

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

Connectez-vous à votre cluster EKS :

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

Mettez à jour la configuration du module complémentaire :

```
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
```

**Attendez que l'addon soit actif, puis déployez les modèles **

## Mettre à jour les autorisations pour les clusters existants
<a name="sagemaker-hyperpod-model-deployment-data-capture-iam"></a>

Pour activer la capture de données sur vos déploiements HyperPod d'inférence, configurez les autorisations IAM suivantes.

1. **Rôle d'exécution de l'opérateur d'inférence **

   Ajoutez l'autorisation S3 suivante :

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

   Ajoutez le nom de votre compartiment si vous souhaitez utiliser un compartiment S3 personnalisé.

   Si vous utilisez une clé KMS gérée par le client, ajoutez également :

   ```
   {
       "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. **Rôle du pilote S3 CSI **

   Ajoutez l'autorisation S3 suivante :

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

   Si vous utilisez une clé KMS gérée par le client, ajoutez également :

   ```
   {
       "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. **Politique relative aux compartiments S3 **

   Ajoutez cette politique de compartiment uniquement si vous activez la capture des données de l'équilibreur de charge (niveau 2) pour permettre à ALB d'écrire des journaux d'accès. `$ACCOUNT_ID`Remplacez-le par votre identifiant de AWS compte.

   ```
   {
       "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"
           }
       }
   }
   ```

## Bonnes pratiques
<a name="sagemaker-hyperpod-model-deployment-data-capture-perf"></a>
+ Permet `initialSamplingPercentage` de contrôler le volume de données capturées. Commencez par réduire le pourcentage de production et augmentez-le si nécessaire.
+ À utiliser `payloadConfig.maxPayloadSizeKB` (niveau 3) pour limiter la taille des charges utiles capturées et contrôler les coûts de stockage.
+ Spécifiez a `kmsKeyId` pour les niveaux 1 et 3 si votre charge de travail nécessite un chiffrement au repos avec votre propre AWS KMS clé.