

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Erstellen Sie ein benutzerdefiniertes Docker-Container-Image für SageMaker und verwenden Sie es für Modelltrainings in 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 und Mateusz Zaremba, Amazon Web Services*

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

Dieses Muster zeigt, wie Sie ein Docker-Container-Image für [Amazon](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html) erstellen SageMaker und es für ein Trainingsmodell in [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) verwenden. Indem Sie benutzerdefinierte Algorithmen in einem Container verpacken, können Sie fast jeden Code in der SageMaker Umgebung ausführen, unabhängig von Programmiersprache, Framework oder Abhängigkeiten.

In dem bereitgestellten [SageMaker Beispiel-Notizbuch](https://docs.aws.amazon.com/sagemaker/latest/dg/nbi.html) wird das benutzerdefinierte Docker-Container-Image in [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) gespeichert. Step Functions verwendet dann den Container, der in Amazon ECR gespeichert ist, um ein Python-Verarbeitungsskript für SageMaker auszuführen. Anschließend exportiert der Container das Modell nach [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html).

## Voraussetzungen und Einschränkungen
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions-prereqs"></a>

**Voraussetzungen**
+ Ein aktives AWS-Konto
+ Eine [AWS Identity and Access Management (IAM) -Rolle für SageMaker](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html) mit Amazon S3 S3-Berechtigungen
+ Eine [IAM-Rolle für 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)
+ Vertrautheit mit Python
+ Vertrautheit mit dem Amazon SageMaker Python SDK
+ Vertrautheit mit der AWS-Befehlszeilenschnittstelle (AWS CLI)
+ Vertrautheit mit dem AWS-SDK SDK for Python (Boto3)
+ Vertrautheit mit Amazon ECR
+ Vertrautheit mit Docker

**Produktversionen**
+ AWS Step Functions SDK für Datenwissenschaft, Version 2.3.0
+ Amazon SageMaker Python SDK versie 2.78.0

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

Das folgende Diagramm zeigt einen Beispiel-Workflow für die Erstellung eines Docker-Container-Images für und SageMaker dessen anschließende Verwendung für ein Trainingsmodell in Step Functions:

![Workflow zum Erstellen eines Docker-Container-Images SageMaker zur Verwendung als Step Functions Functions-Trainingsmodell.](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/7857d57f-3077-4b06-8971-fb5846387693/images/37755e38-0bc4-4dd0-90c7-135d95b00053.png)


Das Diagramm zeigt den folgenden Workflow:

1. Ein Datenwissenschaftler oder DevOps Ingenieur verwendet ein SageMaker Amazon-Notizbuch, um ein benutzerdefiniertes Docker-Container-Image zu erstellen.

1. Ein Datenwissenschaftler oder DevOps Ingenieur speichert das Docker-Container-Image in einem privaten Amazon ECR-Repository, das sich in einer privaten Registrierung befindet.

1. Ein Datenwissenschaftler oder DevOps Ingenieur verwendet den Docker-Container, um einen SageMaker Python-Verarbeitungsjob in einem Step Functions Functions-Workflow auszuführen.

**Automatisierung und Skalierung**

Das SageMaker Beispiel-Notizbuch in diesem Muster verwendet einen `ml.m5.xlarge` Notebook-Instanztyp. Sie können den Instanztyp an Ihren Anwendungsfall anpassen. Weitere Informationen zu SageMaker Notebook-Instance-Typen finden Sie unter [ SageMaker Amazon-Preise](https://aws.amazon.com/sagemaker/pricing/).

## Tools
<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) ist ein verwalteter Container-Image-Registry-Service, der sicher, skalierbar und zuverlässig ist.
+ [Amazon SageMaker](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html) ist ein verwalteter Service für maschinelles Lernen (ML), der Ihnen hilft, ML-Modelle zu erstellen und zu trainieren und sie dann in einer produktionsbereiten gehosteten Umgebung bereitzustellen.
+ Das [Amazon SageMaker Python SDK](https://github.com/aws/sagemaker-python-sdk) ist eine Open-Source-Bibliothek für das Training und die Bereitstellung von Modellen für maschinelles Lernen. SageMaker
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) ist ein serverloser Orchestrierungsservice, mit dem Sie AWS Lambda Lambda-Funktionen und andere AWS-Services kombinieren können, um geschäftskritische Anwendungen zu erstellen.
+ Das [AWS Step Functions Data Science Python SDK](https://aws-step-functions-data-science-sdk.readthedocs.io/en/stable/index.html) ist eine Open-Source-Bibliothek, mit der Sie Step Functions Functions-Workflows erstellen können, die Modelle für maschinelles Lernen verarbeiten und veröffentlichen.

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

### Erstellen Sie ein benutzerdefiniertes Docker-Container-Image und speichern Sie es in Amazon ECR
<a name="create-a-custom-docker-container-image-and-store-it-in-amazon-ecr"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Richten Sie Amazon ECR ein und erstellen Sie eine neue private Registrierung. | Falls Sie dies noch nicht getan haben, richten Sie Amazon ECR ein, indem Sie den Anweisungen unter [Einrichtung mit Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/get-set-up-for-amazon-ecr.html) im *Amazon ECR-Benutzerhandbuch* folgen. Jedes AWS-Konto ist mit einer standardmäßigen privaten Amazon ECR-Registrierung ausgestattet. | DevOps Ingenieur | 
| Erstellen Sie ein privates Amazon ECR-Repository. | Folgen Sie den Anweisungen unter [Erstellen eines privaten Repositorys](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) im *Amazon ECR-Benutzerhandbuch*.In dem Repository, das Sie erstellen, speichern Sie Ihre benutzerdefinierten Docker-Container-Images. | DevOps Ingenieur | 
| Erstellen Sie ein Dockerfile, das die Spezifikationen enthält, die für die Ausführung Ihres SageMaker Verarbeitungsjobs erforderlich sind.  | Erstellen Sie ein Dockerfile, das die für die Ausführung Ihres SageMaker Verarbeitungsjobs erforderlichen Spezifikationen enthält, indem Sie ein Dockerfile konfigurieren. Eine Anleitung finden Sie im *Amazon SageMaker Developer Guide* unter [Anpassung Ihres eigenen Trainingscontainers](https://docs.aws.amazon.com/sagemaker/latest/dg/adapt-training-container.html).<br />Weitere Informationen zu Dockerfiles finden Sie in der [Dockerfile-Referenz](https://docs.docker.com/engine/reference/builder/) in der Docker-Dokumentation.<br />**Beispiel: Jupyter-Notebook-Codezellen zum Erstellen eines Dockerfiles**<br />*Zelle 1*<pre># Make docker folder<br />!mkdir -p docker</pre><br />*Zelle 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 Ingenieur | 
| Erstellen Sie Ihr Docker-Container-Image und übertragen Sie es auf Amazon ECR. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions.html)Weitere Informationen finden Sie unter [Container erstellen und registrieren](https://sagemaker-examples.readthedocs.io/en/latest/advanced_functionality/scikit_bring_your_own/scikit_bring_your_own.html#Building-and-registering-the-container) unter *Erstellen eines eigenen Algorithmus-Containers* auf GitHub.<br />**Beispiel für Jupyter-Notebook-Codezellen zum Erstellen und Registrieren eines Docker-Images**Bevor Sie die folgenden Zellen ausführen, stellen Sie sicher, dass Sie ein Dockerfile erstellt und im Verzeichnis namens gespeichert haben. `docker` Stellen Sie außerdem sicher, dass Sie ein Amazon ECR-Repository erstellt haben und dass Sie den `ecr_repository` Wert in der ersten Zelle durch den Namen Ihres Repositorys ersetzen.<br />*Zelle 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 />*Zelle 2*<pre># Build docker image<br />!docker build -t $image_uri docker</pre><br />*Zelle 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 />*Zelle 4*<pre># Push docker image<br />!docker push $image_uri</pre>Sie müssen [Ihren Docker-Client bei Ihrer privaten Registrierung authentifizieren](https://docs.aws.amazon.com/AmazonECR/latest/userguide/registry_auth.html), damit Sie die Befehle `docker push` und `docker pull` verwenden können. Mit diesen Befehlen werden Bilder in und aus den Repositorys in Ihrer Registrierung übertragen und abgerufen. | DevOps Ingenieur | 

### Erstellen Sie einen Step Functions Functions-Workflow, der Ihr benutzerdefiniertes Docker-Container-Image verwendet
<a name="create-a-step-functions-workflow-that-uses-your-custom-docker-container-image"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie ein Python-Skript, das Ihre benutzerdefinierte Verarbeitungs- und Modelltrainingslogik enthält. | Schreiben Sie eine benutzerdefinierte Verarbeitungslogik, die in Ihrem Datenverarbeitungsskript ausgeführt werden soll. Speichern Sie es dann als Python-Skript mit dem Namen`training.py`.<br />Weitere Informationen finden Sie unter [Bringen Sie Ihr eigenes Modell mit aktiviertem SageMaker Skriptmodus](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-script-mode/sagemaker-script-mode.html) mit GitHub.<br />**Beispiel für ein Python-Skript, das benutzerdefinierte Verarbeitungs- und Modelltrainingslogik enthält**<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> | Datenwissenschaftler | 
| Erstellen Sie einen Step Functions Functions-Workflow, der Ihren SageMaker Verarbeitungsjob als einen der Schritte enthält.  | Installieren und importieren Sie das [AWS Step Functions Data Science SDK](https://aws-step-functions-data-science-sdk.readthedocs.io/en/stable/readmelink.html) und laden Sie die Datei **training.py** auf Amazon S3 hoch. Verwenden Sie dann das [Amazon SageMaker Python SDK](https://github.com/aws/sagemaker-python-sdk), um einen Verarbeitungsschritt in Step Functions zu definieren.Stellen Sie sicher, dass Sie in Ihrem AWS-Konto [eine IAM-Ausführungsrolle für Step Functions erstellt](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) haben.<br />**Beispiel für die Einrichtung einer Umgebung und ein benutzerdefiniertes Trainingsskript zum Hochladen auf 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 />**Beispiel für eine Definition eines SageMaker Verarbeitungsschritts, die ein benutzerdefiniertes Amazon ECR-Image und ein Python-Skript verwendet**Stellen Sie sicher, dass Sie den `execution_input` Parameter verwenden, um den Jobnamen anzugeben. Der Wert des Parameters muss bei jeder Ausführung des Jobs eindeutig sein. Außerdem wird der Code der Datei **training.py** als `input` Parameter an die übergeben`ProcessingStep`, was bedeutet, dass er in den Container kopiert wird. Das Ziel für den `ProcessingInput` Code ist dasselbe wie das zweite Argument in der`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 />**Beispiel Step Functions Functions-Workflow, der einen SageMaker Verarbeitungsjob ausführt**Dieser Beispiel-Workflow umfasst nur den SageMaker Verarbeitungs-Job-Schritt, keinen vollständigen Step Functions Functions-Workflow. Ein vollständiges Beispiel für einen Workflow finden Sie unter [Beispiel-Notebooks SageMaker in](https://aws-step-functions-data-science-sdk.readthedocs.io/en/stable/readmelink.html#example-notebooks-in-sagemaker) der AWS Step Functions Data Science SDK-Dokumentation.<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> | Datenwissenschaftler | 

## Zugehörige Ressourcen
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions-resources"></a>
+ [Daten verarbeiten](https://docs.aws.amazon.com/sagemaker/latest/dg/processing-job.html) (*Amazon SageMaker Developer Guide*)
+ [Anpassung Ihres eigenen Trainingscontainers](https://docs.aws.amazon.com/sagemaker/latest/dg/adapt-training-container.html) (*Amazon SageMaker Developer Guide*)