Réalisation de prédictions en temps réel avec un pipeline d'inférence - Amazon SageMaker

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.

Réalisation de prédictions en temps réel avec 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 sur Amazon SageMaker. 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, ainsi que TensorFlow pour les pipelines de formation et leur exportation vers un pipeline sérialisé appelé Bundle. MLeap Vous pouvez désérialiser les bundles dans Spark pour obtenir un score en mode batch ou dans l'MLeapenvironnement d'exécution pour alimenter les services en temps réel. API

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, fournit SageMaker 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 forme de plage inclusive au format"XXXX-YYYY", où XXXX et YYYY sont des entiers à plusieurs chiffres. SageMaker 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 SageMaker intégrés, vous avez besoin d'une politique Amazon Elastic Container Registry (AmazonECR). Votre ECR référentiel Amazon doit SageMaker autoriser l'extraction de l'image. Pour de plus amples informations, veuillez consulter Résoudre les problèmes liés aux ECR autorisations Amazon 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 SparkML et XGBoost des modèles en série utilisant le. SageMaker SDK

from sagemaker.model import Model from sagemaker.pipeline_model import PipelineModel from sagemaker.sparkml.model import SparkMLModel sparkml_data = 's3://{}/{}/{}'.format(s3_model_bucket, s3_model_key_prefix, 'model.tar.gz') sparkml_model = SparkMLModel(model_data=sparkml_data) xgb_model = Model(model_data=xgb_model.model_data, image=training_image) model_name = 'serial-inference-' + timestamp_prefix endpoint_name = 'serial-inference-ep-' + timestamp_prefix sm_model = PipelineModel(name=model_name, role=role, models=[sparkml_model, xgb_model]) sm_model.deploy(initial_instance_count=1, instance_type='ml.c4.xlarge', endpoint_name=endpoint_name)

Demande d'inférence en temps réel à partir d'un point de terminaison de pipeline d'inférence

L'exemple suivant montre comment effectuer 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 JSON format :

import sagemaker from sagemaker.predictor import json_serializer, json_deserializer, Predictor 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" } } predictor = Predictor(endpoint=endpoint_name, sagemaker_session=sagemaker.Session(), serializer=json_serializer, content_type='text/csv', accept='application/json' print(predictor.predict(payload))

La réponse que vous obtenez de predictor.predict(payload) 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 SKLearn prédicteur qui indique comment déployer un point de terminaison, exécuter une demande d'inférence, puis désérialiser la réponse. Retrouvez ce carnet et d'autres exemples dans le GitHub référentiel d' SageMaker exemples Amazon.