

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.

# Verwenden Ihres eigenen Verarbeitungscodes
<a name="use-your-own-processing-code"></a>

Sie können Bibliotheken installieren, um Ihre Skripts in Ihrem eigenen Verarbeitungscontainer auszuführen, oder in einem fortgeschritteneren Szenario können Sie Ihren eigenen Verarbeitungscontainer erstellen, der den Vertrag zur Ausführung in Amazon SageMaker AI erfüllt. Weitere Informationen zu Containern in SageMaker KI finden Sie unter[Docker-Container für das Training und die Bereitstellung von Modellen](docker-containers.md). Eine formale Spezifikation, die den Vertrag für einen Amazon SageMaker Processing Container definiert, finden Sie unter[So erstellen Sie einen eigenen Verarbeitungscontainer (erweitertes Szenario)](build-your-own-processing-container.md). 

**Topics**
+ [Ausführen von Scripts mit Ihrem eigenen Verarbeitungscontainer](processing-container-run-scripts.md)
+ [So erstellen Sie einen eigenen Verarbeitungscontainer (erweitertes Szenario)](build-your-own-processing-container.md)

# Ausführen von Scripts mit Ihrem eigenen Verarbeitungscontainer
<a name="processing-container-run-scripts"></a>

Sie können scikit-learn-Skripte verwenden, um Daten vorzuverarbeiten und Ihre Modelle auszuwerten. Um zu sehen, wie man scikit-learn Skripte ausführt, um diese Aufgaben zu erfüllen, siehe das [scikit-learn Processing](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/sagemaker_processing/scikit_learn_data_processing_and_model_evaluation) Beispiel-Notebook. Dieses Notizbuch verwendet die `ScriptProcessor` Klasse aus dem Amazon SageMaker Python SDK for Processing.

Das folgende Beispiel zeigt einen allgemeinen Arbeitsablauf für die Verwendung einer `ScriptProcessor` Klasse mit Ihrem eigenen Verarbeitungscontainer. Der Workflow zeigt, wie Sie Ihr eigenes Image erstellen, Ihren Container erstellen und eine `ScriptProcessor` Klasse verwenden, um ein Python-Vorverarbeitungsskript mit dem Container auszuführen. Der Verarbeitungsjob verarbeitet Ihre Eingabedaten und speichert die verarbeiteten Daten in Amazon Simple Storage Service (Amazon S3).

Bevor Sie die folgenden Beispiele verwenden können, müssen Sie Ihre eigenen Eingabedaten und ein Python-Skript für die Verarbeitung Ihrer Daten vorbereitet haben. Ein end-to-end Beispiel mit Anleitungen für diesen Prozess finden Sie im [Scikit-Learn Processing Beispiel-Notizbuch](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/sagemaker_processing/scikit_learn_data_processing_and_model_evaluation).

1. Erstellen Sie eine Docker-Registry und fügen Sie die Docker-Datei hinzu, die zum Erstellen des Verarbeitungscontainers verwendet wird. Installieren Sie darin Pandas und scikit-learn. (Sie können mit einem ähnlichen `RUN`-Befehl auch Ihre eigenen Abhängigkeiten installieren.)

   ```
   mkdir docker
   
   %%writefile docker/Dockerfile
   
   FROM python:3.7-slim-buster
   
   RUN pip3 install pandas==0.25.3 scikit-learn==0.21.3
   ENV PYTHONUNBUFFERED=TRUE
   
   ENTRYPOINT ["python3"]
   ```

1. Erstellen Sie den Container mit dem Docker-Befehl, erstellen Sie ein Amazon Elastic Container Registry (Amazon ECR)-Repository und pushen Sie das Image zu Amazon ECR.

   ```
   import boto3
   
   account_id = boto3.client('sts').get_caller_identity().get('Account')
   region = boto3.Session().region_name
   ecr_repository = 'sagemaker-processing-container'
   tag = ':latest'
   processing_repository_uri = '{}.dkr.ecr.{}.amazonaws.com/{}'.format(account_id, region, ecr_repository + tag)
   
   # Create ECR repository and push docker image
   !docker build -t $ecr_repository docker
   !aws ecr get-login-password --region {region} | docker login --username AWS --password-stdin {account_id}.dkr.ecr.{region}.amazonaws.com
   !aws ecr create-repository --repository-name $ecr_repository
   !docker tag {ecr_repository + tag} $processing_repository_uri
   !docker push $processing_repository_uri
   ```

1. Richten Sie das `ScriptProcessor` vom SageMaker Python-SDK aus ein, um das Skript auszuführen. *image\$1uri*Ersetzen Sie durch den URI für das von Ihnen erstellte Image und durch den *role\$1arn* ARN für eine AWS Identity and Access Management Rolle, die Zugriff auf Ihren Amazon S3 S3-Ziel-Bucket hat.

   ```
   from sagemaker.processing import ScriptProcessor, ProcessingInput, ProcessingOutput
   
   script_processor = ScriptProcessor(command=['python3'],
                   image_uri='image_uri',
                   role='role_arn',
                   instance_count=1,
                   instance_type='ml.m5.xlarge')
   ```

1. Führen Sie das Skript aus. *preprocessing.py*Ersetzen Sie es durch den Namen Ihres eigenen Python-Verarbeitungsskripts und *s3://path/to/my/input-data.csv* ersetzen Sie es durch den Amazon S3 S3-Pfad zu Ihren Eingabedaten.

   ```
   script_processor.run(code='preprocessing.py',
                        inputs=[ProcessingInput(
                           source='s3://path/to/my/input-data.csv',
                           destination='/opt/ml/processing/input')],
                        outputs=[ProcessingOutput(source='/opt/ml/processing/output/train'),
                                  ProcessingOutput(source='/opt/ml/processing/output/validation'),
                                  ProcessingOutput(source='/opt/ml/processing/output/test')])
   ```

Das gleiche Verfahren kann mit anderen Bibliotheks- oder Systemabhängigkeiten verwendet werden. Sie können auch vorhandene Docker-Images verwenden. Dazu gehören Images, die Sie auf anderen Plattformen wie [Kubernetes](https://kubernetes.io/) ausführen.

# So erstellen Sie einen eigenen Verarbeitungscontainer (erweitertes Szenario)
<a name="build-your-own-processing-container"></a>

Sie können Amazon SageMaker Processing ein Docker-Image zur Verfügung stellen, das über Ihren eigenen Code und Abhängigkeiten verfügt, um Ihre Workloads für Datenverarbeitung, Feature-Engineering und Modellevaluierung auszuführen. Im Folgenden finden Sie Informationen dazu, wie Sie Ihren eigenen Verarbeitungscontainer erstellen.

Im folgenden Beispiel wird mithilfe einer Docker-Datei ein Container mit den Python-Bibliotheken „scikit-learn“ und „pandas“ erstellt, den Sie als Verarbeitungsauftrag ausführen können. 

```
FROM python:3.7-slim-buster

# Install scikit-learn and pandas
RUN pip3 install pandas==0.25.3 scikit-learn==0.21.3

# Add a Python script and configure Docker to run it
ADD processing_script.py /
ENTRYPOINT ["python3", "/processing_script.py"]
```

Ein Beispiel für ein Verarbeitungsskript finden Sie unter [Erste Schritte mit SageMaker ](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker_processing/basic_sagemaker_data_processing/basic_sagemaker_processing.ipynb) der Verarbeitung.

Erstellen Sie dieses Docker-Image, übertragen Sie es in ein Amazon Elastic Container Registry (Amazon ECR) -Repository und stellen Sie sicher, dass Ihre SageMaker KI-IAM-Rolle das Image aus Amazon ECR abrufen kann. Dann können Sie dieses Image auf Amazon SageMaker Processing ausführen.

# So führt Amazon SageMaker Processing Ihr Prozesscontainer-Image aus
<a name="byoc-run-image"></a>

Amazon SageMaker Processing führt Ihr Verarbeitungscontainer-Image auf ähnliche Weise wie den folgenden Befehl aus, wobei `AppSpecification.ImageUri` es sich um den Amazon ECR-Image-URI handelt, den Sie in einem `CreateProcessingJob` Vorgang angeben. 

```
docker run [AppSpecification.ImageUri]
```

Mit diesem Befehl wird der im Docker-Image konfigurierte `ENTRYPOINT`-Befehl ausgeführt. 

Sie können auch den Eintrittspunktbefehl im Image überschreiben oder ihm Befehlszeilenargumente mit den Parametern `AppSpecification.ContainerEntrypoint` und `AppSpecification.ContainerArgument` in Ihrer `CreateProcessingJob`-Anforderung übergeben. Durch die Angabe dieser Parameter wird Amazon SageMaker Processing so konfiguriert, dass der Container ähnlich wie der folgende Befehl ausgeführt wird. 

```
 docker run --entry-point [AppSpecification.ContainerEntrypoint] [AppSpecification.ImageUri] [AppSpecification.ContainerArguments]
```

Wenn Sie beispielsweise angeben, dass `[python3, -v, /processing_script.py]` in Ihrer `CreateProcessingJob ` Anfrage sein und `ContainerArguments` sein sein`[data-format, csv]`, führt Amazon SageMaker Processing Ihren Container mit dem folgenden Befehl aus. `ContainerEntrypoint` 

```
 python3 -v /processing_script.py data-format csv 
```

 Beachten Sie beim Erstellen Ihres Verarbeitungscontainers die folgenden Details: 
+ Amazon SageMaker Processing entscheidet je nach Exit-Code der Befehlsausführung, ob der Job abgeschlossen wird oder fehlschlägt. Ein Verarbeitungsauftrag wird ausgeführt, wenn alle Verarbeitungscontainer erfolgreich mit dem Beendigungscode 0 beendet werden, und schlägt fehl, wenn einer der Container mit einem Beendigungscode ungleich Null beendet wird.
+  Mit Amazon SageMaker Processing können Sie den Einstiegspunkt des Verarbeitungscontainers überschreiben und Befehlszeilenargumente festlegen, genau wie Sie es mit der Docker-API tun können. Docker-Images können die Eintrittspunkt und die Befehlszeilenargumente auch unter Verwendung des `ENTRYPOINT` und der CMD-Anweisungen konfigurieren. Die Art und Weise, wie die Parameter `ContainerEntrypoint` und `ContainerArgument` des `CreateProcessingJob` den Eintrittspunkt und die Argumente eines Docker-Image konfigurieren, spiegelt wider, wie Docker den Eintrittspunkt und die Argumente über die Docker-API überschreibt:
  + Wenn weder `ContainerEntrypoint` noch `ContainerArguments` angegeben werden, verwendet Processing den Standard `ENTRYPOINT` oder CMD im image.
  + Wenn `ContainerEntrypoint` angegeben wird, aber nicht `ContainerArguments`, führt die Verarbeitung das Bild mit dem angegebenen Eintrittspunkt aus und ignoriert `ENTRYPOINT` und CMD im Bild.
  + Wenn `ContainerArguments`, aber nicht `ContainerEntrypoint` angegeben wird, führt Processing das Abbild mit dem Standard-`ENTRYPOINT` im Abbild und mit den angegebenen Argumenten aus.
  + Wenn sowohl `ContainerEntrypoint` als auch `ContainerArguments` angegeben sind, führt die Verarbeitung das Bild mit dem angegebenen Eintrittspunkt und den Argumenten aus und ignoriert `ENTRYPOINT` und CMD im Bild.
+ Sie müssen die exec-Form der `ENTRYPOINT`-Anweisung in Ihrem Dockerfile verwenden (`ENTRYPOINT` `["executable", "param1", "param2"])` anstelle der Shell-Form (`ENTRYPOINT`` command param1 param2`). Dadurch kann Ihr Verarbeitungscontainer – `SIGINT`und `SIGKILL`-Signale empfangen, die von der Verarbeitung zum Stoppen von Verarbeitungsaufträgen über die `StopProcessingJob`-API verwendet werden.
+ `/opt/ml`und all seine Unterverzeichnisse sind von AI reserviert. SageMaker Wenn Sie Ihr Processing-Docker-Image erstellen, sollten Sie keine Daten, die für Ihren Processing-Container erforderlich sind, in diesen Verzeichnissen ablegen.
+ Wenn Sie GPU-Geräte verwenden möchten, stellen Sie sicher, dass Ihre Container nvidia-docker-kompatibel sind. Fügen Sie nur das CUDA-Toolkit in die Container ein. Bündeln Sie NVIDIA-Treiber nicht mit dem Abbild. Mehr Informationen über nvidia-docker finden Sie unter [NVIDIA/nvidia-docker](https://github.com/NVIDIA/nvidia-docker).

# So konfiguriert Amazon SageMaker Processing Eingabe und Ausgabe für Ihren Verarbeitungscontainer
<a name="byoc-input-and-output"></a>

Wenn Sie einen Verarbeitungsauftrag mit der `CreateProcessingJob`-Operation erstellen, können Sie mehrere – `ProcessingInput`und `ProcessingOutput`-Werte angeben. 

Mit dem `ProcessingInput`-Parameter geben Sie eine Amazon Simple Storage Service (Amazon S3)-URI an, von der Daten heruntergeladen werden sollen, sowie einen Pfad in Ihrem Verarbeitungscontainer, in den die Daten heruntergeladen werden sollen. Der `ProcessingOutput`-Parameter konfiguriert einen Pfad in Ihrem Verarbeitungscontainer, von dem aus Daten hochgeladen werden sollen, sowie den Ort in Amazon S3, an den diese Daten hochgeladen werden sollen. Der Pfad im Verarbeitungscontainer muss für `ProcessingInput` und `ProcessingOutput` mit `/opt/ml/processing/ ` beginnen.

Beispielsweise können Sie einen Verarbeitungsauftrag mit einem `ProcessingInput`-Parameter erstellen, der Daten aus `s3://your-data-bucket/path/to/input/csv/data` in den Pfad `/opt/ml/processing/csv` im Verarbeitungscontainer herunterlädt, und einem `ProcessingOutput`-Parameter, der Daten von `/opt/ml/processing/processed_csv` in `s3://your-data-bucket/path/to/output/csv/data` hochlädt. Die Eingabedaten würden dann vom Verarbeitungsauftrag gelesen und die Ausgabedaten in `/opt/ml/processing/processed_csv` geschrieben. Anschließend werden die in diesen Pfad geschriebenen Daten an den angegebenen Amazon S3-Ausgabeort hochgeladen. 

**Wichtig**  
Symbolische Links (Symlinks) können nicht verwendet werden, um Ausgabedaten auf Amazon S3 hochzuladen. Symlinks werden beim Hochladen von Ausgabedaten nicht befolgt. 

# So stellt Amazon SageMaker Processing Protokolle und Metriken für Ihren Verarbeitungscontainer bereit
<a name="byoc-logs-and-metrics"></a>

Wenn Ihr Verarbeitungscontainer in `stdout` oder schreibt`stderr`, speichert Amazon SageMaker Processing die Ausgabe jedes Verarbeitungscontainers und stellt sie in CloudWatch Amazon-Protokollen ab. Weitere Informationen zur Protokollierung finden Sie unter [CloudWatch Protokolle für Amazon SageMaker AI](logging-cloudwatch.md).

Amazon SageMaker Processing bietet auch CloudWatch Metriken für jede Instance, auf der Ihr Verarbeitungscontainer ausgeführt wird. Weitere Informationen zu Metriken finden Sie unter [SageMaker Amazon-KI-Metriken bei Amazon CloudWatch](monitoring-cloudwatch.md). 

## So konfiguriert Amazon SageMaker Processing Ihren Verarbeitungscontainer
<a name="byoc-config"></a>

Amazon SageMaker Processing stellt Konfigurationsinformationen für Ihren Verarbeitungscontainer über Umgebungsvariablen und zwei JSON-Dateien — `/opt/ml/config/processingjobconfig.json` und `/opt/ml/config/resourceconfig.json` — an vordefinierten Stellen im Container bereit. 

Beim Start eines Verarbeitungsauftrags werden die Umgebungsvariablen verwendet, die Sie mit der `Environment`-Zuordnung in der `CreateProcessingJob`-Anforderung angegeben haben. Die `/opt/ml/config/processingjobconfig.json`-Datei enthält Informationen über die Hostnamen Ihrer Verarbeitungscontainer und sie wird auch in der `CreateProcessingJob`-Anforderung angegeben. 

Das folgende Beispiel zeigt das Format der `/opt/ml/config/processingjobconfig.json`-Datei.

```
{
    "ProcessingJobArn": "<processing_job_arn>",
    "ProcessingJobName": "<processing_job_name>",
    "AppSpecification": {
        "ImageUri": "<image_uri>",
        "ContainerEntrypoint": null,
        "ContainerArguments": null
    },
    "Environment": {
        "KEY": "VALUE"
    },
    "ProcessingInputs": [
        {
            "InputName": "input-1",
            "S3Input": {
                "LocalPath": "/opt/ml/processing/input/dataset",
                "S3Uri": "<s3_uri>",
                "S3DataDistributionType": "FullyReplicated",
                "S3DataType": "S3Prefix",
                "S3InputMode": "File",
                "S3CompressionType": "None",
                "S3DownloadMode": "StartOfJob"
            }
        }
    ],
    "ProcessingOutputConfig": {
        "Outputs": [
            {
                "OutputName": "output-1",
                "S3Output": {
                    "LocalPath": "/opt/ml/processing/output/dataset",
                    "S3Uri": "<s3_uri>",
                    "S3UploadMode": "EndOfJob"
                }
            }
        ],
        "KmsKeyId": null
    },
    "ProcessingResources": {
        "ClusterConfig": {
            "InstanceCount": 1,
            "InstanceType": "ml.m5.xlarge",
            "VolumeSizeInGB": 30,
            "VolumeKmsKeyId": null
        }
    },
    "RoleArn": "<IAM role>",
    "StoppingCondition": {
        "MaxRuntimeInSeconds": 86400
    }
}
```

Die `/opt/ml/config/resourceconfig.json`-Datei enthält Informationen zu den Hostnamen Ihrer Verarbeitungscontainer. Verwenden Sie diese Hostnamen, wenn Sie verteilten Verarbeitungscode erstellen oder ausführen.

```
{
  "current_host": "algo-1",
  "hosts": ["algo-1","algo-2","algo-3"]
}
```

Verwenden Sie nicht die in `/etc/hostname` oder `/etc/hosts` enthaltenen Informationen zu den Hostnamen, da diese ungenau sind.

Hostnamen-Informationen sind möglicherweise nicht sofort für den Verarbeitungscontainer verfügbar. Wir empfehlen, eine Wiederholungsrichtlinie für Operationen zur Auflösung des Hostnamens hinzuzufügen, sobald Knoten im Cluster verfügbar werden.

# Speichern und Zugriff auf Metadateninformationen zu Ihrem Verarbeitungsauftrag
<a name="byoc-metadata"></a>

Container können UTF-8-codierten Text in die `/opt/ml/output/message`-Datei schreiben, um Metadaten aus dem Verarbeitungscontainer zu speichern, nachdem dieser geschlossen wurde. Nachdem der Verarbeitungsauftrag in einen Terminalstatus („`Completed`“, „`Stopped`“ oder „`Failed`“) übergangen ist, enthält das Feld „`ExitMessage`“ in [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeProcessingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeProcessingJob.html) die ersten 1 KB dieser Datei. Greifen Sie auf den ursprünglichen Teil der Datei mit einem Aufruf an [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeProcessingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeProcessingJob.html) zu. Dieser wird dann über den `ExitMessage`-Parameter zurückgegeben. Beispiel: Bei fehlgeschlagenen Verarbeitungsaufträgen können Sie dieses Feld verwenden, um Informationen zu erhalten, warum der Verarbeitungscontainer fehlgeschlagen ist.

**Wichtig**  
Schreiben Sie keine sensiblen Daten in die `/opt/ml/output/message`-Datei. 

Wenn die Daten in dieser Datei nicht UTF-8-codiert sind, schlägt der Auftrag fehl und gibt `ClientError` zurück. Werden mehrere Container mit `ExitMessage,` beendet, dann werden die Inhalte von `ExitMessage` aus jedem einzelnen Verarbeitungscontainer miteinander verkettet und dann auf 1 KB gekürzt.

# Führen Sie Ihren Verarbeitungscontainer mit dem SageMaker AI Python SDK aus
<a name="byoc-run"></a>

Sie können das SageMaker Python-SDK verwenden, um Ihr eigenes Verarbeitungsbild mithilfe der `Processor` Klasse auszuführen. Das folgende Beispiel zeigt, wie Sie Ihren eigenen Verarbeitungscontainer mit einer Eingabe von Amazon Simple Storage Service (Amazon S3) und einer Ausgabe an Amazon S3 ausführen.

```
from sagemaker.processing import Processor, ProcessingInput, ProcessingOutput

processor = Processor(image_uri='<your_ecr_image_uri>',
                     role=role,
                     instance_count=1,
                     instance_type="ml.m5.xlarge")

processor.run(inputs=[ProcessingInput(
                        source='<s3_uri or local path>',
                        destination='/opt/ml/processing/input_data')],
                    outputs=[ProcessingOutput(
                        source='/opt/ml/processing/processed_data',
                        destination='<s3_uri>')],
                    )
```

Anstatt den Verarbeitungscode in das Verarbeitungs-Image zu integrieren, können Sie einen `ScriptProcessor` mit Ihrem eigenen Image und dem auszuführenden Befehl bereitstellen. Geben Sie diese zusammen mit dem Code an, den Sie in diesem Container ausführen möchten. Ein Beispiel finden Sie unter [Ausführen von Scripts mit Ihrem eigenen Verarbeitungscontainer](processing-container-run-scripts.md).

Sie können auch das Scikit-Learn-Image verwenden, das Amazon SageMaker Processing zur Verfügung stellt, `SKLearnProcessor` um Scikit-Learn-Skripts auszuführen. Ein Beispiel finden Sie unter [Ausführen eines Verarbeitungsjobs mit scikit-learn](use-scikit-learn-processing-container.md). 