Déployez une logique de prétraitement dans un modèle de machine learning sur un seul point de terminaison à l'aide d'un pipeline d'inférence sur Amazon SageMaker - Recommandations AWS

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.

Déployez une logique de prétraitement dans un modèle de machine learning sur un seul point de terminaison à l'aide d'un pipeline d'inférence sur Amazon SageMaker

Créée par Mohan Gowda Purushothama (AWS), Gabriel Rodriguez Garcia (AWS) et Mateusz Zaremba (AWS)

Environnement : Production

Technologies : apprentissage automatique et intelligence artificielle ; conteneurs et microservices

Services AWS : Amazon SageMaker ; Amazon ECR

Récapitulatif

Ce modèle explique comment déployer plusieurs objets de modèle de pipeline sur un seul point de terminaison à l'aide d'un pipeline d'inférence dans Amazon SageMaker. L'objet du modèle de pipeline représente les différentes étapes du flux de travail d'apprentissage automatique (ML), telles que le prétraitement, l'inférence du modèle et le post-traitement. Pour illustrer le déploiement d'objets de modèle de pipeline connectés en série, ce modèle vous montre comment déployer un conteneur Scikit-learn de prétraitement et un modèle de régression basé sur l'algorithme d'apprentissage linéaire intégré. SageMaker Le déploiement est hébergé derrière un seul point de terminaison dans SageMaker.

Remarque : Le déploiement dans ce modèle utilise le type d'instance ml.m4.2xlarge. Nous vous recommandons d'utiliser un type d'instance adapté à vos exigences en matière de taille de données et à la complexité de votre flux de travail. Pour plus d'informations, consultez Amazon SageMaker Pricing. Ce modèle utilise des images Docker prédéfinies pour Scikit-learn, mais vous pouvez utiliser vos propres conteneurs Docker et les intégrer dans votre flux de travail.

Conditions préalables et limitations

Prérequis

Versions du produit

Architecture

Pile technologique cible

  • Amazon Elastic Container Registry (Amazon ECR)

  • Amazon SageMaker

  • Amazon SageMaker Studio

  • Amazon Simple Storage Service (Amazon S3)

  • Point de terminaison d'inférence en temps réel pour Amazon SageMaker

Architecture cible

Le schéma suivant montre l'architecture pour le déploiement d'un objet de modèle de SageMaker pipeline Amazon.

Architecture pour le déploiement d'un objet modèle de SageMaker pipeline

Le schéma suivant illustre le flux de travail suivant :

  1. Un SageMaker bloc-notes déploie un modèle de pipeline.

  2. Un compartiment S3 stocke les artefacts du modèle.

  3. Amazon ECR obtient les images du conteneur source à partir du compartiment S3.

Outils

Outils AWS

  • Amazon Elastic Container Registry (Amazon ECR) est un service géré de registre d'images de conteneurs sécurisé, évolutif et fiable.

  • Amazon SageMaker est un service de machine learning géré qui vous aide à créer et à former des modèles de machine learning, puis à les déployer dans un environnement hébergé prêt pour la production.

  • Amazon SageMaker Studio est un environnement de développement intégré (IDE) basé sur le Web pour le ML qui vous permet de créer, de former, de déboguer, de déployer et de surveiller vos modèles de ML.

  • Amazon Simple Storage Service (Amazon S3) est un service de stockage d'objets basé sur le cloud qui vous permet de stocker, de protéger et de récupérer n'importe quel volume de données.

Code

Le code de ce modèle est disponible dans le référentiel GitHub Inference Pipeline with Scikit-learn et Linear Learner.

Épopées

TâcheDescriptionCompétences requises

Préparez le jeu de données pour votre tâche de régression.

Ouvrez un bloc-notes dans Amazon SageMaker Studio.

Pour importer toutes les bibliothèques nécessaires et initialiser votre environnement de travail, utilisez l'exemple de code suivant dans votre bloc-notes :

import sagemaker from sagemaker import get_execution_role sagemaker_session = sagemaker.Session() # Get a SageMaker-compatible role used by this Notebook Instance. role = get_execution_role() # S3 prefix bucket = sagemaker_session.default_bucket() prefix = "Scikit-LinearLearner-pipeline-abalone-example"

Pour télécharger un exemple de jeu de données, ajoutez le code suivant à votre bloc-notes :

! mkdir abalone_data ! aws s3 cp s3://sagemaker-sample-files/datasets/tabular/uci_abalone/abalone.csv ./abalone_data

Remarque : L'exemple de ce modèle utilise l'ensemble de données Abalone du référentiel UCI Machine Learning.

Spécialiste des données

Téléchargez l'ensemble de données dans un compartiment S3.

Dans le bloc-notes dans lequel vous avez préparé votre ensemble de données plus tôt, ajoutez le code suivant pour télécharger vos exemples de données dans un compartiment S3 :

WORK_DIRECTORY = "abalone_data" train_input = sagemaker_session.upload_data( path="{}/{}".format(WORK_DIRECTORY, "abalone.csv"), bucket=bucket, key_prefix="{}/{}".format(prefix, "train"), )
Spécialiste des données
TâcheDescriptionCompétences requises

Préparez le script preprocessor.py.

  1. Copiez la logique de prétraitement à partir du fichier Python dans le référentiel GitHub sklearn_abalone_featurizer.py, puis collez le code dans un fichier Python distinct appelésklearn_abalone_featurizer.py. Vous pouvez modifier le code pour l'adapter à votre ensemble de données personnalisé et à votre flux de travail personnalisé.

  2. Enregistrez le sklearn_abalone_featurizer.py fichier dans le répertoire racine de votre projet (c'est-à-dire au même endroit où vous exécutez votre SageMaker bloc-notes).

Spécialiste des données

Créez l'objet préprocesseur SKLearn.

Pour créer un objet préprocesseur SKLearn (appelé SkLearn Estimator) que vous pouvez intégrer dans votre pipeline d'inférence final, exécutez le code suivant dans votre bloc-notes : SageMaker

from sagemaker.sklearn.estimator import SKLearn FRAMEWORK_VERSION = "0.23-1" script_path = "sklearn_abalone_featurizer.py" sklearn_preprocessor = SKLearn( entry_point=script_path, role=role, framework_version=FRAMEWORK_VERSION, instance_type="ml.c4.xlarge", sagemaker_session=sagemaker_session, ) sklearn_preprocessor.fit({"train": train_input})
Spécialiste des données

Testez l'inférence du préprocesseur.

Pour vérifier que votre préprocesseur est correctement défini, lancez une tâche de transformation par lots en saisissant le code suivant dans votre SageMaker bloc-notes :

# Define a SKLearn Transformer from the trained SKLearn Estimator transformer = sklearn_preprocessor.transformer( instance_count=1, instance_type="ml.m5.xlarge", assemble_with="Line", accept="text/csv" ) # Preprocess training input transformer.transform(train_input, content_type="text/csv") print("Waiting for transform job: " + transformer.latest_transform_job.job_name) transformer.wait() preprocessed_train = transformer.output_path
TâcheDescriptionCompétences requises

Créez un objet modèle.

Pour créer un objet modèle basé sur l'algorithme d'apprentissage linéaire, entrez le code suivant dans votre SageMaker bloc-notes :

import boto3 from sagemaker.image_uris import retrieve ll_image = retrieve("linear-learner", boto3.Session().region_name) s3_ll_output_key_prefix = "ll_training_output" s3_ll_output_location = "s3://{}/{}/{}/{}".format( bucket, prefix, s3_ll_output_key_prefix, "ll_model" ) ll_estimator = sagemaker.estimator.Estimator( ll_image, role, instance_count=1, instance_type="ml.m4.2xlarge", volume_size=20, max_run=3600, input_mode="File", output_path=s3_ll_output_location, sagemaker_session=sagemaker_session, ) ll_estimator.set_hyperparameters(feature_dim=10, predictor_type="regressor", mini_batch_size=32) ll_train_data = sagemaker.inputs.TrainingInput( preprocessed_train, distribution="FullyReplicated", content_type="text/csv", s3_data_type="S3Prefix", ) data_channels = {"train": ll_train_data} ll_estimator.fit(inputs=data_channels, logs=True)

Le code précédent extrait l'image Amazon ECR Docker appropriée du registre Amazon ECR public pour le modèle, crée un objet estimateur, puis utilise cet objet pour entraîner le modèle de régression.

Spécialiste des données
TâcheDescriptionCompétences requises

Déployez le modèle de pipeline.

Pour créer un objet de modèle de pipeline (c'est-à-dire un objet préprocesseur) et déployer l'objet, entrez le code suivant dans votre SageMaker bloc-notes :

from sagemaker.model import Model from sagemaker.pipeline import PipelineModel import boto3 from time import gmtime, strftime timestamp_prefix = strftime("%Y-%m-%d-%H-%M-%S", gmtime()) scikit_learn_inferencee_model = sklearn_preprocessor.create_model() linear_learner_model = ll_estimator.create_model() model_name = "inference-pipeline-" + timestamp_prefix endpoint_name = "inference-pipeline-ep-" + timestamp_prefix sm_model = PipelineModel( name=model_name, role=role, models= [scikit_learn_inferencee_model, linear_learner_model] ) sm_model.deploy(initial_instance_count=1, instance_type="ml.c4.xlarge", endpoint_name=endpoint_name)

Remarque : Vous pouvez ajuster le type d'instance utilisé dans l'objet du modèle en fonction de vos besoins.

Spécialiste des données

Testez l'inférence.

Pour vérifier que le point de terminaison fonctionne correctement, exécutez l'exemple de code d'inférence suivant dans votre SageMaker bloc-notes :

from sagemaker.predictor import Predictor from sagemaker.serializers import CSVSerializer payload = "M, 0.44, 0.365, 0.125, 0.516, 0.2155, 0.114, 0.155" actual_rings = 10 predictor = Predictor( endpoint_name=endpoint_name, sagemaker_session=sagemaker_session, serializer=CSVSerializer() ) print(predictor.predict(payload))
Spécialiste des données

Ressources connexes