View a markdown version of this page

Exécuter Real-time des prédictions à l'aide d'un pipeline d'inférence - Amazon SageMaker AI

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.

Exécuter Real-time des prédictions à l'aide d'un pipeline d'inférence

Vous pouvez utiliser des modèles entraînés dans un pipeline d'inférence pour réaliser des prédictions en temps réel directement, sans effectuer de prétraitement externe. Lorsque vous configurez le pipeline, vous pouvez choisir d'utiliser les transformateurs de fonctionnalités intégrés déjà disponibles dans Amazon SageMaker AI. Vous pouvez également implémenter votre propre logique de transformation en utilisant simplement quelques lignes de code Scikit-learn ou Spark.

MLeap, un format de sérialisation et un moteur d'exécution pour les pipelines d'apprentissage automatique, prend en charge Spark, scikit-learn et permet de former les pipelines et TensorFlow de les exporter vers un pipeline sérialisé appelé MLeap Bundle. Vous pouvez désérialiser les bundles dans Spark pour une évaluation en mode de traitement par lots ou dans l'exécution MLeap afin d'alimenter les services d'API en temps réel.

Les conteneurs figurant dans un pipeline sont à l'écoute sur le port spécifié dans la variable d'environnement SAGEMAKER_BIND_TO_PORT (au lieu de 8080). Lors de l'exécution dans un pipeline d'inférence, SageMaker l'IA fournit automatiquement cette variable d'environnement aux conteneurs. Si cette variable d’environnement n’est pas présente, les conteneurs utilisent par défaut le port 8080. Pour indiquer que votre conteneur répond à cette exigence, utilisez la commande suivante pour ajouter une étiquette à votre fichier Dockerfile :

LABEL com.amazonaws.sagemaker.capabilities.accept-bind-to-port=true

Si votre conteneur doit être à l’écoute sur un second port, choisissez un port dans la plage spécifiée par la variable d’environnement SAGEMAKER_SAFE_PORT_RANGE. Spécifiez la valeur sous la forme d'une plage inclusive au format"XXXX-YYYY", où XXXX et YYYY sont des entiers à plusieurs chiffres. SageMaker L'IA fournit cette valeur automatiquement lorsque vous exécutez le conteneur dans un pipeline multiconteneur.

Note

Pour utiliser des images Docker personnalisées dans un pipeline qui inclut des algorithmes intégrés à l'SageMaker IA, vous avez besoin d'une politique https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html Amazon Elastic Container Registry (Amazon ECR). Votre référentiel Amazon ECR doit autoriser l' SageMaker IA à extraire l'image. Pour de plus amples informations, veuillez consulter Résolution des problèmes d'autorisations Amazon ECR pour les pipelines d'inférence.

Création et déploiement d'un point de terminaison de pipeline d'inférence

Le code suivant crée et déploie un modèle de pipeline d'inférence en temps réel avec les modèles SparkML et XGBoost en série à l'aide du SDK AI. SageMaker

from sagemaker.serve import ModelBuilder sparkml_data = 's3://{}/{}/{}'.format(s3_model_bucket, s3_model_key_prefix, 'model.tar.gz') model_name = 'serial-inference-' + timestamp_prefix endpoint_name = 'serial-inference-ep-' + timestamp_prefix model_builder = ModelBuilder( s3_model_data_url=sparkml_data, role_arn=role, instance_type='ml.c4.xlarge', pipeline_models=[sparkml_data, xgb_model.s3_model_data_url], ) endpoint = model_builder.build().deploy( initial_instance_count=1, instance_type='ml.c4.xlarge', endpoint_name=endpoint_name )

Demander une Real-Time inférence à partir d'un point de terminaison du pipeline d'inférence

L'exemple suivant montre comment réaliser des prédictions en temps réel en appelant un point de terminaison d'inférence et en transmettant une charge utile de demande au format JSON :

import json from sagemaker.core.resources import Endpoint payload = { "input": [ { "name": "Pclass", "type": "float", "val": "1.0" }, { "name": "Embarked", "type": "string", "val": "Q" }, { "name": "Age", "type": "double", "val": "48.0" }, { "name": "Fare", "type": "double", "val": "100.67" }, { "name": "SibSp", "type": "double", "val": "1.0" }, { "name": "Sex", "type": "string", "val": "male" } ], "output": { "name": "features", "type": "double", "struct": "vector" } } endpoint = Endpoint(endpoint_name=endpoint_name) response = endpoint.invoke(body=json.dumps(payload), content_type='application/json', accept='application/json') print(response)

La réponse que vous obtenez est le résultat d'inférence du modèle.

Exemple de pipeline d'inférence en temps réel

Vous pouvez exécuter cet exemple de bloc-notes à l'aide du prédicteur SKLearn qui montre comment déployer un point de terminaison, exécuter une demande d'inférence, puis désérialiser la réponse. Retrouvez ce bloc-notes et d'autres exemples dans le GitHub référentiel d' SageMaker exemples Amazon.