

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.

# Créez une image de conteneur Docker personnalisée SageMaker et utilisez-la pour la formation des modèles dans AWS Step Functions
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions"></a>

*Julia Bluszcz, Aubrey Oosthuizen, Mohan Gowda Purushothama, Neha Sharma et Mateusz Zaremba, Amazon Web Services*

## Résumé
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions-summary"></a>

Ce modèle montre comment créer une image de conteneur Docker pour [Amazon SageMaker](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html) et l'utiliser comme modèle de formation dans [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html). En regroupant des algorithmes personnalisés dans un conteneur, vous pouvez exécuter presque n'importe quel code de l' SageMaker environnement, quels que soient le langage de programmation, le framework ou les dépendances.

Dans l'exemple de [SageMaker bloc-notes](https://docs.aws.amazon.com/sagemaker/latest/dg/nbi.html) fourni, l'image personnalisée du conteneur Docker est stockée dans [Amazon Elastic Container Registry (Amazon ECR).](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) Step Functions utilise ensuite le conteneur stocké dans Amazon ECR pour exécuter un script de traitement Python pour SageMaker. Le conteneur exporte ensuite le modèle vers [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html).

## Conditions préalables et limitations
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif
+ Un [rôle AWS Identity and Access Management (IAM) pour les utilisateurs disposant SageMaker](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html) d'autorisations Amazon S3
+ Un [rôle IAM pour Step Functions](https://sagemaker-examples.readthedocs.io/en/latest/step-functions-data-science-sdk/step_functions_mlworkflow_processing/step_functions_mlworkflow_scikit_learn_data_processing_and_model_evaluation.html#Create-an-Execution-Role-for-Step-Functions)
+ Connaissance de Python
+ Connaissance du SDK Amazon SageMaker Python
+ Connaissance de l'interface de ligne de commande AWS (AWS CLI)
+ Connaissance du SDK AWS pour Python (Boto3)
+ Connaissance d'Amazon ECR
+ Connaissance de Docker

**Versions du produit**
+ SDK AWS Step Functions pour la science des données, version 2.3.0
+ Version SageMaker 2.78.0 du SDK Amazon Python

## Architecture
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions-architecture"></a>

Le schéma suivant montre un exemple de flux de travail permettant de créer une image de conteneur Docker pour SageMaker, puis de l'utiliser pour un modèle d'entraînement dans Step Functions :

![Flux de travail pour créer une image de conteneur Docker SageMaker à utiliser comme modèle de formation Step Functions.](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/7857d57f-3077-4b06-8971-fb5846387693/images/37755e38-0bc4-4dd0-90c7-135d95b00053.png)


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

1. Un data scientist ou un DevOps ingénieur utilise un SageMaker bloc-notes Amazon pour créer une image de conteneur Docker personnalisée.

1. Un data scientist ou un DevOps ingénieur stocke l'image du conteneur Docker dans un référentiel privé Amazon ECR qui se trouve dans un registre privé.

1. Un data scientist ou un DevOps ingénieur utilise le conteneur Docker pour exécuter une tâche de SageMaker traitement Python dans un flux de travail Step Functions.

**Automatisation et mise à l'échelle**

Dans ce modèle, l'exemple de SageMaker bloc-notes utilise un type d'instance de `ml.m5.xlarge` bloc-notes. Vous pouvez modifier le type d'instance en fonction de votre cas d'utilisation. Pour plus d'informations sur les types d'instances de SageMaker bloc-notes, consultez [Amazon SageMaker Pricing](https://aws.amazon.com/sagemaker/pricing/).

## Outils
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions-tools"></a>
+ [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 géré d'apprentissage automatique (ML) 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.
+ Le [SDK Amazon SageMaker Python](https://github.com/aws/sagemaker-python-sdk) est une bibliothèque open source pour la formation et le déploiement de modèles d'apprentissage automatique sur. SageMaker
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) est un service d'orchestration sans serveur qui vous permet de combiner les fonctions AWS Lambda et d'autres services AWS pour créer des applications critiques pour l'entreprise.
+ Le [SDK AWS Step Functions Data Science Python](https://aws-step-functions-data-science-sdk.readthedocs.io/en/stable/index.html) est une bibliothèque open source qui vous aide à créer des flux de travail Step Functions qui traitent et publient des modèles d'apprentissage automatique.

## Épopées
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions-epics"></a>

### Créez une image de conteneur Docker personnalisée et stockez-la dans Amazon ECR
<a name="create-a-custom-docker-container-image-and-store-it-in-amazon-ecr"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez Amazon ECR et créez un nouveau registre privé. | Si ce n'est pas déjà fait, configurez Amazon ECR en suivant les instructions de la section [Configuration avec Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/get-set-up-for-amazon-ecr.html) dans le guide de l'utilisateur *Amazon ECR.* Chaque compte AWS est associé à un registre Amazon ECR privé par défaut. | DevOps ingénieur | 
| Créez un référentiel privé Amazon ECR. | Suivez les instructions de la section [Création d'un référentiel privé](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) dans le *guide de l'utilisateur Amazon ECR.*Le référentiel que vous créez est l'endroit où vous stockerez vos images de conteneur Docker personnalisées. | DevOps ingénieur | 
| Créez un Dockerfile qui inclut les spécifications nécessaires à l'exécution de votre tâche de SageMaker traitement.  | Créez un Dockerfile qui inclut les spécifications nécessaires pour exécuter votre tâche de SageMaker traitement en configurant un Dockerfile. Pour obtenir des instructions, consultez [Adapter votre propre conteneur de formation](https://docs.aws.amazon.com/sagemaker/latest/dg/adapt-training-container.html) dans le manuel *Amazon SageMaker Developer Guide*.<br />Pour plus d'informations sur Dockerfiles, consultez la [référence Dockerfile](https://docs.docker.com/engine/reference/builder/) dans la documentation Docker.<br />**Exemple de cellules de code de bloc-notes Jupyter pour créer un Dockerfile**<br />*Cellule 1*<pre># Make docker folder<br />!mkdir -p docker</pre><br />*Cellule 2*<pre>%%writefile docker/Dockerfile<br /><br />FROM python:3.7-slim-buster<br /><br />RUN pip3 install pandas==0.25.3 scikit-learn==0.21.3<br />ENV PYTHONUNBUFFERED=TRUE<br /><br />ENTRYPOINT ["python3"]</pre> | DevOps ingénieur | 
| Créez votre image de conteneur Docker et envoyez-la vers Amazon ECR. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions.html)Pour plus d'informations, voir [Création et enregistrement du conteneur](https://sagemaker-examples.readthedocs.io/en/latest/advanced_functionality/scikit_bring_your_own/scikit_bring_your_own.html#Building-and-registering-the-container) dans *Création de votre propre conteneur d'algorithmes* sur GitHub.<br />**Exemple de cellules de code de bloc-notes Jupyter pour créer et enregistrer une image Docker**Avant d'exécuter les cellules suivantes, assurez-vous d'avoir créé un Dockerfile et de l'avoir stocké dans le répertoire appelé. `docker` Assurez-vous également que vous avez créé un référentiel Amazon ECR et que vous remplacez la `ecr_repository` valeur de la première cellule par le nom de votre référentiel.<br />*Cellule 1*<pre>import boto3<br />tag = ':latest'<br />account_id = boto3.client('sts').get_caller_identity().get('Account')<br />region = boto3.Session().region_name<br />ecr_repository = 'byoc'<br /><br />image_uri = '{}.dkr.ecr.{}.amazonaws.com/{}'.format(account_id, region, ecr_repository + tag)</pre><br />*Cellule 2*<pre># Build docker image<br />!docker build -t $image_uri docker</pre><br />*Cellule 3*<pre># Authenticate to ECR<br />!aws ecr get-login-password --region {region} | docker login --username AWS --password-stdin {account_id}.dkr.ecr.{region}.amazonaws.com</pre><br />*Cellule 4*<pre># Push docker image<br />!docker push $image_uri</pre>Vous devez [authentifier votre client Docker auprès de votre registre privé](https://docs.aws.amazon.com/AmazonECR/latest/userguide/registry_auth.html) afin de pouvoir utiliser les commandes `docker push` et`docker pull`. Ces commandes envoient et extraient des images depuis et vers les référentiels de votre registre. | DevOps ingénieur | 

### Créez un flux de travail Step Functions qui utilise votre image de conteneur Docker personnalisée
<a name="create-a-step-functions-workflow-that-uses-your-custom-docker-container-image"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un script Python qui inclut votre logique de traitement personnalisé et d'entraînement du modèle. | Rédigez une logique de traitement personnalisée à exécuter dans votre script de traitement des données. Ensuite, enregistrez-le sous la forme d'un script Python nommé`training.py`.<br />Pour plus d'informations, voir [Apportez votre propre modèle avec SageMaker le mode Script activé](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-script-mode/sagemaker-script-mode.html) GitHub.<br />**Exemple de script Python incluant un traitement personnalisé et une logique d'entraînement du modèle**<pre>%%writefile training.py<br />from numpy import empty<br />import pandas as pd<br />import os<br />from sklearn import datasets, svm<br />from joblib import dump, load<br /><br /><br />if __name__ == '__main__':<br />    digits = datasets.load_digits()<br />    #create classifier object<br />    clf = svm.SVC(gamma=0.001, C=100.)<br />    <br />    #fit the model<br />    clf.fit(digits.data[:-1], digits.target[:-1])<br />    <br />    #model output in binary format<br />    output_path = os.path.join('/opt/ml/processing/model', "model.joblib")<br />    dump(clf, output_path)</pre> | Scientifique des données | 
| Créez un flux de travail Step Functions qui inclut votre tâche de SageMaker traitement comme l'une des étapes.  | Installez et importez le [SDK AWS Step Functions Data Science](https://aws-step-functions-data-science-sdk.readthedocs.io/en/stable/readmelink.html) et chargez le fichier **training.py** sur Amazon S3. Utilisez ensuite le [SDK Amazon SageMaker Python](https://github.com/aws/sagemaker-python-sdk) pour définir une étape de traitement dans Step Functions.Assurez-vous d'avoir [créé un rôle d'exécution IAM pour Step Functions](https://sagemaker-examples.readthedocs.io/en/latest/step-functions-data-science-sdk/step_functions_mlworkflow_processing/step_functions_mlworkflow_scikit_learn_data_processing_and_model_evaluation.html#Create-an-Execution-Role-for-Step-Functions) dans votre compte AWS.<br />**Exemple de configuration d'environnement et de script de formation personnalisé à télécharger sur Amazon S3**<pre>!pip install stepfunctions<br /><br />import boto3<br />import stepfunctions<br />import sagemaker<br />import datetime<br /><br />from stepfunctions import steps<br />from stepfunctions.inputs import ExecutionInput<br />from stepfunctions.steps import (<br />    Chain<br />)<br />from stepfunctions.workflow import Workflow<br />from sagemaker.processing import ScriptProcessor, ProcessingInput, ProcessingOutput<br /><br />sagemaker_session = sagemaker.Session()<br />bucket = sagemaker_session.default_bucket() <br />role = sagemaker.get_execution_role()<br />prefix = 'byoc-training-model'<br /><br /># See prerequisites section to create this role<br />workflow_execution_role = f"arn:aws:iam::{account_id}:role/AmazonSageMaker-StepFunctionsWorkflowExecutionRole"<br /><br />execution_input = ExecutionInput(<br />    schema={<br />        "PreprocessingJobName": str})<br /><br /><br />input_code = sagemaker_session.upload_data(<br />    "training.py",<br />    bucket=bucket,<br />    key_prefix="preprocessing.py",<br />)</pre><br />**Exemple SageMaker de définition d'étape de traitement utilisant une image Amazon ECR personnalisée et un script Python**Assurez-vous d'utiliser le `execution_input` paramètre pour spécifier le nom de la tâche. La valeur du paramètre doit être unique à chaque exécution de la tâche. De plus, le code du fichier **training.py** est transmis en tant que `input` paramètre au`ProcessingStep`, ce qui signifie qu'il sera copié dans le conteneur. La destination du `ProcessingInput` code est la même que celle du deuxième argument contenu dans le`container_entrypoint`.<pre>script_processor = ScriptProcessor(command=['python3'],<br />                image_uri=image_uri,<br />                role=role,<br />                instance_count=1,<br />                instance_type='ml.m5.xlarge')<br /><br /><br />processing_step = steps.ProcessingStep(<br />    "training-step",<br />    processor=script_processor,<br />    job_name=execution_input["PreprocessingJobName"],<br />    inputs=[<br />        ProcessingInput(<br />            source=input_code,<br />            destination="/opt/ml/processing/input/code",<br />            input_name="code",<br />        ),<br />    ],<br />    outputs=[<br />        ProcessingOutput(<br />            source='/opt/ml/processing/model', <br />            destination="s3://{}/{}".format(bucket, prefix), <br />            output_name='byoc-example')<br />    ],<br />    container_entrypoint=["python3", "/opt/ml/processing/input/code/training.py"],<br />)</pre><br />**Exemple de flux de travail Step Functions qui exécute une tâche SageMaker de traitement**Cet exemple de flux de travail inclut uniquement l'étape de SageMaker traitement, et non un flux de travail Step Functions complet. Pour un exemple complet de flux de travail, consultez [Example notebooks SageMaker dans](https://aws-step-functions-data-science-sdk.readthedocs.io/en/stable/readmelink.html#example-notebooks-in-sagemaker) la documentation du SDK AWS Step Functions Data Science.<pre>workflow_graph = Chain([processing_step])<br /><br />workflow = Workflow(<br />    name="ProcessingWorkflow",<br />    definition=workflow_graph,<br />    role=workflow_execution_role<br />)<br /><br />workflow.create()<br /># Execute workflow<br />execution = workflow.execute(<br />    inputs={<br />        "PreprocessingJobName": str(datetime.datetime.now().strftime("%Y%m%d%H%M-%SS")),  # Each pre processing job (SageMaker processing job) requires a unique name,<br />    }<br />)<br />execution_output = execution.get_output(wait=True)</pre> | Scientifique des données | 

## Ressources connexes
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions-resources"></a>
+ [Données de traitement](https://docs.aws.amazon.com/sagemaker/latest/dg/processing-job.html) (*Amazon SageMaker Developer Guide*)
+ [Adaptation de votre propre conteneur de formation](https://docs.aws.amazon.com/sagemaker/latest/dg/adapt-training-container.html) (*Amazon SageMaker Developer Guide*)