

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 pour inférence sur HyperPod
<a name="sagemaker-hyperpod-model-deployment-data-capture"></a>

La capture des données d' SageMaker HyperPod inférence Amazon vous permet d'enregistrer les demandes d'inférence et les données de réponse à des fins de surveillance, de débogage et d'amélioration des modèles. Les demandes d'inférence circulent du point de terminaison SageMaker AI vers l'Application Load Balancer, puis vers le model pod. Vous pouvez activer la capture indépendamment à chaque niveau, de la couche la plus externe (niveau 1, point de terminaison SageMaker AI) à la couche la plus profonde (niveau 3, model pod) :


**Niveaux de capture de données**  

| Tier | Point de capture | Ce qui est capturé | Chemin 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 : pod | Inférez les charges utiles d'entrée et de sortie avec des limites d'échantillonnage, de mise en mémoire tampon et de taille de charge utile configurables. Prend en charge AWS KMS le chiffrement lorsque vous fournissez une clé. Capture les données les plus proches du modèle pour une visibilité maximale. | {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 du point de terminaison. 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 mémoire tampon, d'échantillonnage et de charge utile configurables, et fonctionne sans SageMaker enregistrement des points de terminaison IA. Utilisez le niveau 3 lorsque vous avez besoin de la visibilité la plus profonde au plus près du modèle. Activez n'importe quelle combinaison : chaque niveau capture à un point 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 les données capturent des artefacts 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 toute capture 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 CRD `InferenceEndpointConfig` ou à votre `JumpStartModel` CRD. Le `dataCapture` bloc contient une configuration à un seul niveau `s3Uri` (facultatif) et une ou plusieurs configurations à 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 où les données capturées sont stockées. S'il n'est pas spécifié, le compartiment 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 la technologie native de l' SageMaker IA `DataCaptureConfig` pour capturer les charges utiles d'inférence en entrée et en sortie au niveau du terminal. 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, consultez [Capture de données à partir d'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 à capturer. 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 du compartiment Amazon S3 par défaut. 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, notamment 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 chiffrement par défaut d'Amazon S3.

### Niveau 3 : capture du modèle par pod
<a name="sagemaker-hyperpod-model-deployment-data-capture-tier3"></a>

Le niveau 3 capture les charges utiles d'inférence en entrée et en sortie au niveau du module de modélisation, offrant ainsi une visibilité optimale 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 charge utile et de la capture la plus proche 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 à capturer. 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 du compartiment Amazon S3 par défaut. Longueur maximale : 2048 caractères.

`modelPod.bufferConfig.batchSize`(Facultatif, entier, 1 à 1 000)  
Nombre de demandes d'inférence à traiter par lots avant le rinçage. 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 rincé, que la taille du lot ait été 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. S'il n'est pas défini, la charge utile complète est capturée.

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

**Conditions préalables : Authentifiez-vous et connectez-vous à votre cluster EKS**

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

```
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 de l'addon :

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

## Mise à jour des 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. Remplacez `$ACCOUNT_ID` 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>
+ `initialSamplingPercentage`À utiliser pour contrôler le volume de données capturées. Commencez par un pourcentage de production plus faible et augmentez-le selon les besoins.
+ Utilisez `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é.