Direkt zum Inhalt

Wie behebe ich Probleme, wenn ich meinen benutzerdefinierten Container zu Trainings- oder Inferenzzwecken zu SageMaker bringe?

Lesedauer: 4 Minute
0

Ich möchte Probleme beheben, wenn ich meinen benutzerdefinierten Container zu Trainings- oder Inferenzzwecken zu Amazon SageMaker bringe.

Kurzbeschreibung

Passe die Container-Images in SageMaker mithilfe eines der folgenden Ansätze an:

  • Erweitere einen vorgefertigten SageMaker-Container.
  • Bringe deinen eigenen Container mit.
  • Erstelle ein Container-Image von Grund auf.

Bei diesen Ansätzen erhältst du Fehlermeldungen im Zusammenhang mit dem falschen Build des Container-Images. Stelle sicher, dass du den Container richtig konfigurierst.

Lösung

Einen vorgefertigten SageMaker-Container erweitern

Verwende diesen Ansatz, um die Umgebung oder das Framework anzupassen, indem du zusätzliche Funktionen hinzufügst. Bei diesem Ansatz erstellst du das Container-Image nicht von Grund auf, da die Deep-Learning-Bibliotheken vordefiniert sind.

Stelle sicher, dass die Umgebungsvariablen SAGEMAKER_SUBMIT_DIRECTORY and SAGEMAKER_PROGRAM im Dockerfile festgelegt sind. Installiere dann die erforderlichen zusätzlichen Bibliotheken im Dockerfile.

Führe die folgenden Befehle aus, um die erforderlichen zusätzlichen Bibliotheken zu installieren:

# SageMaker PyTorch imageFROM 763104351884.dkr.ecr.us-east-1.amazonaws.com/pytorch-training:1.5.1-cpu-py36-ubuntu16.04
ENV PATH="/opt/ml/code:${PATH}"

# this environment variable is used by the SageMaker PyTorch container to determine our user code directory.
ENV SAGEMAKER_SUBMIT_DIRECTORY /opt/ml/code

# install the libraries using pip
COPY requirements.txt./requirements.txt
RUN pip install requirements.txt

# /opt/ml and all subdirectories are utilized by SageMaker, use the /code subdirectory to store your user code.
COPY cifar10.py /opt/ml/code/cifar10.py
# Defines cifar10.py as script
entrypoint
ENV SAGEMAKER_PROGRAM cifar10.py

Nachdem das Image erfolgreich erstellt wurde, führe den Container im lokalen Modus aus. Stelle sicher, dass das Image wie erwartet funktioniert.

Weitere Informationen findest du unter Einen vorgefertigten Container erweitern.

Den eigenen Container mitbringen

Verwende diesen Ansatz, wenn du ein Image für die Verarbeitung von Daten, für Modelltraining oder Echtzeit-Inferenz mit Funktionen und Sicherheitsanforderungen hast, die vorgefertigte SageMaker-Images nicht unterstützen.

Stelle sicher, dass du die entsprechenden SageMaker-Toolkit-Bibliotheken für Trainings- oder Inferenzzwecke installiert hast. Diese Toolkits definieren den Speicherort für Code und andere Ressourcen. Du definierst auch den Einstiegspunkt, der den Code enthält, der ausgeführt werden soll, wenn der Container gestartet wird. Wenn du einen SageMaker-Trainingsjob oder einen Inferenzendpunkt erstellst, erstellt SageMaker die folgenden Verzeichnisse:

/opt/ml  
    ├── input
    │
    ├── model
    │
    ├── code
    │
    ├── output
    │
    └── failure

Wenn du einen Trainingsjob ausführst, enthält das Verzeichnis /opt/ml/input Informationen über den Datenkanal, der für den Zugriff auf die in Amazon Simple Storage Service (Amazon S3) gespeicherten Daten verwendet wird. Das Trainingsskript (train.py) wird zusammen mit seinen Abhängigkeiten in opt/ml/code gespeichert. Stelle sicher, dass das Skript das endgültige Modell nach Abschluss des Trainingsjobs in das Verzeichnis /opt/ml/model schreibt.

Wenn du ein trainiertes Modell auf SageMaker hostest, um Rückschlüsse zu ziehen, wird das Modell in /opt/ml/model gespeichert. Der Inferenzcode (inference.py) ist in /opt/ml/code gespeichert.

Weitere Informationen findest du unter Anpassen deines eigenen Docker-Containers für die Arbeit mit SageMaker.

Einen Container von Grund auf erstellen

Wenn du einen benutzerdefinierten Algorithmus und kein benutzerdefiniertes Container-Image hast, empfiehlt es sich, diesen Ansatz zu verwenden.

Um sicherzustellen, dass der Container als ausführbare Datei ausgeführt wird, verwende die exec-Form der ENTRYPOINT-Anleitung in deinem Dockerfile:

ENTRYPOINT ["python", "cifar10.py"]

Wenn der Trainingsjob erfolgreich ist, muss das Trainingsskript mit 0 beendet werden. Wenn das Training nicht erfolgreich ist, muss es einen Exit-Code ungleich Null haben.

Vergewissere dich, dass das endgültige Modell in /opt/ml/model geschrieben ist und dass alle Abhängigkeiten und Artefakte in /opt/ml/output gespeichert sind. Wenn ein Trainingsjob fehlschlägt, muss das Skript die Fehlerinformationen in /opt/ml/output/failure schreiben.

Wenn du einen Inferenzendpunkt erstellst, speichere das Modell im Format FILENAME.tar.gz. Der Container muss eine HTTP POST-Anforderung auf /invocations für die Inferenz und eine HTTP GET-Anforderung auf /ping für die Endpunktzustandsprüfung implementieren. Weitere Informationen findest du unter Erstellen eines Containers mit deinen eigenen Algorithmen und Modellen.

Ähnliche Informationen

Verwendung des lokalen Modus von Amazon SageMaker, um auf der Notebook-Instance zu trainieren

AWS OFFICIALAktualisiert vor 2 Jahren