Wartungsereignisse mit Cloud TPU Pods verwalten

Überblick

TPU-Knoten und TPU-VMs sind Instanzen von Compute Engine-VMs mit angehängter TPU-Hardware. Compute Engine-VMs unterliegen den VM-Wartungsereignissen der Compute Engine. Jede TPU ist mit einer Compute Engine-VM verbunden. Daher erhöht die Verwendung von mehr TPUs (z. B. in einem TPU-Pod) die Wahrscheinlichkeit, dass auf einer Ihrer VMs ein Wartungsereignis auftritt.

In diesem Dokument werden verschiedene Ansätze zur Verarbeitung von Wartungsereignissen für lang andauernde Trainingsjobs auf Cloud TPUs erläutert.

Prüfpunkte für eine schnelle Wiederherstellung nach Wartungsereignissen verwenden

Prüfpunkte sind der Schlüssel zu kurzen Wiederherstellungen nach Wartungsereignissen und sollten häufig gespeichert werden. Als Faustregel gilt, dass Prüfpunkte etwa stündlich gespeichert werden. Prüfpunkte nicht oft genug zu speichern birgt das Risiko, dass viele Trainingsfortschritte aufgrund von Wartungsereignissen oder anderen Trainingsunterbrechungen verloren gehen.

Prüfpunkte beziehen sich im Allgemeinen auf alle gespeicherten Parameter, die für das Training verwendet werden (z. B. Modellgewichtungen). Die Zeit zum Speichern eines Prüfpunkts kann zwischen Sekunden und einigen Minuten liegen.

Obwohl nach die meisten Wartungsereignisse automatisch wiederhergestellt wird und Trainingsjobs ohne manuelles Eingreifen fortgesetzt werden, kann es in Grenzfällen vorkommen, dass der Job nicht neu gestartet und automatisch fortgesetzt wird. In diesem Fall müssen Sie die TPU-Ressourcen löschen und neu erstellen und den Trainingsjob von einem gespeicherten Prüfpunkt aus neu starten. Informationen zum Erkennen und Wiederherstellen automatischer Wiederherstellungsfehler finden Sie unter TPU-Fehler erkennen und wiederherstellen.

Die zum Speichern und Laden von Prüfpunkten verwendeten Mechanismen unterscheiden sich bei jedem ML-Framework. Unterstützte Cloud TPU-Modelle haben in der Regel integrierte Prüfpunktausführung. Weitere Informationen zur Prüfpunktausführung finden Sie unter TensorFlow 2.x, PyTorch oder JAX/flax.

Wartungsereignisse erkennen

Mit dem folgenden gcloud describe-Befehl können Sie feststellen, ob und wann auf der TPU ein Wartungsereignis auftritt:

TPU-VMs

$ gcloud compute tpus tpu-vm describe tpu-name --zone=zone  | grep 'health'

TPU-Knoten

$ gcloud compute tpus describe tpu-name --zone=zone | grep 'health'

Die Ausgabe dieses Befehls zeigt den aktuellen Status der TPU und eine Beschreibung des letzten Wartungsereignisses an. Die Ausgabe sollte in etwa so aussehen:

health: HEALTHY
healthDescription: The TPU had a maintenance event at 2022-01-26T03:44:36.265703305Z

Wartungsereignisprotokolle

Sie können sich bisherige Logs von Wartungsereignissen auf Ihrer TPU in den Audit-Logs zu Systemereignissen ansehen.

Klicken Sie im Navigationsmenü der Google Cloud Console auf Compute Engine > VM-Instanzen und suchen Sie beispielsweise:

"tpu.nodes.terminate" OR "tpu.nodes.restart"

Innerhalb des Suchzeitraums werden alle Unterbrechungen und Reparaturen Ihrer TPU-Worker angezeigt. Die Logs enthalten das Datum und die Uhrzeit des Ereignisses, den Typ des Ereignisses und bei Ereignissen vom Typ „terminate“ den Grund für das Beenden in protoPayload.metadata.terminateReason.

Wartungsereignisse verarbeiten

Es gibt mehrere Möglichkeiten, Unterbrechungen von Wartungsereignissen zu minimieren.

  1. Prüfpunkte regelmäßig speichern

    Im Idealfall wird das Training ab dem letzten Checkpoint fortgesetzt, wenn ein „Unterbrechungsereignis“ eintritt.

  2. Wiederholungsversuche von Trainingsskripts

    Das Trainingsskript kann aufgrund eines "Unterbrechungsereignisses" beendet werden. Mit einem bash-Skript können Sie das Trainingsskript kontinuierlich wiederholen, bis das Training abgeschlossen ist. Jeder Wiederholungsversuch sollte vom letzten Prüfpunkt aus fortgesetzt werden. Daher sollten Wiederholungsskripts immer in Verbindung mit Prüfpunkten verwendet werden.

    Produktionsfertige Trainingspipelines sollten ein Ressourcenverwaltungssystem wie die Google Kubernetes Engine (GKE) verwenden. Weitere Informationen zur Verwendung von Google Kubernetes Engine mit der TPU-VM-Architektur finden Sie unter TPU-Arbeitslasten bereitstellen. Weitere Informationen zur Verwendung von Google Kubernetes Engine mit der TPU-Knotenarchitektur finden Sie unter TPU-Anwendungen in Google Kubernetes Engine ausführen. Andernfalls können Sie ein bash-Skript implementieren, um das Trainingsskript bis zum Abschluss kontinuierlich zu wiederholen. Beispiel:

    Mit TPU-Knoten:

    (Von Ihrer VM aus) bash while ! python3 [training command]; do sleep 1; done

    Mit TPU-VM:

    while ! gcloud compute tpus tpu-vm ssh ${TPU_NAME} --command "python3 [training command]"; do sleep 1; done
    

    Beachten Sie, dass Sie den TPU-VM-Befehl über eine Cloud Shell oder ein Terminal und nicht über die TPU-VM ausführen müssen.

  3. TPU-Fehler erkennen und davon wiederherstellen

    Wenn eine TPU nach einem Wartungsereignis nicht wiederhergestellt wird, können Sie ein Wiederherstellungsskript verwenden, um den TPU-Status zu erkennen und die TPU zu löschen und neu zu erstellen. Ein Beispiel für dieses Skript finden Sie hier. Weitere Informationen zum manuellen Löschen und Neuerstellen von TPUs finden Sie unter TPUs verwalten.

    Beim Erstellen oder Neuerstellen einer TPU-VM können Sie ein Startskript mit dem Parameter --metadata startup-script angeben. Ein Startskript wird ausgeführt, wenn eine TPU-VM erstellt wird. Weitere Informationen finden Sie unter Standardinstallationsskripts ausführen.