Fehlerbehebung

Die Ursache von Fehlern zu finden, die beim Trainieren des Modells oder Abrufen von Vorhersagen in der Cloud auftreten, kann eine Herausforderung darstellen. Auf dieser Seite wird beschrieben, wie Sie Probleme lokalisieren und beheben.

Befehlszeilentool

FEHLER: (gcloud) Ungültige Auswahl: 'ai-platform'.

Dieser Fehler bedeutet, dass Sie gcloud aktualisieren müssen. Führen Sie hierfür folgenden Befehl aus:

gcloud components update

Job-Logs

Ein guter Ausgangspunkt zur Fehlerbehebung sind die Job-Logs, die von Stackdriver Logging erfasst werden.

Logging für verschiedene Arten von Vorgängen

Welche Art von Logging stattfindet, hängt vom jeweiligen Vorgang ab, wie in den folgenden Abschnitten beschrieben.

Trainingslogs

Alle Trainingsjobs werden protokolliert. Die Logs enthalten Ereignisse aus dem Trainingsdienst und aus Ihrer Trainingsanwendung. Mit den Python-Standardbibliotheken (z. B. logging) können Sie Logging-Ereignisse in Ihre Anwendung aufnehmen. AI Platform erfasst alle Logging-Nachrichten aus Ihrer Anwendung. Alle an stderr gesendeten Nachrichten werden automatisch in Ihrem Jobeintrag in Stackdriver Logging erfasst.

Batchvorhersage-Logs

Alle Batchvorhersagejobs werden protokolliert.

Onlinevorhersage-Logs

Für Onlinevorhersageanfragen werden standardmäßig keine Logs generiert. Sie können jedoch Stackdriver Logging aktivieren, wenn Sie die Modellressource erstellen:

gcloud

Verwenden Sie das Flag --enable-logging, wenn Sie gcloud ai-platform models create ausführen.

Python

Setzen Sie onlinePredictionLogging in der Ressource Model, die Sie für Ihren Aufruf von projects.models.create verwenden, auf True.

Logs suchen

Die Job-Logs enthalten alle Ereignisse im jeweiligen Vorgang, einschließlich Ereignisse aus allen Prozessen im Cluster, sofern das Training verteilt ist. Wenn Sie einen Job für verteiltes Training ausführen, werden die Job-Logs für den Master-Worker-Prozess ausgegeben. Der erste Schritt zur Fehlerbehebung besteht normalerweise in der Durchsicht der Logs für den jeweiligen Prozess, wobei protokollierte Ereignisse für andere Prozesse im Cluster herauszufiltern sind. Die Beispiele in diesem Abschnitt veranschaulichen diese Filterung.

Sie können die Logs über die Befehlszeile oder im Stackdriver Logging-Bereich der Google Cloud Platform Console filtern. Verwenden Sie in beiden Fällen je nach Bedarf folgende Metadatenwerte in Ihrem Filter:

Metadatenelement Filter zur Anzeige von Elementen, für die Folgendes gilt:
resource.type Ist gleich "cloud_ml_job" (Cloud ML-Job).
resource.labels.job_id Entspricht Ihrem Jobnamen.
resource.labels.task_name Ist gleich "master-replica-0", um nur die Log-Einträge für den Master-Worker anzuzeigen.
severity Ist größer als oder gleich ERROR (FEHLER), um nur die Log-Einträge anzuzeigen, die Fehlerbedingungen entsprechen.

Befehlszeile

Erstellen Sie mit gcloud beta logging read eine Abfrage, die Ihren Anforderungen entspricht. Hier einige Beispiele:

In jedem Beispiel werden folgende Umgebungsvariablen verwendet:

PROJECT="my-project-name"
JOB="my_job_name"

Sie können stattdessen das Stringliteral eingeben, wenn Sie dies bevorzugen.

So geben Sie die Joblogs auf dem Bildschirm aus:
gcloud ai-platform jobs stream-logs $JOB

Hier finden Sie alle Optionen für gcloud ai-platform jobs stream-logs.

So geben Sie das Log für den Master-Worker auf dem Bildschirm aus:
gcloud beta logging read --project=${PROJECT} "resource.type=\"ml_job\" and resource.labels.job_id=${JOB} and resource.labels.task_name=\"master-replica-0\""
So geben Sie nur die für den Master-Worker protokollierten Fehler auf dem Bildschirm aus:
gcloud beta logging read --project=${PROJECT} "resource.type=\"ml_job\" and resource.labels.job_id=${JOB} and resource.labels.task_name=\"master-replica-0\" and severity>=ERROR"

Die obigen Beispiele stellen die gängigsten Filtervorgänge für Logs aus dem AI Platform-Trainingsjob dar. Stackdriver Logging bietet viele leistungsstarke Filteroptionen für den Fall, dass Sie die Suche präzisieren müssen. In der Dokumentation zur erweiterten Filterung werden diese Optionen im Detail beschrieben.

Console

  1. Öffnen Sie die AI Platform-Seite Jobs in der GCP Console.

    Seite "Jobs" in der GCP Console öffnen

  2. Wählen Sie den Job mit dem Fehler in der Liste auf der Seite Jobs aus, um die zugehörigen Details anzuzeigen.

Die AI Platform-Jobliste, die einen fehlgeschlagenen Job anzeigt.

  1. Klicken Sie auf Logs ansehen, um Stackdriver Logging zu öffnen.

Die Seite der Jobdetails für einen fehlgeschlagenen Job.

Sie können auch direkt zu Stackdriver Logging gehen, müssen dann aber noch nach Ihrem Job suchen:

  1. Maximieren Sie die Ressourcenauswahl.
  2. Maximieren Sie "AI Platform-Job" in der Ressourcenliste.
  3. Suchen Sie in der Liste der Job-IDs nach Ihrem Jobnamen. Sie können die ersten Buchstaben des Jobnamens im Suchfeld eingeben, um die angezeigten Jobs einzugrenzen.
  4. Maximieren Sie den Jobeintrag und wählen Sie master-replica-0 aus der Aufgabenliste aus.

Alle Auswahlelemente für Log-Filter maximiert.

Informationen aus den Logs ermitteln

Nachdem Sie das richtige Log für Ihren Job gefunden und auf master-replica-0 beschränkt haben, können Sie die protokollierten Ereignisse durchsehen, um die Ursache des Problems zu finden. Dazu gehen Sie wie bei einer normalen Python-Fehlerbehebung vor. Denken Sie dabei vor allem an Folgendes:

  • Ereignisse haben verschiedene Wichtigkeitsstufen. Mithilfe des Filters können Sie sich ausschließlich Ereignisse einer bestimmten Stufe anzeigen lassen, beispielsweise Fehler oder aber Fehler und Warnungen.
  • Ein Problem, das zur Beendigung des Trainers aufgrund eines nicht behebbaren Fehlers geführt hat (Rückgabecode > 0), wird als Ausnahme mit vorangegangenem Stacktrace protokolliert:

Ein Log-Eintrag ohne maximierte Abschnitte.

  • Sie können weitere Informationen abrufen, indem Sie die Objekte in der protokollierten JSON-Nachricht maximieren. Diese erkennen Sie an einem nach rechts gerichteten Pfeil und geschweiften Klammern {...}. Sie können beispielsweise jsonPayload maximieren, um den Stacktrace in einer besser lesbaren Form als in der Hauptfehlerbeschreibung abzurufen:

Ein Log-Eintrag mit maximiertem Abschnitt zur JSON-Nutzlast.

  • Manche Fehler liegen in Form von wiederholbaren Fehlern vor. Diese beinhalten normalerweise keinen Stacktrace und sind unter Umständen schwieriger zu diagnostizieren.

Logging optimal nutzen

Der AI Platform-Trainingsdienst protokolliert automatisch folgende Ereignisse:

  • Dienstinterne Statusinformationen
  • Nachrichten, die Ihre Traineranwendung an stderr sendet
  • Ausgabetext, den Ihre Traineranwendung an stdout sendet

Sie können die Fehlerbehebung in Ihrer Traineranwendung vereinfachen, indem Sie einen guten Programmierstil pflegen:

  • Senden Sie aussagekräftige Nachrichten an stderr, zum Beispiel mit "logging".
  • Lösen Sie die logischste und anschaulichste Ausnahme aus, wenn ein Vorgang fehlschlägt.
  • Fügen Sie den Ausnahmeobjekten beschreibende Strings hinzu.

In der Python-Dokumentation finden Sie weitere Informationen zu Ausnahmen.

Fehlerbehebung beim Training

In diesem Abschnitt werden Konzepte und Fehlerbedingungen in Bezug auf Trainingsjobs beschrieben.

Rückgabecodes der Trainingsanwendung

Der Trainingsjob in der Cloud wird vom Hauptprogramm gesteuert, das auf dem Master-Worker-Prozess des Trainingsclusters ausgeführt wird:

  • Wenn Sie das Training in einem einzigen Prozess (nicht verteilt) durchführen, gibt es nur einen einzigen Worker, den sogenannten Master.
  • Das Hauptprogramm ist die Funktion __main__ der TensorFlow-Trainingsanwendung.
  • Der AI Platform-Trainingsdienst führt die Traineranwendung so lange aus, bis sie erfolgreich abgeschlossen wurde oder ein nicht behebbarer Fehler auftritt. Dies bedeutet, dass er Prozesse neu starten kann, wenn wiederholbare Fehler auftreten.

Der Trainingsdienst verwaltet Ihre Prozesse. Er verfährt bei einem Programmexit, wie es der Rückgabecode Ihres Master-Worker-Prozesses vorgibt:

Rückgabecode Bedeutung AI Platform-Antwort
0 Erfolgreicher Abschluss Beendet Jobressourcen und gibt sie frei
1 - 128 Nicht behebbarer Fehler Beendet den Job und protokolliert den Fehler

Sie müssen keine besonderen Schritte in Bezug auf den Rückgabecode der Funktion __main__ ausführen. Python gibt automatisch null zurück, wenn die Ausführung erfolgreich war, und einen positiven Zahlencode, wenn eine unbehandelte Ausnahme auftritt. Wenn Sie es gewohnt sind, bestimmte Rückgabecodes für Ihre Ausnahmeobjekte festzulegen (eine gültige, aber seltene Vorgehensweise), wird Ihr AI Platform-Job dadurch nicht beeinträchtigt, solange Sie dem Muster aus der obigen Tabelle folgen. Nichtsdestotrotz weist Clientcode normalerweise nicht direkt auf wiederholbare Fehler hin. Diese kommen vom Betriebssystem.

Bestimmte Fehlerbedingungen behandeln

Dieser Abschnitt enthält Anleitungen zur Behandlung bestimmter Fehlerbedingungen, die bereits bei einigen Nutzern aufgetreten sind.

Ressource erschöpft

Die Nachfrage nach GPUs und Rechenressourcen in der Region us-central1 ist hoch. In den Joblogs wird möglicherweise folgende Fehlermeldung angezeigt: Resources are insufficient in region: <region>. Please try a different region.

Zum Beheben dieses Problems probieren Sie eine andere Region aus oder versuchen Sie es später noch einmal.

Permanente Ausführung des Trainers ohne Fortschritt

Einige Situationen können dazu führen, dass die Traineranwendung kontinuierlich ausgeführt wird, die Trainingsaufgabe jedoch keinen Fortschritt macht. Dies kann auf einen blockierenden Aufruf zurückzuführen sein, der auf eine Ressource wartet, die nie verfügbar wird. Sie können dieses Problem beheben, indem Sie ein Zeitlimitintervall im Trainer konfigurieren.

Zeitlimitintervall für Trainer konfigurieren

Sie können ein Zeitlimit in Millisekunden festlegen, entweder beim Erstellen Ihrer Sitzung oder beim Ausführen eines Schritts Ihrer Grafik:

  • Wenn Sie das Objekt Session erstellen, legen Sie das gewünschte Zeitlimitintervall mit dem Parameter config fest:

    sess = tf.Session(config=tf.ConfigProto(operation_timeout_in_ms=500))
    
  • Wenn Sie einen einzelnen Aufruf von Session.run ausführen, legen Sie das gewünschte Zeitlimitintervall mit dem Parameter options fest:

    v = session.run(fetches, options=tf.RunOptions(timeout_in_ms=500))
    

Weitere Informationen finden Sie in der TensorFlow-Dokumentation zu Session.

Programmexit mit dem Code -9

Wenn Sie immer wieder den Exitcode -9 erhalten, verbraucht die Traineranwendung unter Umständen mehr Speicher, als für ihren Prozess zugeteilt ist. Beheben Sie den Fehler, indem Sie die Speichernutzung reduzieren, Maschinentypen mit mehr Speicher verwenden oder beide Maßnahmen ergreifen.

  • Überprüfen Sie die Grafik- und Traineranwendung auf Vorgänge, die mehr Speicher als erwartet beanspruchen. Die Speichernutzung wird von der Komplexität der Daten und der Komplexität der Vorgänge in der Berechnungsgrafik beeinflusst.
  • Die Erhöhung des Speichers, der dem Job zugeordnet ist, kann Fingerspitzengefühl erfordern:
    • Wenn Sie eine definierte Skalierungsstufe verwenden, können Sie die Speicherzuordnung pro Maschine nicht erhöhen, ohne weitere Maschinen in den Cluster aufzunehmen. Sie müssen auf die Stufe CUSTOM umstellen und die Maschinentypen im Cluster selbst festlegen.
    • Die genaue Konfiguration eines jeden definierten Maschinentyps kann sich ändern, Sie können jedoch grobe Vergleiche anstellen. Auf der Seite mit den Trainingskonzepten finden Sie eine Vergleichstabelle von Maschinentypen.
    • Beim Testen von Maschinentypen zur Ermittlung der richtigen Speicherzuordnung sollten Sie eine einzelne Maschine oder einen Cluster mit reduzierter Größe verwenden, um die anfallenden Gebühren möglichst gering zu halten.

Programmexit mit dem Code -15

In der Regel weist der Exitcode -15 auf eine Wartung durch das System hin. Da es sich um einen wiederholbaren Fehler handelt, sollte Ihr Prozess automatisch neu gestartet werden.

Job mit langer Warteschlangenzeit

Wenn der Status eines Trainingsjobs über einen längeren Zeitraum QUEUED lautet, haben Sie möglicherweise Ihr Kontingent für Jobanfragen überschritten.

AI Platform startet Trainingsjobs auf Basis des Erstellungszeitpunkts der Jobs nach dem First-In-First-Out-Prinzip. Wenn Ihr Job in die Warteschlange gestellt wird, bedeutet dies in der Regel zweierlei: Entweder wurde das gesamte Projektkontingent von anderen Jobs verbraucht, die vor Ihrem Job gesendet wurden, oder der erste Job in der Warteschlange hat mehr ML-Einheiten/GPUs angefordert, als im Kontingent verfügbar sind.

Warum ein Job in die Warteschlange gestellt wurde, können Sie dem entsprechenden Eintrag in den Trainings-Logs entnehmen. Suchen Sie im Log nach Nachrichten wie der folgenden:

This job is number 2 in the queue and requires
4.000000 ML units and 0 GPUs. The project is using 4.000000 ML units out of 4
allowed and 0 GPUs out of 10 allowed.

Die Nachricht gibt über die aktuelle Position Ihres Jobs in der Warteschlange und die aktuelle Nutzung und das aktuelle Kontingent des Projekts Aufschluss.

Beachten Sie, dass der Grund nur für die ersten zehn Jobs in der Warteschlange protokolliert wird, geordnet nach dem Erstellungszeitpunkt der Jobs.

Wenn Sie regelmäßig mehr als die zugeteilte Anzahl von Anfragen benötigen, können Sie eine Kontingenterhöhung anfordern. Wenden Sie sich hierfür an den Support, wenn Sie ein Premium-Supportpaket erworben haben. Andernfalls können Sie Ihre Anfrage per E-Mail an AI Platform-Feedback senden.

Kontingent wurde überschritten

Wenn Sie einen Fehler mit einem Wortlaut wie "Kontingentfehler für Projektnummer: ..." erhalten, haben Sie unter Umständen eines Ihrer Ressourcenkontingente überschritten. Mit dem API Manager der Console können Sie Ihren Ressourcenverbrauch überwachen und auf der Seite mit den AI Platform-Kontingenten eine Erhöhung anfordern.

Ungültiger Speicherpfad

Wenn Ihr Job mit einer Fehlermeldung wie "Wiederherstellung mit ungültigem Speicherpfad gs://... aufgerufen" beendet wird, verwenden Sie möglicherweise einen falsch konfigurierten Google Cloud Storage-Bucket.

  1. Öffnen Sie in der GCP Console den Cloud Storage-Browser.

    Browser in der GCP Console öffnen

  2. Sehen Sie unter Standard-Storage-Klasse nach, welchen Bucket Sie verwenden:

Zwei Google Cloud Platform-Buckets, einer ist verschiedenen nicht unterstützten Regionen zugewiesen, der andere einer Region

  • Er sollte Regional lauten. Wenn dies der Fall ist, muss ein anderer Fehler vorliegen. Versuchen Sie, den Job noch einmal auszuführen.
  • Wenn er Multiregional lautet, müssen Sie ihn entweder in Regional ändern oder Ihre Trainingsmaterialien in einen anderen Bucket verschieben. Zur ersten Variante finden Sie in der Cloud Storage-Dokumentation eine Anleitung zum Ändern der Storage-Klasse eines Buckets.

Trainerexits mit AbortedError

Dieser Fehler kann auftreten, wenn Sie einen Trainer ausführen, der verteilte Jobs mit TensorFlow Supervisor verwaltet. Es kann gelegentlich vorkommen, dass TensorFlow Ausnahmen auslöst, obwohl der gesamte Job an dieser Stelle nicht gestoppt werden sollte. Sie können diese Ausnahme im Trainer abfangen und entsprechend reagieren. Beachten Sie, dass TensorFlow Supervisor in Trainern, die mit AI Platform ausgeführt werden, nicht unterstützt wird.

Fehlerbehebung bei Vorhersagen

In diesem Abschnitt werden einige gängige Probleme zusammengefasst, die in Zusammenhang mit Vorhersagen auftreten können.

Bestimmte Bedingungen bei Onlinevorhersagen behandeln

Dieser Abschnitt enthält Anleitungen zur Behandlung bestimmter Fehlerbedingungen bei Onlinevorhersagen, die bereits bei einigen Nutzern aufgetreten sind.

Zu lange Ausführungszeit von Vorhersagen (30 bis 180 Sekunden)

Die häufigste Ursache für langsame Onlinevorhersagen ist die Hochskalierung von Verarbeitungsknoten von null aufwärts. Wenn regelmäßig Vorhersageanfragen an Ihr Modell gehen, hält das System einen oder mehrere Knoten bereit, um Vorhersagen durchzuführen. Sollte Ihr Modell lange Zeit keine Vorhersagen geliefert haben, skaliert der Dienst die in Bereitschaft stehenden Knoten auf null herunter. Die nächste Vorhersageanfrage nach einer solchen Abwärtsskalierung dauert wesentlich länger als normalerweise, da der Dienst Knoten zur Verarbeitung abstellen muss.

HTTP-Statuscodes

Wenn bei einer Onlinevorhersageanfrage ein Fehler auftritt, gibt der Dienst normalerweise einen HTTP-Statuscode zurück. Im Folgenden sind einige gängige Codes und deren Bedeutung in Zusammenhang mit Onlinevorhersagen aufgeführt:

429 – Nicht genügend Arbeitsspeicher

Dem Verarbeitungsknoten stand beim Ausführen des Modells nicht genügend Speicher zur Verfügung. Es gibt keine Möglichkeit, den für Vorhersageknoten zugeteilten Speicher zu diesem Zeitpunkt zu erhöhen. Sie können aber Folgendes probieren, um das Modell doch noch auszuführen:

  • Sie verringern die Modellgröße, wenn Sie:
    • weniger genaue Variablen verwenden,
    • die kontinuierlichen Daten quantisieren und
    • die Größe von anderen Eingabemerkmalen reduzieren (beispielsweise die Vokabulargröße).
    • Senden Sie die Anfrage noch einmal mit einem kleineren Batch von Instanzen.
429 – Zu viele ausstehende Anfragen

Ihr Modell erhält mehr Anfragen, als es verarbeiten kann. Wenn Sie die automatische Skalierung verwenden, gehen Anfragen schneller ein, als das System Ressourcen hochskalieren kann.

Bei Verwendung der automatischen Skalierung können Sie versuchen, Anfragen mit exponentiellem Backoff noch einmal zu senden. Auf diese Weise wird dem System Zeit gegeben, um die Anpassung vorzunehmen.

429 – Kontingent

Ihr Google Cloud Platform-Projekt ist auf 10.000 Anfragen pro 100 Sekunden (etwa 100 pro Sekunde) beschränkt. Wenn Sie diesen Fehler bei temporären Spitzen erhalten, können Sie oft mit einem exponentiellen Backoff die rechtzeitige Verarbeitung aller Anfragen erreichen. Wenn Sie diesen Code immer wieder erhalten, können Sie eine Kontingenterhöhung anfordern. Weitere Informationen finden Sie auf der Seite zu den Kontingenten.

503 – Unsere Systeme haben ungewöhnlichen Traffic aus Ihrem Computernetzwerk festgestellt.

Die Anzahl der Anfragen, die Ihr Modell von einer einzigen IP-Adresse erhalten hat, ist so hoch, dass das System einen Denial-of-Service-Angriff vermutet. Senden Sie eine Minute lang keine Anfragen mehr und nehmen Sie das Senden dann mit einem geringeren Tempo wieder auf.

500 – Modell konnte nicht geladen werden.

Das System hat mit dem Laden Ihres Modells Probleme. Versuchen Sie Folgendes:

  • Sorgen Sie dafür, dass der Trainer das richtige Modell exportiert.
  • Führen Sie mit dem Befehl gcloud ai-platform local predict eine Testvorhersage aus.
  • Exportieren Sie Ihr Modell noch einmal und starten Sie einen neuen Versuch.

Formatierungsfehler bei Vorhersageanfragen

Alle der folgenden Nachrichten stehen in Zusammenhang mit der Eingabe für die Vorhersage.

"Leerer oder fehlerhafter/ungültiger JSON-Anfragetext"
Der Dienst konnte das JSON-Objekt in Ihrer Anfrage nicht parsen oder die Anfrage ist leer. Überprüfen Sie Ihre Nachricht auf Fehler oder Auslassungen, die das JSON-Objekt ungültig machen.
"Feld "instances" fehlt im Anfragetext"
Ihr Anfragetext ist falsch formatiert. Es sollte ein JSON-Objekt mit einem einzigen Schlüssel namens "instances" sein, der eine Liste aller Eingabeinstanzen enthält.
JSON-Codierungsfehler beim Erstellen einer Anfrage

Ihre Anfrage enthält base64-codierte Daten, jedoch im falschen JSON-Format. Jeder base64-codierte String muss durch ein Objekt mit einem einzigen Schlüssel namens "b64" dargestellt werden. Beispiel:

  {"b64": "an_encoded_string"}

Ein weiterer base64-Fehler tritt auf, wenn Binärdaten vorliegen, die nicht base64-codiert sind. So kodieren und formatieren Sie Ihre Daten:

  {"b64": base64.b64encode(binary_data)}

Weitere Informationen finden Sie unter Binärdaten formatieren und kodieren.

Längere Ausführungszeit der Vorhersage in der Cloud als auf dem Desktop

Die Onlinevorhersage ist ein skalierbarer Dienst, der eine große Menge an Vorhersageanfragen schnell verarbeiten soll. Der Dienst ist darauf ausgelegt, eine optimale Gesamtleistung für alle laufenden Anfragen zu bieten. Da die Betonung auf Skalierbarkeit liegt, sind die Leistungsmerkmale anders als beim Generieren einer kleinen Anzahl von Vorhersagen auf lokalen Rechnern.

Weitere Informationen

Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...

AI Platform für TensorFlow