Étape 5 : déployer le modèle sur Amazon EC2 - Amazon SageMaker

Étape 5 : déployer le modèle sur Amazon EC2

Pour obtenir des prédictions, déployez votre modèle sur Amazon EC2 à l'aide d'Amazon SageMaker.

Déployer le modèle sur les services d'hébergement SageMaker

Pour héberger un modèle via Amazon EC2 à l'aide d'Amazon SageMaker, déployez le modèle que vous avez entraîné dans Créer et exécuter une tâche d'entraînement en appelant la méthode deploy de l'estimateur xgb_model. Lorsque vous appelez la méthode deploy, vous devez spécifier le nombre et le type d'instances de ML EC2 que vous souhaitez utiliser pour héberger un point de terminaison.

import sagemaker from sagemaker.serializers import CSVSerializer xgb_predictor=xgb_model.deploy( initial_instance_count=1, instance_type='ml.t2.medium', serializer=CSVSerializer() )
  • initial_instance_count (int) – Nombre d'instances pour déployer le modèle.

  • instance_type (str) – Type d'instances que vous souhaitez pour utiliser votre modèle déployé.

  • serializer (int) – Sérialisez les données d'entrée de différents formats (un tableau NumPy, une liste, un fichier ou un tampon) en une chaîne au format CSV. Nous l'utilisons parce que l'algorithme XGBoost accepte les fichiers d'entrée au format CSV.

La méthode deploy crée un modèle déployable, configure le point de terminaison des services d'hébergement SageMaker et lance le point de terminaison pour héberger le modèle. Pour de plus amples informations, veuillez consulter Méthode de classe de déploiement de l'estimateur générique de SageMaker dans le kit SDK Amazon SageMaker Python. Pour récupérer le nom du point de terminaison généré par la méthode deploy, exécutez le code suivant :

xgb_predictor.endpoint_name

Cela doit renvoyer le nom du point de terminaison du xgb_predictor. Le format du nom du point de terminaison est "sagemaker-xgboost-YYYY-MM-DD-HH-MM-SS-SSS". Ce point de terminaison reste actif dans l'instance de ML et vous pouvez effectuer des prédictions instantanées à tout moment, sauf si vous l'arrêtez ultérieurement. Copiez ce nom de point de terminaison et enregistrez-le pour le réutiliser et faire des prédictions en temps réel ailleurs dans les instances de bloc-notes SageMaker Studio ou SageMaker.

Astuce

Pour en savoir plus sur la compilation et l'optimisation de votre modèle pour le déploiement vers des instances Amazon EC2 ou des périphériques en périphérie, veuillez consulter Compiler et déployer des modèles avec Neo.

(Facultatif) Utiliser SageMaker Predictor pour réutiliser le point de terminaison hébergé

Après avoir déployé le modèle sur un point de terminaison, vous pouvez configurer un nouveau prédicteur SageMaker en jumelant le point de terminaison et en effectuant des prédictions en temps réel dans n'importe quel autre bloc-notes. L'exemple de code suivant montre comment utiliser la classe SageMaker Predictor pour configurer un nouvel objet de prédicteur à l'aide du même point de terminaison. Réutilisez le nom du point de terminaison que vous avez utilisé pour le xgb_predictor.

import sagemaker xgb_predictor_reuse=sagemaker.predictor.Predictor( endpoint_name="sagemaker-xgboost-YYYY-MM-DD-HH-MM-SS-SSS", sagemaker_session=sagemaker.Session(), serializer=sagemaker.serializers.CSVSerializer() )

Le prédicteur xgb_predictor_reuse se comporte exactement comme le xgb_predictor d'origine. Pour de plus amples informations, veuillez consulter la classe SageMaker Predictor dans le kit SDK Amazon SageMaker Python.

(Facultatif) Faire une prédiction avec la transformation par lots

Au lieu d'héberger un point de terminaison en production, vous pouvez exécuter une tâche d'inférence par lots ponctuelle pour effectuer des prédictions sur un jeu de données de test à l'aide de la transformation par lots SageMaker. Une fois votre entraînement du modèle terminé, vous pouvez étendre l'estimateur à un objet transformer, qui est basé sur la classe SageMaker Transformer. Le transformateur par lots lit les données d'entrée à partir d'un compartiment S3 spécifié et fait des prédictions.

Pour exécuter une tâche de transformation par lots

  1. Exécutez le code suivant pour convertir les colonnes de fonctions du jeu de données de test en fichier CSV et les télécharger dans le compartiment S3 :

    X_test.to_csv('test.csv', index=False, header=False) boto3.Session().resource('s3').Bucket(bucket).Object( os.path.join(prefix, 'test/test.csv')).upload_file('test.csv')
  2. Spécifiez les URI du compartiment S3 d'entrée et de sortie pour la tâche de transformation par lots comme indiqué ci-dessous :

    # The location of the test dataset batch_input = 's3://{}/{}/test'.format(bucket, prefix) # The location to store the results of the batch transform job batch_output = 's3://{}/{}/batch-prediction'.format(bucket, prefix)
  3. Créez un objet de transformateur en spécifiant le nombre minimal de paramètres : les paramètres instance_count et instance_type pour exécuter la tâche de transformation par lots, et output_path pour enregistrer les données de prédiction comme indiqué ci-dessous :

    transformer = xgb_model.transformer( instance_count=1, instance_type='ml.m4.xlarge', output_path=batch_output )
  4. Lancez la tâche de transformation par lots en exécutant la méthode transform() de l'objet transformer comme illustré ci-dessous :

    transformer.transform( data=batch_input, data_type='S3Prefix', content_type='text/csv', split_type='Line' ) transformer.wait()
  5. Lorsque la tâche de transformation par lots est terminée, SageMaker crée les données de prédiction test.csv.out enregistrées dans le chemin d'accès batch_output, qui doivent être au format suivant : s3://sagemaker-<region>-111122223333/demo-sagemaker-xgboost-adult-income-prediction/batch-prediction. Exécutez la AWS CLI suivante pour télécharger les données de sortie de la tâche de transformation par lots :

    ! aws s3 cp {batch_output} ./ --recursive

    Cela doit créer le fichier test.csv.out dans le répertoire de travail actuel. Vous pouvez voir les valeurs flottantes qui sont prédites en fonction de la régression logistique de la tâche d'entraînement XGBoost.