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 à partir du point de terminaison en temps réel
Note
Amazon SageMaker Model Monitor n'est plus ouvert aux nouveaux clients. Les clients existants peuvent continuer à utiliser le service normalement. AWS continue d'investir dans l'amélioration de la sécurité et de la disponibilité de Model Monitor, mais nous ne prévoyons pas d'introduire de nouvelles fonctionnalités. Pour de plus amples informations, veuillez consulter Modification de la disponibilité d'Amazon SageMaker Model Monitor.
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 terminal en temps réel, vous devez déployer un modèle à l'aide de services d'hébergement SageMaker basés sur l'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 dictionnaire, ainsi que les champs obligatoires, dans la CreateEndpointConfig méthode pour activer la capture de données. Si vous utilisez le SDK SageMaker Python, importez la DataCaptureConfig 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
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 AI Python AWS SDK pour Python (Boto) et du SDK SageMaker AI Python.
Note
Vous n’avez pas besoin d’utiliser Model Monitor pour capturer les données utiles des requêtes ou des réponses.
Déployer votre modèle
Déployez votre modèle et créez un point de terminaison HTTPS avec DataCapture activée.
Affichage des données capturées
Créez un Endpoint objet à partir du SDK SageMaker Python. Vous utiliserez l'Endpointobjet pour invoquer votre point de terminaison dans une étape ultérieure. Indiquez le nom de votre terminal (défini précédemment commeendpoint_name).
from sagemaker.core.resources import Endpoint endpoint = Endpoint(endpoint_name=endpoint_name) # Example #from sagemaker.core.resources import Endpoint #endpoint = Endpoint(endpoint_name=endpoint_name)
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_cols. Pour chaque ligne, l'entrée (input_cols) est transmise à la méthode intégrée (endpoint) de la variable de point de terminaisoninvoke().
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(endpoint.invoke(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 JSON-line formaté 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 varient en fonction de la configuration de votre terminal, 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" }