

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.

# Rezept für das Mitbringen Ihres eigenen Containers
<a name="bring-own-container-recipe"></a>

In diesem Abschnitt stellen wir Ihnen Schritt für Schritt vor, was Sie für Braket Hybrid Jobs benötigen — die Skripte, Dateien und Schritte, um sie zu kombinieren, damit Sie mit Ihren benutzerdefinierten Docker Images loslegen können. bring your own container (BYOC) Die Rezepte für zwei häufige Fälle:

1. Installieren Sie zusätzliche Software in einem Docker Image und verwenden Sie in Ihren Jobs nur Python-Algorithmus-Skripte.

1. Verwenden Sie Algorithmus-Skripte, die in einer anderen Sprache als Python geschrieben sind, mit Hybrid Jobs oder einer anderen CPU-Architektur als x86.

Die Definition des * Container-Eintragsskripts * ist für Fall 2 komplexer.

Wenn Braket Ihren Hybrid-Job ausführt, startet es die angeforderte Anzahl und den angeforderten Typ von Amazon EC2-Instances und führt dann das Docker Image aus, das durch die Image-URI-Eingabe für die Auftragserstellung angegeben wurde, auf diesen Instanzen. Wenn Sie die BYOC-Funktion verwenden, geben Sie eine Image-URI an, die in einem [ privaten Amazon ECR-Repository gehostet wird, auf ](https://docs.aws.amazon.com/AmazonECR/latest/userguide/Repositories.html) das Sie Lesezugriff haben. Braket Hybrid Jobs verwendet dieses benutzerdefinierte Image, um den Job auszuführen.

Die spezifischen Komponenten, die Sie benötigen, um ein Docker Image zu erstellen, das mit Hybrid Jobs verwendet werden kann. Wenn Sie mit dem Schreiben und Erstellen nicht vertraut sind`Dockerfiles`, lesen Sie in der [ Dockerfile-Dokumentation ](https://docs.docker.com/reference/dockerfile/) und in der Dokumentation nach. [Amazon ECR CLI](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html)

**Topics**
+ [Ein Basis-Image für Ihr Dockerfile](#base-image-dockerfile)
+ [(Optional) Ein modifiziertes Container-Einstiegspunkt-Skript](#modified-container-entry-point)
+ [Installieren Sie die benötigte Software und das Container-Skript mit `Dockerfile`](#install-docketfile)

## Ein Basis-Image für Ihr Dockerfile
<a name="base-image-dockerfile"></a>

Wenn Sie Python verwenden und Software zusätzlich zu den von Braket bereitgestellten Containern installieren möchten, ist eine Option für ein Basis-Image eines der Braket-Container-Images, die in unserem [ GitHub Repo ](https://github.com/amazon-braket/amazon-braket-containers) und auf Amazon ECR gehostet werden. Sie müssen sich bei Amazon ECR [https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html#cli-authenticate-registry](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html#cli-authenticate-registry) authentifizieren, um das Image abzurufen und darauf aufzubauen. Die erste Zeile Ihrer BYOC-Datei Docker könnte beispielsweise wie folgt lauten: `FROM [IMAGE_URI_HERE]`

Füllen Sie als Nächstes den Rest aus, Dockerfile um die Software zu installieren und einzurichten, die Sie dem Container hinzufügen möchten. Die vorgefertigten Braket-Images enthalten bereits das entsprechende Container-Einstiegspunkt-Skript, sodass Sie sich keine Gedanken darüber machen müssen, dieses einzufügen.

Wenn Sie eine Nicht-Python-Sprache wie C\+\+, Rust oder Julia verwenden möchten, oder wenn Sie ein Image für eine Nicht-x86-CPU-Architektur wie ARM erstellen möchten, müssen Sie möglicherweise auf einem öffentlichen Barebone-Image aufbauen. Sie finden viele solcher Bilder in der öffentlichen Galerie von [ Amazon Elastic Container Registry. ](https://gallery.ecr.aws/) Stellen Sie sicher, dass Sie eine auswählen, die für die CPU-Architektur und gegebenenfalls für die GPU, die Sie verwenden möchten, geeignet ist.

## (Optional) Ein modifiziertes Container-Einstiegspunkt-Skript
<a name="modified-container-entry-point"></a>

**Anmerkung**  
Wenn Sie einem vorgefertigten Braket-Image nur zusätzliche Software hinzufügen, können Sie diesen Abschnitt überspringen.

Um Nicht-Python-Code als Teil Ihres Hybrid-Jobs auszuführen, ändern Sie das Python-Skript, das den Container-Einstiegspunkt definiert. Zum Beispiel das [`braket_container.py` Python-Skript auf dem Amazon Braket Github. ](https://github.com/amazon-braket/amazon-braket-containers/blob/main/src/braket_container.py) Dies ist das Skript, das die von Braket vorgefertigten Images verwenden, um Ihr Algorithmus-Skript zu starten und die entsprechenden Umgebungsvariablen festzulegen. Das Container-Einstiegspunkt-Skript selbst ** muss in Python ** sein, kann aber Nicht-Python-Skripte starten. Im vorgefertigten Beispiel können Sie sehen, dass Python-Algorithmus-Skripte entweder als [ Python-Unterprozess ](https://github.com/amazon-braket/amazon-braket-containers/blob/main/src/braket_container.py#L274) oder als [ vollständig neuer Prozess gestartet werden. ](https://github.com/amazon-braket/amazon-braket-containers/blob/main/src/braket_container.py#L257) Indem Sie diese Logik ändern, können Sie das Entry Point-Skript aktivieren, um Algorithmus-Skripte zu starten, die keine Python-Algorithmen sind. Sie könnten beispielsweise die [`thekick_off_customer_script()`](https://github.com/amazon-braket/amazon-braket-containers/blob/main/src/braket_container.py#L139) Funktion so ändern, dass Rust-Prozesse abhängig von der Dateiendung gestartet werden.

Sie können sich auch dafür entscheiden, ein komplett neues zu schreiben`braket_container.py`. Es sollte Eingabedaten, Quellarchive und andere notwendige Dateien von Amazon S3 in den Container kopieren und die entsprechenden Umgebungsvariablen definieren.

## Installieren Sie die benötigte Software und das Container-Skript mit `Dockerfile`
<a name="install-docketfile"></a>

**Anmerkung**  
Wenn Sie ein vorgefertigtes Braket-Image als Docker Basisimage verwenden, ist das Container-Skript bereits vorhanden.

Wenn Sie im vorherigen Schritt ein modifiziertes Container-Skript erstellt haben, müssen Sie es in den Container kopieren ** und die Umgebungsvariable `SAGEMAKER_PROGRAM` oder den Namen Ihres neuen Container-Einstiegspunkt-Skripts ** definieren. `braket_container.py`

Das Folgende ist ein Beispiel für ein`Dockerfile`, mit dem Sie Julia auf GPU-accelerated Jobs-Instanzen verwenden können:

```
FROM nvidia/cuda:12.2.0-devel-ubuntu22.04

    
 ARG DEBIAN_FRONTEND=noninteractive
 ARG JULIA_RELEASE=1.8
 ARG JULIA_VERSION=1.8.3


 ARG PYTHON=python3.11 
 ARG PYTHON_PIP=python3-pip
 ARG PIP=pip


 ARG JULIA_URL = https://julialang-s3.julialang.org/bin/linux/x64/${JULIA_RELEASE}/
 ARG TAR_NAME = julia-${JULIA_VERSION}-linux-x86_64.tar.gz


 ARG PYTHON_PKGS = # list your Python packages and versions here


 RUN curl -s -L ${JULIA_URL}/${TAR_NAME} | tar -C /usr/local -x -z --strip-components=1 -f -


 RUN apt-get update \

    && apt-get install -y --no-install-recommends \

    build-essential \

    tzdata \

    openssh-client \

    openssh-server \

    ca-certificates \

    curl \

    git \

    libtemplate-perl \

    libssl1.1 \

    openssl \

    unzip \ 

    wget \

    zlib1g-dev \

    ${PYTHON_PIP} \

    ${PYTHON}-dev \




 RUN ${PIP} install --no-cache --upgrade ${PYTHON_PKGS}


 RUN ${PIP} install --no-cache --upgrade sagemaker-training==4.1.3


 # Add EFA and SMDDP to LD library path
 ENV LD_LIBRARY_PATH="/opt/conda/lib/python${PYTHON_SHORT_VERSION}/site-packages/smdistributed/dataparallel/lib:$LD_LIBRARY_PATH"
 ENV LD_LIBRARY_PATH=/opt/amazon/efa/lib/:$LD_LIBRARY_PATH


 # Julia specific installation instructions
 COPY Project.toml /usr/local/share/julia/environments/v${JULIA_RELEASE}/
 RUN JULIA_DEPOT_PATH=/usr/local/share/julia \

    julia -e 'using Pkg; Pkg.instantiate(); Pkg.API.precompile()'
 # generate the device runtime library for all known and supported devices
 RUN JULIA_DEPOT_PATH=/usr/local/share/julia \

    julia -e 'using CUDA; CUDA.precompile_runtime()'


 # Open source compliance scripts
 RUN HOME_DIR=/root \

 && curl -o ${HOME_DIR}/oss_compliance.zip https://aws-dlinfra-utilities.s3.amazonaws.com/oss_compliance.zip \

 && unzip ${HOME_DIR}/oss_compliance.zip -d ${HOME_DIR}/ \

 && cp ${HOME_DIR}/oss_compliance/test/testOSSCompliance /usr/local/bin/testOSSCompliance \

 && chmod +x /usr/local/bin/testOSSCompliance \

 && chmod +x ${HOME_DIR}/oss_compliance/generate_oss_compliance.sh \

 && ${HOME_DIR}/oss_compliance/generate_oss_compliance.sh ${HOME_DIR} ${PYTHON} \

 && rm -rf ${HOME_DIR}/oss_compliance*


 # Copying the container entry point script
 COPY braket_container.py /opt/ml/code/braket_container.py
 ENV SAGEMAKER_PROGRAM braket_container.py
```

In diesem Beispiel werden von bereitgestellte Skripts heruntergeladen und ausgeführt AWS , um die Einhaltung aller relevanten Open-Source Lizenzen sicherzustellen. Zum Beispiel, indem jeder installierte Code, der von einem MIT license gesteuert wird, korrekt zugewiesen wird.

Wenn Sie nicht öffentlichen Code einbeziehen müssen, z. B. Code, der in einem privaten Bereich GitHub oder einem GitLab Repository gehostet wird, ** betten ** Sie keine SSH-Schlüssel in das Docker Image ein, um darauf zuzugreifen. Verwenden Sie stattdessen Docker Compose beim Erstellen, um den Zugriff auf SSH auf dem Host-Computer Docker zu ermöglichen, auf dem es gebaut ist. Weitere Informationen finden Sie im Handbuch [ Sicheres Verwenden von SSH-Schlüsseln in Docker für den Zugriff auf private Github-Repositorys](https://www.fastruby.io/blog/docker/docker-ssh-keys.html).

**Dein Bild erstellen und hochladen Docker **

Wenn Sie ein korrekt definiertes haben`Dockerfile`, können Sie nun die Schritte zur [ Erstellung eines privaten Amazon ECR-Repositorys ausführen](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html), falls noch keines vorhanden ist. Sie können Ihr Container-Image auch erstellen, kennzeichnen und in das Repository hochladen.

Sie sind bereit, das Image zu erstellen, zu taggen und zu übertragen. Eine vollständige Erläuterung der Optionen `docker build` und einige Beispiele finden Sie in der [ Docker-Build-Dokumentation](https://docs.docker.com/reference/cli/docker/buildx/build/).

Für die oben definierte Beispieldatei könnten Sie Folgendes ausführen:

```
aws ecr get-login-password --region ${your_region} | docker login --username AWS --password-stdin ${aws_account_id}.dkr.ecr.${your_region}.amazonaws.com
 docker build -t braket-julia .
 docker tag braket-julia:latest ${aws_account_id}.dkr.ecr.${your_region}.amazonaws.com/braket-julia:latest
 docker push ${aws_account_id}.dkr.ecr.${your_region}.amazonaws.com/braket-julia:latest
```

**Zuweisen der entsprechenden Amazon ECR-Berechtigungen **

Braket Hybrid Jobs DockerBilder müssen in privaten Amazon ECR-Repositorys gehostet werden. Standardmäßig gewährt ein privates Amazon ECR-Repo ** keinen Lesezugriff ** für den Benutzer Braket Hybrid Jobs IAM role oder für andere Benutzer, die Ihr Bild verwenden möchten, z. B. für Mitarbeiter oder Schüler. Sie müssen eine Repository-Richtlinie [ festlegen](https://docs.aws.amazon.com/AmazonECR/latest/userguide/set-repository-policy.html), um die entsprechenden Berechtigungen zu gewähren. Erteilen Sie im Allgemeinen nur den spezifischen Benutzern und IAM Rollen, von denen Sie möchten, die Erlaubnis, auf Ihre Bilder zuzugreifen, anstatt anderen Benutzern und Rollen image URI zu erlauben, sie abzurufen.