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

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 fonctions intégrés déjà disponibles dans 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 de machine learning, prend en charge Spark, Scikit-learn et TensorFlow pour entraîner des pipelines et les exporter vers un pipeline sérialisé appelé bundle MLeap. 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). Lorsque vous exécutez un pipeline d'inférence, SageMaker 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 en tant qu'une 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 multi-conteneurs.

Note

Lorsque vous utilisez des images Docker personnalisées dans un pipeline incluant des algorithmes SageMaker intégrés, vous devez disposer d'une politique Amazon Elastic Container Registry (Amazon ECR). Votre référentiel Amazon ECR doit accorder à SageMaker l'autorisation d'extraire l'image. Pour plus d'informations, consultez 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 kit SDK SageMaker.

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 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 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 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 leRéférentiel GitHub d'exemples Amazon SageMaker.