Warum wechselt mein Amazon-SageMaker-Endpunkt in den Status „Fehlgeschlagen“, wenn ich einen Endpunkt erstelle oder aktualisiere?

Letzte Aktualisierung: 21.11.2022

Ich möchte herausfinden, warum die Erstellung oder Aktualisierung meines Amazon-SageMaker-Endpunkts fehlgeschlagen ist.

Lösung

Wenn die Erstellung oder Aktualisierung Ihres SageMaker-Endpunkts fehlschlägt, gibt SageMaker den Grund für den Fehler an. Verwenden Sie eine der folgenden Optionen, um diesen Grund zu überprüfen:

  • Überprüfen Sie den Endpunkt in der SageMaker-Konsole. Der Grund für den Fehler wird in der Konsole gemeldet.
  • Führen Sie den Befehl describe-endpoint für die AWS Command Line Interface (AWS CLI) aus. Überprüfen Sie das Feld FailureReason, um den Grund für den Fehler zu ermitteln.

Hinweis: Wenn Sie beim Ausführen von AWS-CLI-Befehlen Fehler erhalten, stellen Sie sicher, dass Sie die neueste Version des AWS CLI verwenden.

Im Folgenden sind einige der Fehlergründe und deren Lösungsmethoden aufgeführt.

Die angeforderte ML-Rechenkapazität konnte aufgrund des Fehlers InsufficientInstanceCapacity nicht bereitgestellt werden

Möglicherweise wird der folgende Fehler angezeigt, wenn Sie versuchen, einen Endpunkt zu erstellen:

Unable to provision requested ML compute capacity due to InsufficientInstanceCapacity error

Dieser Fehler tritt auf, wenn AWS nicht über genügend Kapazität verfügt, um die für Ihren Endpunkt angeforderten Instances bereitzustellen.

Sie können diesen Fehler beheben, indem Sie einen oder mehrere der folgenden Ansätze ausprobieren:

  • Warten Sie einige Minuten und versuchen Sie es erneut, da sich die Kapazität häufig ändern kann.
  • Wenn Sie mehrere Instances für Ihren Endpunkt verwenden, versuchen Sie, den Endpunkt mit einer kleineren Anzahl von Instances zu erstellen. Wenn Sie Auto Scaling konfiguriert haben, kann SageMaker je nach Bedarf und je nach Kapazität nach oben oder unten skalieren.
  • Probieren Sie einen anderen Instance-Typ aus, der Ihren Workload unterstützt. Nachdem Sie einen Endpunkt erstellt haben, aktualisieren Sie ihn mit dem gewünschten Instancetyp. Da SageMaker eine Blau/Grün-Bereitstellungsmethode verwendet, um die Verfügbarkeit zu maximieren, können Sie zu einem neuen Instance-Typ wechseln, ohne Ihre aktuellen Produktionsworkloads zu beeinträchtigen.

Der Container für die Produktionsvariante <variant> hat die Ping-Zustandsprüfung nicht bestanden. Bitte überprüfen Sie die CloudWatch-Protokolle für diesen Endpunkt.

Container, die für SageMaker-Endpunkte verwendet werden, müssen einen Webserver implementieren, der auf die /invocations- und /ping-Endpunkte reagiert. Wenn Sie einen Endpunkt erstellen, beginnt SageMaker, nach dem Start des Containers regelmäßig GET-Anfragen an den /ping-Endpunkt zu senden.

Ein Container muss mindestens mit einem Statuscode HTTP 200 OK und einem leeren Text antworten, um anzuzeigen, dass der Container bereit ist, Inferenzanfragen zu akzeptieren. Dieser Fehler tritt auf, wenn SageMaker innerhalb von vier Minuten nach dem Start des Containers keine konsistenten Antworten vom Container erhält. SageMaker geht nicht davon aus, dass der Endpunkt fehlerfrei ist, da der Endpunkt nicht auf die Zustandsprüfung reagiert. Daher ist der Endpunkt als Fehlgeschlagen markiert.

Die Zustandsprüfung schlägt möglicherweise auch fehl, wenn Sie eines der AWS-Deep-Learning-Container-Images verwenden. Diese Images verwenden entweder TorchServe oder Multi Model Server, um die Modelle bereitzustellen, die die HTTP-Endpunkte für Inferenz- und Zustandsprüfungen implementieren. Diese Frameworks überprüfen, ob das Modell geladen ist, bevor sie auf SageMaker mit einer Antwort 200 OK antworten. Wenn der Server nicht feststellen kann, dass das Modell geladen ist, schlägt die Zustandsprüfung fehl. Ein Modell wird möglicherweise aus vielen Gründen nicht geladen, einschließlich Speichernutzung. Die entsprechenden Fehlermeldungen werden in den Amazon-CloudWatch-Protokollen für den Endpunkt angemeldet. Wenn der in den Endpunkt geladene Code den Fehler verursacht hat (z. B. model_fn für PyTorch), werden die Fehler bei AWS CloudTrail angemeldet. Um die Ausführlichkeit dieser Protokolle zu erhöhen, aktualisieren Sie die Umgebungsvariable SAGEMAKER_CONTAINER_LOG_LEVEL für das Modell mit den Log-Levels für die Python-Protokollierung.

Eine Anfrage zur Zustandsprüfung muss innerhalb von zwei Sekunden beantwortet werden, um erfolgreich zu sein. Stellen Sie sicher, dass Sie die Antwort testen, indem Sie Ihren Modellcontainer lokal starten und eine GET-Anfrage an den Container senden, um die Antwort zu überprüfen.

Das Modelldatenarchiv für den Container konnte nicht extrahiert werden

SageMaker erwartet eine TAR-Datei mit den Modelldaten zur Verwendung in Ihrem Endpunkt. Nachdem SageMaker die TAR-Datei heruntergeladen hat, wird das Datenarchiv extrahiert. Dieser Fehler kann auftreten, wenn SageMaker dieses Datenarchiv nicht extrahieren kann. Beispielsweise kann SageMaker das Datenarchiv nicht extrahieren, wenn das Modellartefakt symbolische Links für Dateien enthält, die sich in der TAR-Datei befinden.

Wenn Sie einen Endpunkt erstellen, stellen Sie sicher, dass die Modellartefakte keine symbolischen Links in der TAR-Datei enthalten. Um zu überprüfen, ob die TAR-Datei symbolische Links enthält, extrahieren Sie die Modelldaten und führen Sie dann den folgenden Befehl innerhalb der Artefakte aus:

find . -type l -ls

Dieser Befehl gibt alle symbolischen Links zurück, die nach dem Durchsuchen des aktuellen Verzeichnisses und eines seiner Unterverzeichnisse gefunden wurden. Ersetzen Sie jeden zurückgegebenen Link durch die tatsächlichen Kopien der Datei.

CannotStartContainerError

Dieser Fehler tritt auf, wenn SageMaker den Container nicht starten kann, um den Container für die Inferenz vorzubereiten.

Wenn SageMaker den Endpunkt startet, wird Ihr Container mit dem folgenden Befehl gestartet:

docker run <image-id> serve

Wenn dieser Befehl ausgeführt wird, muss Ihr Container den Serving-Vorgang starten.

Verwenden Sie den lokalen Modus für das SageMaker Python SDK, um diesen Fehler zu beheben. Oder versuchen Sie, Ihr Inferenzbild mit dem Befehl docker run auszuführen. Das SageMaker Python SDK lädt Ihr Modell ähnlich wie ein SageMaker-Endpunkt. Docker lädt das Modell jedoch nicht, es sei denn, Sie konfigurieren den Befehl oder den Container dafür. Sie können einen Befehl ähnlich dem folgenden verwenden, um Ihr Modell lokal zu laden:

docker run -v $(pwd)/test_dir:/opt/ml -p 8080:8080 --rm ${image} serve

War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?