Rezept für das Mitbringen eines eigenen Containers - Amazon Braket

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 eines eigenen Containers

In diesem Abschnitt finden Sie eine step-by-step Anleitung dazu, was Sie benötigen bring your own container (BYOC) zu Braket Hybrid Jobs — die Skripte, Dateien und Schritte, um sie zu kombinieren, damit Sie mit Ihrem benutzerdefinierten Job loslegen können Docker Bilder. Wir bieten Rezepte für zwei häufige Fälle:

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

  2. Verwenden Sie Algorithmusskripte, die in einer anderen Sprache als Python geschrieben wurden, 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 Art von EC2 Amazon-Instances und führt dann den Docker Bild, das in der URI Bildeingabe für die Auftragserstellung auf ihnen angegeben wurde. Wenn Sie die BYOC Funktion verwenden, geben Sie ein Bild an, das in einem privaten ECR Amazon-Repository URI gehostet wird und auf das Sie Lesezugriff haben. Braket Hybrid Jobs verwendet dieses benutzerdefinierte Image, um den Job auszuführen.

Die spezifischen Komponenten, die Sie zum Erstellen eines benötigen Docker Image, das mit Hybrid-Jobs verwendet werden kann. Wenn Sie mit Schreiben und Erstellen nicht vertraut sindDockerfiles, empfehlen wir Ihnen, die Dockerfile-Dokumentation und die Amazon ECR CLI Dokumentation nach Bedarf, während Sie diese Anweisungen lesen.

Ein Basis-Image für Ihr Dockerfile

Wenn Sie Python verwenden und Software zusätzlich zu dem installieren möchten, was in den von Braket bereitgestellten Containern bereitgestellt wird, ist eine Option für ein Basis-Image eines der Braket-Container-Images, die in unserem GitHub Repo und bei Amazon gehostet werden. ECR Sie müssen sich bei Amazon authentifizieren ECR, um das Image abzurufen und darauf aufzubauen. Zum Beispiel die erste Zeile Ihres BYOC Docker Datei könnte sein: 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 einzubeziehen.

Wenn Sie eine Nicht-Python-Sprache wie C++, Rust oder Julia verwenden möchten, oder wenn Sie ein Image für eine CPU Nicht-x86-Architektur erstellen möchtenARM, müssen Sie möglicherweise auf einem öffentlichen Barebone-Image aufbauen. Viele solcher Bilder finden Sie in der Amazon Elastic Container Registry Public Gallery. Stellen Sie sicher, dass Sie eines auswählen, das für die CPU Architektur und gegebenenfalls für die Architektur, die GPU Sie verwenden möchten, geeignet ist.

(Optional) Ein modifiziertes Container-Einstiegspunktskript

Anmerkung

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

Um Nicht-Python-Code als Teil Ihres Hybrid-Jobs auszuführen, müssen Sie das Python-Skript ändern, das den Container-Einstiegspunkt definiert. Zum Beispiel das braket_container.pyPython-Skript auf dem Amazon Braket Github. Dies ist das Skript, das die von Braket vorgefertigten Images verwenden, um Ihr Algorithmus-Skript zu starten und die entsprechenden Umgebungsvariablen festzulegen. Das Container-Einstiegspunktskript selbst muss in Python sein, kann aber Nicht-Python-Skripte starten. In dem vorgefertigten Beispiel können Sie sehen, dass Python-Algorithmus-Skripts entweder als Python-Unterprozess oder als vollständig neuer Prozess gestartet werden. Indem Sie diese Logik ändern, können Sie das Einstiegspunktskript aktivieren, um Skripten zu starten, die keine Python-Algorithmen sind. Sie könnten beispielsweise die thekick_off_customer_script()Funktion so ändern, dass sie Rust-Prozesse in Abhängigkeit von der Dateinamenerweiterung startet.

Sie können sich auch dafür entscheiden, eine komplett neue zu schreibenbraket_container.py. Es sollte Eingabedaten, Quellarchive und andere notwendige Dateien aus Amazon S3 in den Container kopieren und die entsprechenden Umgebungsvariablen definieren.

Installieren Sie die benötigte Software und das Container-Skript mit Dockerfile

Anmerkung

Wenn Sie ein vorgefertigtes Braket-Image als Ihr Docker Basis-Image, das Container-Skript ist bereits vorhanden.

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

Im Folgenden finden Sie ein Beispiel für eineDockerfile, mit der Sie Julia auf GPU -beschleunigten 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 Skripte heruntergeladen und ausgeführt, die von bereitgestellt werden AWS , um die Einhaltung aller relevanten Open-Source-Lizenzen sicherzustellen. Zum Beispiel durch die korrekte Zuweisung von installiertem Code, der von einem MIT license.

Wenn Sie nicht-öffentlichen Code einbeziehen müssen, z. B. Code, der in einem privaten GitLab Speicher GitHub oder einem Repository gehostet wird, betten Sie keine SSH Schlüssel in Docker Bild, um darauf zuzugreifen. Verwenden Sie stattdessen Docker Compose wenn Sie bauen, um es zuzulassen Docker um SSH auf den Host-Computer zuzugreifen, auf dem er aufgebaut ist. Weitere Informationen finden Sie im Leitfaden Sichere Verwendung von SSH Schlüsseln in Docker für den Zugriff auf private Github-Repositorys.

Aufbau und Upload Ihres Docker Bild

Mit einem richtig definierten sind Sie nun bereitDockerfile, die Schritte zum Erstellen eines privaten ECR Amazon-Repositorys zu befolgen, falls noch keines vorhanden ist. Sie können Ihr Container-Image auch erstellen, taggen und in das Repository hochladen.

Sie sind bereit, das Image zu erstellen, zu taggen und zu pushen. Eine vollständige Erklärung der Optionen docker build und einige Beispiele finden Sie in der Docker-Build-Dokumentation.

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 geeigneter Amazon-Berechtigungen ECR

Braket Hybrid Jobs Docker Bilder müssen in privaten ECR Amazon-Repositorys gehostet werden. Standardmäßig bietet ein privates ECR Amazon-Repo keinen Lesezugriff auf 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, um die entsprechenden Berechtigungen zu gewähren. Im Allgemeinen sollten Sie nur diesen bestimmten Benutzern die Erlaubnis erteilen und IAM Rollen, für die Sie Zugriff auf Ihre Bilder haben möchten, anstatt es jemandem zu ermöglichen, der image URI um sie zu ziehen.