

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
<a name="deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker"></a>

*Mohan Gowda Purushothama, Gabriel Rodriguez Garcia et Mateusz Zaremba, Amazon Web Services*

## Résumé
<a name="deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker-summary"></a>

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](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-pipelines.html) dans Amazon SageMaker. L'objet du modèle de pipeline représente 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](https://docs.aws.amazon.com/sagemaker/latest/dg/sklearn.html) de prétraitement et un modèle de régression basé sur l'algorithme d'apprentissage [linéaire](https://docs.aws.amazon.com/sagemaker/latest/dg/linear-learner.html) intégré. SageMaker Le déploiement est hébergé derrière un seul point de terminaison dans SageMaker.

**Note**  
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](https://aws.amazon.com/sagemaker/pricing/). Ce modèle utilise des [images Docker prédéfinies pour Scikit-learn](https://docs.aws.amazon.com/sagemaker/latest/dg/pre-built-docker-containers-scikit-learn-spark.html), mais vous pouvez utiliser vos propres conteneurs Docker et les intégrer dans votre flux de travail.

## Conditions préalables et limitations
<a name="deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif
+ [Python 3.9](https://www.python.org/downloads/release/python-390/)
+ [SDK Amazon SageMaker Python et bibliothèque](https://sagemaker.readthedocs.io/en/stable/) [Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html)
+ [Rôle](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) [AWS Identity and Access Management (AWS IAM) avec SageMaker [autorisations de base et autorisations](https://docs.aws.amazon.com/sagemaker/latest/dg/api-permissions-reference.html) Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-policy-language-overview.html)

**Versions du produit**
+ [Kit de développement logiciel Amazon SageMaker Python 2.49.2](https://sagemaker.readthedocs.io/en/v2.49.2/)

## Architecture
<a name="deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker-architecture"></a>

**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](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints.html) 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](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/1105d51b-752f-46d7-962c-acef1fb3399f/images/12f06715-b1c2-4de0-b277-99ce87308152.png)


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

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

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

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

## Outils
<a name="deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker-tools"></a>

**Outils AWS**
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) est un service géré de registre d'images de conteneurs sécurisé, évolutif et fiable.
+ [Amazon SageMaker](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html) 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](https://docs.aws.amazon.com/sagemaker/latest/dg/studio.html) 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)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) 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](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-python-sdk/scikit_learn_inference_pipeline/Inference%20Pipeline%20with%20Scikit-learn%20and%20Linear%20Learner.ipynb) Learner.

## Épopées
<a name="deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker-epics"></a>

### Préparer le jeu de données
<a name="prepare-the-dataset"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Préparez le jeu de données pour votre tâche de régression. | [Ouvrez un bloc-notes](https://docs.aws.amazon.com/sagemaker/latest/dg/notebooks-create-open.html#notebooks-open) dans Amazon SageMaker Studio.<br />Pour importer toutes les bibliothèques nécessaires et initialiser votre environnement de travail, utilisez l'exemple de code suivant dans votre bloc-notes :<pre>import sagemaker<br />from sagemaker import get_execution_role<br /><br />sagemaker_session = sagemaker.Session()<br /><br /># Get a SageMaker-compatible role used by this Notebook Instance.<br />role = get_execution_role()<br /><br /># S3 prefix<br />bucket = sagemaker_session.default_bucket()<br />prefix = "Scikit-LinearLearner-pipeline-abalone-example"</pre><br />Pour télécharger un exemple de jeu de données, ajoutez le code suivant à votre bloc-notes :<pre>! mkdir abalone_data<br />! aws s3 cp s3://sagemaker-sample-files/datasets/tabular/uci_abalone/abalone.csv ./abalone_data</pre>****L'exemple de ce modèle utilise l'[ensemble de données Abalone](https://archive.ics.uci.edu/ml/datasets/abalone) du référentiel UCI Machine Learning. | Scientifique 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 :<pre>WORK_DIRECTORY = "abalone_data"<br /><br />train_input = sagemaker_session.upload_data(<br />    path="{}/{}".format(WORK_DIRECTORY, "abalone.csv"),<br />    bucket=bucket,<br />    key_prefix="{}/{}".format(prefix, "train"),<br />)</pre> | Scientifique des données | 

### Créez le préprocesseur de données à l'aide de SKLearn
<a name="create-the-data-preprocessor-using-sklearn"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Préparez le script preprocessor.py. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker.html) | Scientifique des données | 
| Créez l'objet SKLearn préprocesseur. | Pour créer un objet SKLearn préprocesseur (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 <pre>from sagemaker.sklearn.estimator import SKLearn<br /><br />FRAMEWORK_VERSION = "0.23-1"<br />script_path = "sklearn_abalone_featurizer.py"<br /><br />sklearn_preprocessor = SKLearn(<br />    entry_point=script_path,<br />    role=role,<br />    framework_version=FRAMEWORK_VERSION,<br />    instance_type="ml.c4.xlarge",<br />    sagemaker_session=sagemaker_session,<br />)<br />sklearn_preprocessor.fit({"train": train_input})</pre> | Scientifique 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](https://docs.aws.amazon.com/sagemaker/latest/dg/batch-transform.html) en saisissant le code suivant dans votre SageMaker bloc-notes :<pre># Define a SKLearn Transformer from the trained SKLearn Estimator<br />transformer = sklearn_preprocessor.transformer(<br />    instance_count=1, instance_type="ml.m5.xlarge", assemble_with="Line", accept="text/csv"<br />)<br /><br /><br /># Preprocess training input<br />transformer.transform(train_input, content_type="text/csv")<br />print("Waiting for transform job: " + transformer.latest_transform_job.job_name)<br />transformer.wait()<br />preprocessed_train = transformer.output_path</pre> |  | 

### Création d'un modèle d'apprentissage automatique
<a name="create-a-machine-learning-model"></a>


| Sous-tâche | Description | Compé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 :<pre>import boto3<br />from sagemaker.image_uris import retrieve<br /><br />ll_image = retrieve("linear-learner", boto3.Session().region_name)<br />s3_ll_output_key_prefix = "ll_training_output"<br />s3_ll_output_location = "s3://{}/{}/{}/{}".format(<br />    bucket, prefix, s3_ll_output_key_prefix, "ll_model"<br />)<br /><br />ll_estimator = sagemaker.estimator.Estimator(<br />    ll_image,<br />    role,<br />    instance_count=1,<br />    instance_type="ml.m4.2xlarge",<br />    volume_size=20,<br />    max_run=3600,<br />    input_mode="File",<br />    output_path=s3_ll_output_location,<br />    sagemaker_session=sagemaker_session,<br />)<br /><br />ll_estimator.set_hyperparameters(feature_dim=10, predictor_type="regressor", mini_batch_size=32)<br /><br />ll_train_data = sagemaker.inputs.TrainingInput(<br />    preprocessed_train,<br />    distribution="FullyReplicated",<br />    content_type="text/csv",<br />    s3_data_type="S3Prefix",<br />)<br /><br />data_channels = {"train": ll_train_data}<br />ll_estimator.fit(inputs=data_channels, logs=True)</pre><br />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. | Scientifique des données | 

### Déployer le pipeline final
<a name="deploy-the-final-pipeline"></a>


| Sous-tâche | Description | Compé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 :<pre>from sagemaker.model import Model<br />from sagemaker.pipeline import PipelineModel<br />import boto3<br />from time import gmtime, strftime<br /><br />timestamp_prefix = strftime("%Y-%m-%d-%H-%M-%S", gmtime())<br /><br />scikit_learn_inferencee_model = sklearn_preprocessor.create_model()<br />linear_learner_model = ll_estimator.create_model()<br /><br />model_name = "inference-pipeline-" + timestamp_prefix<br />endpoint_name = "inference-pipeline-ep-" + timestamp_prefix<br />sm_model = PipelineModel(<br />    name=model_name, role=role, models= [scikit_learn_inferencee_model, linear_learner_model]<br />)<br /><br />sm_model.deploy(initial_instance_count=1, instance_type="ml.c4.xlarge", endpoint_name=endpoint_name)</pre>Vous pouvez ajuster le type d'instance utilisé dans l'objet du modèle en fonction de vos besoins. | Scientifique des données | 
| Testez l'inférence. | Pour vérifier que le terminal fonctionne correctement, exécutez l'exemple de code d'inférence suivant dans votre SageMaker bloc-notes :<pre>from sagemaker.predictor import Predictor<br />from sagemaker.serializers import CSVSerializer<br /><br />payload = "M, 0.44, 0.365, 0.125, 0.516, 0.2155, 0.114, 0.155"<br />actual_rings = 10<br />predictor = Predictor(<br />    endpoint_name=endpoint_name, sagemaker_session=sagemaker_session, serializer=CSVSerializer()<br />)<br /><br />print(predictor.predict(payload))</pre> | Scientifique des données | 

## Ressources connexes
<a name="deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker-resources"></a>
+ [Prétraitez les données d'entrée avant de faire des prédictions à l'aide des pipelines SageMaker d'inférence Amazon et de Scikit-learn (](https://aws.amazon.com/blogs/machine-learning/preprocess-input-data-before-making-predictions-using-amazon-sagemaker-inference-pipelines-and-scikit-learn/)AWS Machine Learning Blog)
+ [Machine Learning de bout en bout avec Amazon SageMaker](https://github.com/aws-samples/amazon-sagemaker-build-train-deploy) (GitHub)