

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 des données
<a name="model-monitor-data-capture"></a>

Pour journaliser les entrées de votre point de terminaison et les sorties d'inférence de votre modèle déployé sur Amazon S3, vous pouvez activer une fonction appelée *Data Capture* (Capture de données). La fonction *Data Capture* (Capture de données) est généralement utilisée pour enregistrer des informations qui peuvent être utilisées pour l'entraînement, le débogage et la surveillance. Amazon SageMaker Model Monitor analyse automatiquement ces données capturées et compare les mesures issues de ces données avec une référence que vous créez pour le modèle. Pour obtenir plus d’informations sur Model Monitor, consultez [Surveillance de la qualité des données et des modèles avec Amazon SageMaker Model Monitor](model-monitor.md).

Vous pouvez implémenter la *capture de données* pour les modes de surveillance du modèle en temps réel et par lots à l'aide du SDK Python AWS SDK pour Python (Boto) ou du SDK SageMaker Python. Pour un point de terminaison en temps réel, vous devez spécifier votre configuration de *Data Capture* (Capture de données) lors de la création de votre point de terminaison. En raison de la nature persistante de votre point de terminaison en temps réel, vous pouvez configurer des options supplémentaires pour activer ou désactiver la capture de données à certains moments, ou modifier la fréquence d'échantillonnage. Vous pouvez également choisir de chiffrer vos données d'inférence.

Pour une tâche de transformation par lots, vous pouvez activer *Data Capture* (Capture de données) si vous souhaitez exécuter une surveillance des modèles dans les délais ou une surveillance continue des modèles pour des tâches de transformation par lots régulières et périodiques. Vous spécifierez votre configuration de *Data Capture* (Capture de données) lorsque vous créerez votre tâche de transformation par lots. Dans cette configuration, vous avez la possibilité d'activer le chiffrement ou de générer l'identifiant d'inférence avec votre sortie, ce qui vous permet de faire correspondre vos données capturées aux données Ground Truth.

# Capture des données à partir du point de terminaison en temps réel
<a name="model-monitor-data-capture-endpoint"></a>

**Note**  
Pour éviter tout impact sur les requêtes d’inférence, Data Capture cesse de capturer les requêtes à des niveaux élevés d’utilisation du disque. Nous vous recommandons de maintenir l’utilisation du disque en dessous de 75 % pour que la capture des données continue de capturer les requêtes.

Pour capturer des données pour votre point de terminaison en temps réel, vous devez déployer un modèle à l'aide de services d'hébergement basés sur l' SageMaker IA. Cela nécessite que vous créiez un modèle d' SageMaker IA, que vous définissiez une configuration de point de terminaison et que vous créiez un point de terminaison HTTPS.

Les étapes requises pour activer la capture de données sont similaires, que vous utilisiez le SDK Python AWS SDK pour Python (Boto) ou le SDK SageMaker Python. Si vous utilisez le AWS SDK, définissez le [DataCaptureConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataCaptureConfig.html)dictionnaire, ainsi que les champs obligatoires, dans la [CreateEndpointConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html)méthode pour activer la capture de données. Si vous utilisez le SDK SageMaker Python, importez la [DataCaptureConfig](https://sagemaker.readthedocs.io/en/stable/api/inference/model_monitor.html#sagemaker.model_monitor.data_capture_config.DataCaptureConfig)classe et initialisez une instance à partir de cette classe. Puis, transmettez cet objet au paramètre `DataCaptureConfig` dans la méthode `sagemaker.model.Model.deploy()`.

Pour utiliser les extraits de code suivants, remplacez ceux de l'exemple *italicized placeholder text* de code par vos propres informations.

## Comment activer la capture des données
<a name="model-monitor-data-capture-defing.title"></a>

Spécifiez une configuration de capture de données. Avec cette configuration, vous pouvez capturer la charge utile de la demande et/ou la charge utile de la réponse. L'extrait de code suivant montre comment activer la capture de données à l'aide du SDK AWS SDK pour Python (Boto) et du SDK AI SageMaker Python.

**Note**  
Vous n’avez pas besoin d’utiliser Model Monitor pour capturer les données utiles des requêtes ou des réponses.

------
#### [ AWS SDK pour Python (Boto) ]

Configurez les données que vous souhaitez capturer avec le [DataCaptureConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataCaptureConfig.html)dictionnaire lorsque vous créez un point de terminaison à l'aide de `CreateEndpointConfig` cette méthode. Définissez `EnableCapture` sur la valeur booléenne True. En outre, fournissez les paramètres obligatoires suivants :
+ `EndpointConfigName` : le nom de la configuration du point de terminaison. Vous utiliserez ce nom lorsque vous émettrez une requête `CreateEndpoint`.
+ `ProductionVariants` : une liste des modèles que vous souhaitez héberger dans ce point de terminaison. Définissez un type de données de dictionnaire pour chaque modèle.
+ `DataCaptureConfig` : type de données de dictionnaire où vous spécifiez une valeur entière qui correspond au pourcentage initial de données à échantillonner (`InitialSamplingPercentage`), l'URI Amazon S3 où vous voulez que les données capturées soient stockées et une liste d'options de capture (`CaptureOptions`). Spécifiez soit `Input` ou `Output` pour le champ `CaptureMode` dans la liste `CaptureOptions`. 

Vous pouvez éventuellement spécifier la manière dont l' SageMaker IA doit encoder les données capturées en transmettant des arguments de paire clé-valeur au dictionnaire. `CaptureContentTypeHeader`

```
# Create an endpoint config name.
endpoint_config_name = '<endpoint-config-name>'

# The name of the production variant.
variant_name = '<name-of-production-variant>'                   
  
# The name of the model that you want to host. 
# This is the name that you specified when creating the model.
model_name = '<The_name_of_your_model>'

instance_type = '<instance-type>'
#instance_type='ml.m5.xlarge' # Example    

# Number of instances to launch initially.
initial_instance_count = <integer>

# Sampling percentage. Choose an integer value between 0 and 100
initial_sampling_percentage = <integer>                                                                                                                                                                                                                        

# The S3 URI containing the captured data
s3_capture_upload_path = 's3://<bucket-name>/<data_capture_s3_key>'

# Specify either Input, Output, or both
capture_modes = [ "Input",  "Output" ] 
#capture_mode = [ "Input"] # Example - If you want to capture input only
                            
endpoint_config_response = sagemaker_client.create_endpoint_config(
    EndpointConfigName=endpoint_config_name, 
    # List of ProductionVariant objects, one for each model that you want to host at this endpoint.
    ProductionVariants=[
        {
            "VariantName": variant_name, 
            "ModelName": model_name, 
            "InstanceType": instance_type, # Specify the compute instance type.
            "InitialInstanceCount": initial_instance_count # Number of instances to launch initially.
        }
    ],
    DataCaptureConfig= {
        'EnableCapture': True, # Whether data should be captured or not.
        'InitialSamplingPercentage' : initial_sampling_percentage,
        'DestinationS3Uri': s3_capture_upload_path,
        'CaptureOptions': [{"CaptureMode" : capture_mode} for capture_mode in capture_modes] # Example - Use list comprehension to capture both Input and Output
    }
)
```

Pour plus d'informations sur les autres options de configuration des terminaux, consultez l'[CreateEndpointConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html)API dans le [guide de référence de l'API Amazon SageMaker AI Service](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Operations_Amazon_SageMaker_Service.html).

------
#### [ SageMaker Python SDK ]

Importez la classe `DataCaptureConfig` du module [sagemaker.model\$1monitor](https://sagemaker.readthedocs.io/en/stable/api/inference/model_monitor.html). Activez la capture de données en définissant `EnableCapture` sur la valeur booléenne `True`.

Vous pouvez également fournir des arguments pour les paramètres suivants :
+ `SamplingPercentage` : une valeur entière qui correspond au pourcentage de données à échantillonner. Si vous ne fournissez pas de pourcentage d'échantillonnage, SageMaker AI échantillonnera par défaut 20 (20 %) de vos données.
+ `DestinationS3Uri`: l'URI Amazon S3 sera utilisée par l' SageMaker IA pour stocker les données capturées. Si vous n'en fournissez pas, l' SageMaker IA y stockera les données capturées`"s3://<default-session-bucket>/ model-monitor/data-capture"`.

```
from sagemaker.model_monitor import DataCaptureConfig

# Set to True to enable data capture
enable_capture = True

# Optional - Sampling percentage. Choose an integer value between 0 and 100
sampling_percentage = <int> 
# sampling_percentage = 30 # Example 30%

# Optional - The S3 URI of stored captured-data location
s3_capture_upload_path = 's3://<bucket-name>/<data_capture_s3_key>'

# Specify either Input, Output or both. 
capture_modes = ['REQUEST','RESPONSE'] # In this example, we specify both
# capture_mode = ['REQUEST'] # Example - If you want to only capture input.

# Configuration object passed in when deploying Models to SM endpoints
data_capture_config = DataCaptureConfig(
    enable_capture = enable_capture, 
    sampling_percentage = sampling_percentage, # Optional
    destination_s3_uri = s3_capture_upload_path, # Optional
    capture_options = ["REQUEST", "RESPONSE"],
)
```

------

## Déployer votre modèle
<a name="model-monitor-data-capture-deploy"></a>

Déployez votre modèle et créez un point de terminaison HTTPS avec `DataCapture` activée.

------
#### [ AWS SDK pour Python (Boto3) ]

Fournissez la configuration du point de terminaison à SageMaker AI. Le service lance les instances de calcul ML et déploie le ou les modèles tel que spécifié dans la configuration.

Une fois que vous avez votre configuration de modèle et de point de terminaison, utilisez l’API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html) pour créer votre point de terminaison. Le nom du point de terminaison doit être unique dans une AWS région de votre AWS compte. 

L’exemple suivant crée un point de terminaison à l’aide de la configuration de point de terminaison spécifiée dans la requête. Amazon SageMaker AI utilise le point de terminaison pour provisionner des ressources et déployer des modèles.

```
# The name of the endpoint. The name must be unique within an AWS Region in your AWS account.
endpoint_name = '<endpoint-name>' 

# The name of the endpoint configuration associated with this endpoint.
endpoint_config_name='<endpoint-config-name>'

create_endpoint_response = sagemaker_client.create_endpoint(
                                            EndpointName=endpoint_name, 
                                            EndpointConfigName=endpoint_config_name)
```

Pour en savoir plus, consultez l’API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html).

------
#### [ SageMaker Python SDK ]

Définissez un nom pour votre point de terminaison. Cette étape est facultative. Si vous n'en fournissez pas, SageMaker AI créera un nom unique pour vous :

```
from datetime import datetime

endpoint_name = f"DEMO-{datetime.utcnow():%Y-%m-%d-%H%M}"
print("EndpointName =", endpoint_name)
```

Déployez votre modèle sur un point de terminaison HTTPS en temps réel avec la méthode `deploy()` intégrée de l’objet modèle. Indiquez le nom du type d’instance Amazon EC2 sur lequel déployer ce modèle dans le champ `instance_type` ainsi que le nombre initial d’instances sur lesquelles exécuter le point de terminaison dans le champ `initial_instance_count` :

```
initial_instance_count=<integer>
# initial_instance_count=1 # Example

instance_type='<instance-type>'
# instance_type='ml.m4.xlarge' # Example

# Uncomment if you did not define this variable in the previous step
#data_capture_config = <name-of-data-capture-configuration>

model.deploy(
    initial_instance_count=initial_instance_count,
    instance_type=instance_type,
    endpoint_name=endpoint_name,
    data_capture_config=data_capture_config
)
```

------

## Affichage des données capturées
<a name="model-monitor-data-capture-view"></a>

Créez un objet prédicteur à partir de la classe [prédictive](https://sagemaker.readthedocs.io/en/stable/api/inference/predictors.html) du SDK SageMaker Python. Vous utiliserez l'objet renvoyé par la classe `Predictor` pour appeler votre point de terminaison dans une étape ultérieure. Fournissez le nom de votre point de terminaison (défini précédemment comme `endpoint_name`), ainsi que les objets serializer et deserializer pour le sérialiseur et le désérialiseur, respectivement. [Pour plus d'informations sur les types de sérialiseurs, consultez la classe [Serializers](https://sagemaker.readthedocs.io/en/stable/api/inference/serializers.html) dans le SDK AI SageMaker Python.](https://sagemaker.readthedocs.io/en/stable/index.html)

```
from sagemaker.predictor import Predictor
from sagemaker.serializers import <Serializer>
from sagemaker.deserializers import <Deserializers>

predictor = Predictor(endpoint_name=endpoint_name,
                      serializer = <Serializer_Class>,
                      deserializer = <Deserializer_Class>)

# Example
#from sagemaker.predictor import Predictor
#from sagemaker.serializers import CSVSerializer
#from sagemaker.deserializers import JSONDeserializer

#predictor = Predictor(endpoint_name=endpoint_name,
#                      serializer=CSVSerializer(),
#                      deserializer=JSONDeserializer())
```

Dans l’exemple de code de traitement, nous invoquons le point de terminaison avec un échantillon de données de validation que nous avons stocké localement dans un fichier CSV nommé `validation_with_predictions`. Notre échantillon de jeu de validation contient des étiquettes pour chaque entrée.

Les premières lignes de l'instruction with ouvrent d'abord le fichier CSV du jeu de validation, puis séparent chaque ligne du fichier par le caractère virgule `","`, et enfin stockent les deux objets renvoyés dans les variables label et input\$1cols. Pour chaque ligne, l'entrée (`input_cols`) est transmise à la méthode intégrée des objets `Predictor.predict()` de la variable predictor (`predictor`).

Supposons que le modèle renvoie une probabilité. Les probabilités sont comprises entre les valeurs entières de 0 et 1,0. Si la probabilité renvoyée par le modèle est supérieure à 80 % (0,8), nous attribuons à la prédiction une étiquette de valeur entière de 1. Sinon, nous attribuons à la prédiction une étiquette de valeur entière de 0.

```
from time import sleep

validate_dataset = "validation_with_predictions.csv"

# Cut off threshold of 80%
cutoff = 0.8

limit = 200  # Need at least 200 samples to compute standard deviations
i = 0
with open(f"test_data/{validate_dataset}", "w") as validation_file:
    validation_file.write("probability,prediction,label\n")  # CSV header
    with open("test_data/validation.csv", "r") as f:
        for row in f:
            (label, input_cols) = row.split(",", 1)
            probability = float(predictor.predict(input_cols))
            prediction = "1" if probability > cutoff else "0"
            baseline_file.write(f"{probability},{prediction},{label}\n")
            i += 1
            if i > limit:
                break
            print(".", end="", flush=True)
            sleep(0.5)
print()
print("Done!")
```

Comme vous avez activé la capture des données aux étapes précédentes, la charge utile des requêtes et réponses et certaines métadonnées supplémentaires sont enregistrées à l'emplacement Amazon S3 que vous avez spécifié dans `DataCaptureConfig`. La livraison des données de capture à Amazon S3 peut prendre quelques minutes.

Affichez les données capturées en répertoriant les fichiers de capture de données stockés dans Amazon S3. Le format du chemin d'accès Amazon S3 est : `s3:///{endpoint-name}/{variant-name}/yyyy/mm/dd/hh/filename.jsonl`.

Il peut y avoir différents fichiers de différentes périodes, organisés en fonction de l’heure de l’invocation. Exécutez la commande suivante pour afficher le contenu d’un seul fichier de capture :

```
print("\n".join(capture_file[-3:-1]))
```

Cela renverra un fichier au format JSON-line spécifique à l' SageMaker IA. Voici un exemple de réponse provenant d’un point de terminaison en temps réel que nous avons appelé en utilisant des données `csv/text` :

```
{"captureData":{"endpointInput":{"observedContentType":"text/csv","mode":"INPUT",
"data":"69,0,153.7,109,194.0,105,256.1,114,14.1,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0\n",
"encoding":"CSV"},"endpointOutput":{"observedContentType":"text/csv; charset=utf-8","mode":"OUTPUT","data":"0.0254181120544672","encoding":"CSV"}},
"eventMetadata":{"eventId":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee","inferenceTime":"2022-02-14T17:25:49Z"},"eventVersion":"0"}
{"captureData":{"endpointInput":{"observedContentType":"text/csv","mode":"INPUT",
"data":"94,23,197.1,125,214.5,136,282.2,103,9.5,5,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1\n",
"encoding":"CSV"},"endpointOutput":{"observedContentType":"text/csv; charset=utf-8","mode":"OUTPUT","data":"0.07675473392009735","encoding":"CSV"}},
"eventMetadata":{"eventId":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee","inferenceTime":"2022-02-14T17:25:49Z"},"eventVersion":"0"}
```

Dans l'exemple de traitement, l'objet `capture_file` est un type de liste. Indexez le premier élément de la liste pour afficher une seule requête d'inférence.

```
# The capture_file object is a list. Index the first element to view a single inference request  
print(json.dumps(json.loads(capture_file[0]), indent=2))
```

Cela renvoie une réponse semblable à ce qui suit. Les valeurs renvoyées varieront en fonction de la configuration de votre point de terminaison, de votre modèle d' SageMaker IA et des données capturées :

```
{
  "captureData": {
    "endpointInput": {
      "observedContentType": "text/csv", # data MIME type
      "mode": "INPUT",
      "data": "50,0,188.9,94,203.9,104,151.8,124,11.6,8,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,1,0\n",
      "encoding": "CSV"
    },
    "endpointOutput": {
      "observedContentType": "text/csv; charset=character-encoding",
      "mode": "OUTPUT",
      "data": "0.023190177977085114",
      "encoding": "CSV"
    }
  },
  "eventMetadata": {
    "eventId": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
    "inferenceTime": "2022-02-14T17:25:06Z"
  },
  "eventVersion": "0"
}
```

# Capture des données à partir d’une tâche de transformation par lots
<a name="model-monitor-data-capture-batch"></a>

 Les étapes requises pour activer la capture de données pour votre tâche de transformation par lots sont similaires, que vous utilisiez le SDK Python AWS SDK pour Python (Boto) ou le SDK SageMaker Python. Si vous utilisez le AWS SDK, définissez le [DataCaptureConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataCaptureConfig.html)dictionnaire, ainsi que les champs obligatoires, dans la `CreateTransformJob` méthode pour activer la capture de données. Si vous utilisez le SDK SageMaker AI Python, importez la `BatchDataCaptureConfig` classe et initialisez une instance à partir de cette classe. Transmettez ensuite cet objet au paramètre `batch_data_capture_config` de votre instance de tâche de transformation. 

 Pour utiliser les extraits de code suivants, remplacez ceux de l'exemple *italicized placeholder text* de code par vos propres informations. 

## Comment activer la capture des données
<a name="data-capture-batch-enable"></a>

 Spécifiez une configuration de capture de données lorsque vous lancez une tâche de transformation. Que vous utilisiez le SDK AWS SDK pour Python (Boto3) ou le SDK SageMaker Python, vous devez fournir l'`DestinationS3Uri`argument, qui est le répertoire dans lequel vous souhaitez que la tâche de transformation enregistre les données capturées. (Facultatif) Vous pouvez également préciser les paramètres suivants : 
+  `KmsKeyId`: AWS KMS clé utilisée pour chiffrer les données capturées. 
+  `GenerateInferenceId` : un indicateur booléen qui, lors de la capture des données, indique si vous souhaitez que la tâche de transformation ajoute l'ID d'inférence et l'heure à votre sortie. Cela est utile pour la surveillance de la qualité des modèles, lorsque vous devez ingérer les données Ground Truth. L'ID d'inférence et l'heure permettent de faire correspondre les données capturées à vos données Ground Truth. 

------
#### [ AWS SDK pour Python (Boto3) ]

 Configurez les données que vous souhaitez capturer avec le [DataCaptureConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataCaptureConfig.html)dictionnaire lorsque vous créez une tâche de transformation à l'aide de `CreateTransformJob` cette méthode. 

```
input_data_s3_uri = "s3://input_S3_uri"
output_data_s3_uri = "s3://output_S3_uri"
data_capture_destination = "s3://captured_data_S3_uri"

model_name = "model_name"

sm_client.create_transform_job(
    TransformJobName="transform_job_name",
    MaxConcurrentTransforms=2,
    ModelName=model_name,
    TransformInput={
        "DataSource": {
            "S3DataSource": {
                "S3DataType": "S3Prefix",
                "S3Uri": input_data_s3_uri,
            }
        },
        "ContentType": "text/csv",
        "CompressionType": "None",
        "SplitType": "Line",
    },
    TransformOutput={
        "S3OutputPath": output_data_s3_uri,
        "Accept": "text/csv",
        "AssembleWith": "Line",
    },
    TransformResources={
        "InstanceType": "ml.m4.xlarge",
        "InstanceCount": 1,
    },
    DataCaptureConfig={
       "DestinationS3Uri": data_capture_destination,
       "KmsKeyId": "kms_key",
       "GenerateInferenceId": True,
    }
    )
```

------
#### [ SageMaker Python SDK ]

 Importez la classe `BatchDataCaptureConfig` du module [sagemaker.model\$1monitor](https://sagemaker.readthedocs.io/en/stable/api/inference/model_monitor.html). 

```
from sagemaker.transformer import Transformer
from sagemaker.inputs import BatchDataCaptureConfig

# Optional - The S3 URI of where to store captured data in S3
data_capture_destination = "s3://captured_data_S3_uri"

model_name = "model_name"

transformer = Transformer(model_name=model_name, ...)
transform_arg = transformer.transform(
    batch_data_capture_config=BatchDataCaptureConfig(
        destination_s3_uri=data_capture_destination,
        kms_key_id="kms_key",
        generate_inference_id=True,
    ),
    ...
)
```

------

## Comment afficher les données capturées
<a name="data-capture-batch-view"></a>

 Une fois la tâche de transformation terminée, les données capturées sont journalisées sous `DestinationS3Uri` que vous avez fournie avec la configuration de capture de données. Il existe deux sous-répertoires sous `DestinationS3Uri`, `/input` et `/output`. Si `DestinationS3Uri` est `s3://my-data-capture`, la tâche de transformation crée les répertoires suivants : 
+  `s3://my-data-capture/input` : les données d'entrée capturées pour la tâche de transformation. 
+  `s3://my-data-capture/output` : les données de sortie capturées pour la tâche de transformation. 

 Pour éviter la duplication des données, les données capturées dans les deux répertoires précédents sont des manifestes. Chaque manifeste est un fichier JSONL qui contient les emplacements Amazon S3 des objets sources. Un fichier manifeste peut ressembler à l'exemple suivant : 

```
# under "/input" directory
[
    {"prefix":"s3://input_S3_uri/"},
    "dummy_0.csv",
    "dummy_1.csv",
    "dummy_2.csv",
    ...
]

# under "/output" directory
[
    {"prefix":"s3://output_S3_uri/"},
    "dummy_0.csv.out",
    "dummy_1.csv.out",
    "dummy_2.csv.out",
    ...
]
```

 La tâche de transformation organise et étiquette ces manifestes avec un préfixe *yyyy/mm/dd/hh* S3 pour indiquer quand ils ont été capturés. Cela permet à Model Monitor de déterminer la partie appropriée des données à analyser. Par exemple, si vous commencez votre tâche de transformation le 26 août 2022 à 13 h UTC, les données capturées sont étiquetées avec une chaîne de préfixe `2022/08/26/13/`. 

## InferenceId Génération
<a name="data-capture-batch-inferenceid"></a>

 Lorsque vous configurez `DataCaptureConfig` pour une tâche de transformation, vous pouvez activer l'indicateur booléen `GenerateInferenceId`. Cela est particulièrement utile lorsque vous devez exécuter des tâches de surveillance de la qualité et du biais des modèles, pour lesquelles vous avez besoin de données Ground Truth ingérées par les utilisateurs. Model Monitor s'appuie sur un ID d'inférence pour faire correspondre les données capturées et les données de Ground Truth. Pour plus de détails sur l'ingestion de Ground Truth, consultez [Ingestion et fusion des étiquettes Ground Truth avec des prédictions](model-monitor-model-quality-merge.md). Lorsque `GenerateInferenceId` est activé, la sortie de transformation ajoute un ID d'inférence (un UUID aléatoire) ainsi que l'heure de début de la tâche de transformation en UTC pour chaque enregistrement. Vous avez besoin de ces deux valeurs pour contrôler la qualité des modèles et le biais des modèles. Lorsque vous créez les données Ground Truth, vous devez fournir le même identifiant d'inférence pour correspondre aux données de sortie. Actuellement, cette fonction prend en charge les sorties de transformation aux formats CSV, JSON et JSONL. 

 Si la sortie de votre transformation est au format CSV, le fichier de sortie ressemble à l'exemple suivant : 

```
0, 1f1d57b1-2e6f-488c-8c30-db4e6d757861,2022-08-30T00:49:15Z
1, 22445434-0c67-45e9-bb4d-bd1bf26561e6,2022-08-30T00:49:15Z
...
```

 Les deux dernières colonnes contiennent l'ID d'inférence et l'heure de début de la tâche de transformation. Ne les modifiez pas. Les colonnes restantes sont les sorties de vos tâches de transformation. 

 Si la sortie de votre transformation est au format JSON ou JSONL, le fichier de sortie ressemble à l'exemple suivant : 

```
{"output": 0, "SageMakerInferenceId": "1f1d57b1-2e6f-488c-8c30-db4e6d757861", "SageMakerInferenceTime": "2022-08-30T00:49:15Z"}
{"output": 1, "SageMakerInferenceId": "22445434-0c67-45e9-bb4d-bd1bf26561e6", "SageMakerInferenceTime": "2022-08-30T00:49:15Z"}
...
```

 Deux champs ajoutés sont réservés, `SageMakerInferenceId` et `SageMakerInferenceTime`. Ne modifiez pas ces champs si vous devez contrôler la qualité des modèles ou le biais des modèles. Vous en avez besoin pour les tâches de fusion. 