Auf dieser Seite erfahren Sie, wie Sie mit Multi-Tier Checkpointing Prüfpunkte während des Trainings Ihres Machine-Learning-Modells in GKE zuverlässig speichern und verwalten können. Die Speicherung und Verwaltung von Prüfpunkten ist für umfangreiche Trainingsjobs, die Tausende von Knoten nutzen, von entscheidender Bedeutung. Unterbrechungen dieser umfangreichen Jobs sind häufig (potenziell stündlich) und die Wiederherstellung kann langsam sein.
Vorteile
Die Verwendung von mehrstufigen Prüfpunkten bietet folgende Vorteile:
- Vollständig orchestrierte Verwaltung von Prüfpunktdaten, einschließlich Sicherungen, Replikation und automatischer Wiederherstellung für die folgenden Arbeitslasten:
- JAX-Trainingsläufe mit Orbax für die Statusverwaltung, die auf TPUs ausgeführt werden.
- PyTorch-Arbeitslasten auf GPUs.
- Schnelle Wiederherstellung von Trainingsjobs von einem Prüfpunkt, der auf dem lokalen Knoten gespeichert ist. Sie können auch Checkpoints verwenden, die auf einem anderen Knoten im Trainingscluster gespeichert sind.
- Schnelle Wiederherstellung von Trainingsjobs aus einem Prüfpunkt, der in einem Cloud Storage-Backup gespeichert ist, im schlimmsten Fall, wenn keine Prüfpunkte im Cluster vorhanden sind.
Hinweis
Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:
- Aktivieren Sie die Google Kubernetes Engine API. Google Kubernetes Engine API aktivieren
- Wenn Sie die Google Cloud CLI für diese Aufgabe verwenden möchten, müssen Sie die gcloud CLI installieren und dann initialisieren. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit dem Befehl
gcloud components updateab. In früheren gcloud CLI-Versionen werden die Befehle in diesem Dokument möglicherweise nicht unterstützt.
- Erstellen Sie einen Cloud Storage-Bucket, wenn Sie noch keinen für Ihr Projekt haben. Achten Sie darauf, dass Sie den hierarchischen Namespace aktivieren, da Sicherungen sonst fehlschlagen.
Voraussetzungen
Für mehrstufiges Checkpointing ist die GKE-Clusterversion 1.32.4-gke.1415000 oder höher erforderlich.
Beschränkungen
- Autopilot-Cluster werden nicht unterstützt.
GKE-Knoten für die Verwendung von mehrstufigem Checkpointing konfigurieren
In diesem Abschnitt wird beschrieben, wie Sie GKE-Knoten in neuen und vorhandenen Clustern konfigurieren.
Knoten in einem neuen Cluster konfigurieren
Erstellen Sie einen Cluster mit aktiviertem mehrstufigem Checkpointing, dem Cloud Storage FUSE-CSI-Treiber und der Workload Identity Federation for GKE. Wenn Sie TPU-Slices für Ihre ML-Arbeitslast verwenden, müssen Sie den Befehl zum Erstellen des Clusters anpassen, um die Konfiguration für einen TPU-Slice-Knotenpool einzuschließen.
gcloud container clusters create CLUSTER_NAME \ --addons=HighScaleCheckpointing,GcsFuseCsiDriver \ --node-locations=NODE_LOCATION \ --workload-pool=PROJECT_ID.svc.id.goog \ --cluster-version=CLUSTER_VERSION --location=CLUSTER_LOCATION \ --machine-type=MACHINE_TYPE \ --num-nodes=NUM_NODESErsetzen Sie die folgenden Werte:
CLUSTER_NAMEist der Name des Clusters.NODE_LOCATION: die Zone für Ihre Clusterknoten. Hier wird Ihre TPU-Kapazität angezeigt.PROJECT_ID: Ihre Projekt-ID in Google Cloud .CLUSTER_VERSION: Die Version Ihres Clusters. 1.32.4-gke.1415000 ist die niedrigste unterstützte Version.CLUSTER_LOCATION: die Region, in der Sie den Cluster erstellen möchten.MACHINE_TYPE: Der Maschinentyp, der für Knoten verwendet wird, auf denen Komponenten wie der JobSet-Controller und der mehrstufige Prüfpunkt-Controller ausgeführt werden. Für das Training im großen Maßstab empfehlen wir, mindestense2-standard-4Maschinen zu verwenden. Sie verwenden diesen Maschinentyp nicht für das Modelltraining. Stattdessen erstellen Sie dafür separate Knotenpools, häufig mit beschleunigungsoptimierten VM-Familien.NUM_NODES: Die Anzahl der Knoten, die in jeder der Clusterzonen erstellt werden sollen.
Knoten in einem vorhandenen Cluster konfigurieren
Wenn Sie Multi-Tier Checkpointing mit einem vorhandenen Cluster verwenden möchten, aktivieren Sie es zusammen mit dem CSI-Treiber für Cloud Storage FUSE und der Workload Identity-Föderation für GKE mit den folgenden Befehlen. Ihre vorhandene Clusterversion muss höher als 1.32.3-gke.1170000 sein.
Aktivieren Sie die Workload Identity-Föderation für GKE:
gcloud container clusters update CLUSTER_NAME \ --workload-pool=PROJECT_ID.svc.id.goog \ --location=CLUSTER_LOCATIONErsetzen Sie die folgenden Werte:
CLUSTER_NAMEist der Name des Clusters.PROJECT_ID: Ihre Google Cloud Projekt-ID.CLUSTER_LOCATION: Die Region des Clusters.
Aktivieren Sie das Multi-Tier Checkpointing und den CSI-Treiber für Cloud Storage FUSE:
gcloud container clusters update CLUSTER_NAME \ --update-addons=HighScaleCheckpointing=ENABLED,GcsFuseCsiDriver=ENABLED \ --location=CLUSTER_LOCATION
Berechtigungen für die Verwendung von mehrstufigem Checkpointing konfigurieren
In diesem Abschnitt wird beschrieben, wie Sie Berechtigungen für die Verwendung von mehrstufigen Prüfpunkten konfigurieren.
Zugriff auf Cloud Storage-Buckets gewähren
Für die temporären Volumes, die vom Multi-Tier Checkpointing-CSI-Treiber verwendet werden, müssen vorhandene Cloud Storage-Buckets verwendet werden.
Damit Prüfpunkte in einem Cloud Storage-Bucket gespeichert werden können, benötigt Multi-Tier Checkpointing Zugriff auf den Bucket. Weisen Sie dem Kubernetes-Dienstkonto für Multi-Tier Checkpointing die IAM-Rolle „Storage Object User“ (roles/storage.objectUser) für den Bucket zu.
gcloud storage buckets add-iam-policy-binding gs://GCS_BUCKET \
--member "principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/gke-managed-checkpointing/sa/gke-checkpointing-multitier-node" \
--role "roles/storage.objectUser"
Ersetzen Sie die folgenden Werte:
GCS_BUCKET: der Name des Cloud Storage-Buckets, aus dem Sie Daten übertragen.PROJECT_ID: Ihre Projekt-ID in Google Cloud .PROJECT_NUMBER: eine automatisch generierte eindeutige Kennung für das Projekt Informationen dazu, wie Sie diesen Wert finden, finden Sie unter Projekte erstellen und verwalten.
(Optional) Dem Compute Engine-Standarddienstkonto Zugriff gewähren
Wenn Ihre Compute Engine-Instanzen Lesezugriff auf den Cloud Storage-Bucket benötigen, weisen Sie dem Compute Engine-Standarddienstkonto die IAM-Rolle „Storage-Objekt-Betrachter“ (roles/storage.objectViewer) zu.
gcloud storage buckets add-iam-policy-binding gs://GCS_BUCKET \
--member serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
--role roles/storage.objectViewer
JobSet-Controller bereitstellen
Der JobSet-Controller ist für die Verwaltung der Batchjobs verantwortlich, die Ihr Modelltraining in GKE ausführen. Seine Ressourcenzuweisung wird angepasst, um die Arbeitslast effizient zu verarbeiten. Achten Sie darauf, dass Ihr Launcher für Trainingsjobs JobSet bereitstellt und verwendet.
Führen Sie den folgenden Patch-Befehl aus, um die Speicheranfrage für den Manager-Container in Ihrer JobSet-Bereitstellung auf 1 Gi, das Speicherlimit auf 2 Gi und die CPU-Anfrage auf 1 zu erhöhen:
kubectl patch -n jobset-system deploy jobset-controller-manager --type json \
--patch '[{"op": "add", "path": "/spec/template/spec/containers/0/resources", "value": {"limits": {"memory": "2Gi"}, "requests": {"cpu": "1", "memory": "1Gi"}}}]'
CSI-Treiber für Multi-Tier Checkpointing initialisieren
In diesem Abschnitt wird beschrieben, wie Sie den CSI-Treiber für mehrstufiges Checkpointing auf Knoten initialisieren, auf denen Ihre Arbeitslasten ausgeführt werden. Der CSI-Treiber ist für die Speicherung und Verwaltung von Prüfpunkten während des Modelltrainings verantwortlich.
CheckpointConfiguration erstellen
Eine CheckpointConfiguration ist eine benutzerdefinierte Kubernetes-Ressource, die Attribute für die Bereitstellung des CSI-Treibers für mehrstufige Prüfpunkte angibt. Diese Ressource ist clusterbezogen.
Erstellen Sie das folgende
checkpoint.yaml-Manifest:apiVersion: checkpointing.gke.io/v1 kind: CheckpointConfiguration metadata: name: MTC_CONFIG_NAME-configuration spec: cloudStorageBucketName: GCS_BUCKET nodeSelector: node.kubernetes.io/instance-type: MACHINE_TYPE tolerations: - key: TOLERATION_KEY operator: Exists effect: NoSchedule inMemoryVolumeSize: IN_MEMORY_VOLUME_SIZE gcsFuseMountOptions: - implicit-dirs - metadata-cache:negative-ttl-secs:0 - metadata-cache:ttl-secs:-1 - metadata-cache:stat-cache-max-size-mb:-1 - metadata-cache:type-cache-max-size-mb:-1 - file-system:kernel-list-cache-ttl-secs:0 - read_ahead_kb=1024 - write:enable-streaming-writes:trueErsetzen Sie Folgendes:
- MTC_CONFIG_NAME: der Name Ihrer CheckpointConfiguration. Dieser Name ist global für den Cluster und nicht jobspezifisch.
- GCS_BUCKET: der Name des Cloud Storage-Bucket, in dem Sie Prüfpunktdaten speichern. Verwenden Sie den Bucket, den Sie im Schritt Cloud Storage-Bucket mit Berechtigungen einrichten eingerichtet haben.
MACHINE_TYPE: der Maschinentyp für die entsprechenden Beschleuniger. Der Wert kann einer der folgenden sein:
- TPU v5p:
ct5p-hightpu-4t - TPU v5e:
ct5e-hightpu-4t - TPU v6e:
ct6e-standard-4t - Ironwood (TPU7x):
tpu7x-standard-4t - NVIDIA H100 80 GB-GPUs (A3-Serie):
Weitere Informationen zum Ausführen verteilter Arbeitslasten auf GPUs mit GKE finden Sie unter GPUs mit mehreren Instanzen ausführen. Informationen zu TPUs finden Sie unter TPU-Slice-Knotenpool erstellen.
- TPU v5p:
TOLERATION_KEY: Mit diesem Feld kann der CSI-Treiber auf Knoten mit übereinstimmenden Markierungen geplant werden. Weitere Informationen zur Funktionsweise von Taints bei verschiedenen Beschleunigertypen finden Sie auf den folgenden Seiten:
IN_MEMORY_VOLUME_SIZE: die Größe des In-Memory-Checkpointing-Cache. Geben Sie die Menge und die Einheit an, z. B. „200 Gi“. Dieser Wert sollte:
- Die Größe des lokalen Prüfpunkts für TPUs multipliziert mit 2,2
- Die Größe des lokalen Prüfpunkts für GPUs mit einem einzelnen Peer multipliziert mit 6,6.
Wenden Sie das Manifest an:
kubectl apply -f checkpoint.yamlPrüfen Sie, ob der CSI-Treiber ausgeführt wird:
kubectl get pod -n gke-managed-checkpointingDie Ausgabe sollte in etwa so aussehen: Es gibt mehrere Einträge, einen pro beschleunigtem Knoten.
NAME READY STATUS RESTARTS AGE multitier-driver-e2b033a7-a4e7-496a-87a3-ffd7fcc2e57b-2d4fz 5/5 Running 0 114s
CSI-Treiber für Multi-Tier Checkpointing deinstallieren
Wenn Sie die Bereitstellung des CSI-Treibers für mehrstufiges Checkpointing aufheben möchten, löschen Sie die Ressource CheckpointConfiguration. Der Controller für Prüfpunkte auf mehreren Ebenen entfernt den CSI-Treiber von den Knoten. Dadurch werden die RAM-Laufwerke entfernt und Arbeitsspeicher für andere Arbeitslasten freigegeben. Beispiel:
kubectl delete -f checkpoint.yaml
Datenaufbewahrung und automatische Speicherbereinigung für Cloud Storage-Sicherungen verwalten
Sie sind für die Implementierung von Aufbewahrungsrichtlinien für die Cloud Storage-Sicherungen von Prüfpunkten verantwortlich. Bei der mehrstufigen Prüfpunkterstellung werden Prüfpunktsicherungen nur in Cloud Storage geschrieben und nie geändert oder gelöscht.
Viele Open-Source-Tools können die Aufbewahrung und die automatische Speicherbereinigung verarbeiten, darunter die folgenden:
Im folgenden Beispiel wird backup-warden verwendet, wobei das Verzeichnis backup an einem Sicherungsspeicherort bereitgestellt wird, der Cloud Storage FUSE verwendet:
# Add --delete option to actually delete the backups, as is it only shows what would be deleted (dry-run)
backup-warden -p backup \
--hourly 24 \
--daily 7 \
--weekly 5 \
--monthly always \
--yearly always \
--prefer-recent
JobSet-Manifest der Arbeitslast aktualisieren
Aktualisieren Sie das JobSet-Manifest für Ihren Job, um das Volume für Prüfpunkte im großen Maßstab einzuschließen. Die Details hängen von Ihrer Arbeitslast ab.
Wenn Sie beispielsweise das Beispiel-JobSet aus TPU-Multiplikationen in GKE bereitstellen erweitern möchten, gehen Sie so vor:
Fügen Sie dem Container
jax-tpudie folgenden Zeilen hinzu.volumeMounts: - name: checkpoint mountPath: CHECKPOINT_DIRErsetzen Sie CHECKPOINT_DIR durch den Pfad zu Ihrem Prüfpunktverzeichnis. An diesem Speicherort wird der
replicator.yamlgeneriert und die mehrstufige Prüfpunkterstellung führt den Speichervorgang für den Prüfpunkt aus. Weitere Informationen finden Sie unter Mehrstufige Prüfpunkte in Ihre Anwendung einbinden.Fügen Sie dem Feld
spec.template.specder Job-Spezifikation die folgenden Zeilen hinzu.volumes: - name: checkpoint csi: driver: multitier-checkpoint.csi.storage.gke.io
Multi-Tier-Checkpointing in Ihre Anwendung einbinden
Wenn Sie Informationen zu Prüfpunktstandorten und zur Replikationsbereitschaft freigeben möchten, ändern Sie Ihre Anwendung so, dass sie das folgende Protokoll für die Kommunikation mit Multi-Tier Checkpointing verwendet.
Die folgenden Frameworks und Bibliotheken implementieren diese Integration bereits:
- MaxText (mit Orbax): MaxText bietet integrierte Unterstützung für Multi-Tier Checkpointing (MTC). Weitere Informationen finden Sie in der MaxText-MTC-Dokumentation.
- Alle Modelle, die Orbax verwenden: Die Integration besteht aus zwei Hauptkomponenten: dem MTC-Initialisierungsmodul für die Ersteinrichtung (Beispiel siehe MaxText) und dem Replicator Checkpoint Manager zum Speichern und Wiederherstellen von Prüfpunkten von einer lokalen RAM-Disk (Beispiel siehe MaxText).
- PyTorch-Referenzbeispiel: Dieses Beispiel ist für Arbeitslasten verfügbar, die NeMo mit PyTorch verwenden.
Starten
In diesem Abschnitt werden die ersten Schritte beschrieben, die die Anwendung für die Interaktion mit der mehrstufigen Checkpointing-Funktion ausführen muss.
Der Replicator ist eine Kernkomponente von Multi-Tier Checkpointing, die auf jedem Knoten als Teil des CSI-Treibers ausgeführt wird. Der Replikator verwaltet die Prüfpunktreplikation über Speicherebenen hinweg, von der lokalen RAM-Disk zu Peer-Knoten und zu externem Speicher wie Cloud Storage.
Die Datei replicator.yaml fungiert als dynamische Steuerungsebene zwischen Ihrem ML-Trainingsjob (Framework-Code) und der Replikator-Komponente. Ihre ML-Anwendung generiert diese Datei programmatisch auf dem lokalen Volume (RAMDisk), auf das sowohl der Trainingsjob als auch der Replikationsdienst zugreifen können. Mit diesem Manifest kann das ML-Framework dem Replikator Laufzeitkonfigurations- und Lebenszyklusverwaltungsanweisungen bereitstellen, die sich von statischen Infrastrukturparametern (z. B. Cloud Storage-Uploadhäufigkeit) unterscheiden, die während der Backend-Einrichtung definiert werden.
Ein konkretes Beispiel für diese Interaktion finden Sie unter:
- Das MaxText-Projekt, in dem diese Architektur für JAX auf Cloud TPU verwendet wird.
- Das PyTorch-Referenzbeispiel, das diese Architektur mit PyTorch und NVIDIA NeMO auf GPUs verwendet.
Ihre Anwendung sollte beim Start die folgenden Schritte ausführen:
Warten Sie, bis die Datei
replicator.yamlnicht mehr vorhanden ist. Das bedeutet, dass der Replikator von Ihrer Anwendung konfiguriert werden kann. Die Dateireplicator.yamlwird am Speicherort CHECKPOINT_DIR generiert, den Sie im Abschnitt JobSet-Manifest der Arbeitslast aktualisieren konfiguriert haben.Wenn der Job zum Trainieren des Modells zum ersten Mal erstellt wird, ist die Datei
replicator.yamlnicht vorhanden und Ihre Anwendung kann sofort fortfahren. Wenn der Job jedoch neu gestartet wurde (z. B. aufgrund eines Fehlers oder eines manuellen Eingriffs), verarbeitet das System möglicherweise noch die vorherige Jobinstanz und diereplicator.yamldieser Instanz ist möglicherweise noch auf dem lokalen Volume vorhanden.Ihre Anwendung oder Ihr ML-Job erstellt die Datei
replicator.yamlmit einer Konfiguration, die in etwa so aussieht:Orbax
job-name: orbax framework: orbax assume-data-parallelism: 3 node-rank: 0 nodes: 32 peer-ranks: [1, 16] or peers-per-node: 2 backup-interval-minutes: 30PyTorch
job-name: nemo framework: pytorch.distributed node-rank: 0 nodes: 32 peer-ranks: [1, 16] or peers-per-node: 2 backup-interval-minutes: 30Diese Beispielkonfiguration enthält die folgenden Felder:
name: Der Name des Trainingsjobs.framework: das ML-Framework, das vom Trainingsjob verwendet wird.node-rank: die eindeutige Kennung des aktuellen Knotens innerhalb des verteilten Trainingsjobs. Dies ist der Knotenrang des Knotens, der diese Datei erstellt hat. Jeder Knoten, der am Durchlauf beteiligt ist, hat einen eigenen Rang.nodes: Die Gesamtzahl der Knoten, die am verteilten Trainingsjob beteiligt sind. Dieser Wert stammt aus den Metadaten des Pods. Der ML-Trainingsjob kann diesen Wert ebenfalls sehen.peer-ranksoderpeers-per-node: zwei alternative Möglichkeiten, die Replikationstopologie anzugeben. Nur einer dieser beiden Parameter sollte vorhanden sein.peer-ranks: Explizite Ränge von Peer-Knoten, auf die die Prüfpunktdaten des aktuellen Knotens repliziert werden sollen. So können Sie genau steuern, welche Knoten als Replikationspartner dienen.peers-per-node: Die Anzahl der Peer-Knoten pro Knoten, die der Replicator automatisch für die Replikation auswählen soll.
backup-interval-minutes: die Häufigkeit in Minuten, mit der Prüfpunkte in Cloud Storage gesichert werden. Wir empfehlen, diesen Wert auf mindestens 30 Minuten festzulegen.
Warten Sie, bis die neue
replicator.yaml-Datei vom System gelöscht wurde. Das bedeutet, dass der Replikator neu gestartet wurde und die Bereinigung durchgeführt hat. Mit diesem Schritt können Sie vermeiden, dass auf dem lokalen Volume veraltete oder temporäre Dateien vorhanden sind, wenn Ihre Anwendung die Schritte im nächsten Abschnitt ausführt.
Wiederherstellung ab dem letzten bekannten funktionsfähigen Prüfpunkt
Nachdem der Replikator initialisiert wurde, erstellt Multi-Tier Checkpointing einen symbolischen Link pro TPU- oder GPU-Worker. Diese symbolischen Links werden im selben eingebundenen lokalen Volume wie die Datei
replicator.yamlerstellt, in der der Job Checkpoints speichert.Die symbolischen Links haben das Format
<job-name>-s{step}-n<node-rank>-w<worker-index>.restore.Stellen Sie jeden Worker aus der entsprechenden
.restore-Datei wieder her. Ein Beispiel finden Sie im nächsten Abschnitt.
Standardmäßig ist der LKG-Prüfpunkt der letzte vollständige Prüfpunkt, den Multi-Tier Checkpointing finden kann. Clusterinterne Prüfpunkte (auf der lokalen RAM-Disk und auf Peer-Knoten) werden bevorzugt. Cloud Storage-Sicherungen werden nur verwendet, wenn kein vollständiger clusterinterner Prüfpunkt vorhanden ist. Informationen zum Überschreiben dieser Auswahl finden Sie unter Aus einer bestimmten Sicherung wiederherstellen.
Aus einer bestimmten Sicherung wiederherstellen
Sie können einen Job aus einer bestimmten Cloud Storage-Sicherung anstelle des LKG-Prüfpunkts wiederherstellen, z. B. um das Training auf einen früheren Zustand zurückzusetzen. Führen Sie vor Beginn des Jobs die folgenden Schritte aus:
Suchen Sie die Sicherung, aus der Sie Daten wiederherstellen möchten. Bei der mehrstufigen Prüfpunkterstellung werden Sicherungen in den Bucket geschrieben, den Sie in der CheckpointConfiguration konfiguriert haben, und zwar in ein Verzeichnis, das nach dem Job benannt ist. Jede Sicherung ist ein Unterverzeichnis, das nach der UTC-Zeit benannt ist, zu der die Sicherung erstellt wurde. Das Format ist
YYYY-MM-DD_HH-MM:gcloud storage ls gs://GCS_PATH/JOB_NAME/Ersetzen Sie Folgendes:
- GCS_PATH: der Cloud Storage-Pfad, in den die mehrstufige Prüfpunkterstellung Sicherungen schreibt. Dieser Wert ist der Bucket, den Sie im Feld
cloudStorageBucketNameder CheckpointConfiguration angegeben haben, einschließlich aller Verzeichnisse im Bucket. - JOB_NAME: Der Name des Trainingsjobs, wie im Feld
job-nameder Dateireplicator.yamlangegeben.
- GCS_PATH: der Cloud Storage-Pfad, in den die mehrstufige Prüfpunkterstellung Sicherungen schreibt. Dieser Wert ist der Bucket, den Sie im Feld
Erstellen Sie im Jobverzeichnis im Bucket eine Datei mit dem Namen
restore.version. Die Datei darf nur den Namen des Sicherungsverzeichnisses enthalten, z. B.:echo "BACKUP_NAME" | gcloud storage cp - gs://GCS_PATH/JOB_NAME/restore.versionErsetzen Sie BACKUP_NAME durch den Namen des Sicherungsverzeichnisses, z. B.
2025-06-30_14-30.Starten Sie den Job.
Wenn die Datei restore.version vorhanden ist, verhält sich Multi-Tier Checkpointing so:
- Alle Knoten werden aus der angegebenen Sicherung wiederhergestellt. In-Cluster-Prüfpunkte werden ignoriert, auch wenn sie aktueller als die Sicherung sind.
- Die Datei
restore.versionwird automatisch gelöscht, nachdem der Job den ersten Prüfpunkt nach der Wiederherstellung gespeichert hat. Die Überschreibung gilt nur einmal: Wenn der Job später neu gestartet wird, wird er wie gewohnt vom LKG-Prüfpunkt wiederhergestellt. - Wenn die angegebene Sicherung nicht vorhanden oder unvollständig ist, wird der Job ohne Checkpoint gestartet. Bei der mehrstufigen Prüfpunkterstellung wird nicht auf clusterinterne Prüfpunkte oder andere Sicherungen zurückgegriffen.
Prüfpunkt speichern
Ihre Anwendung führt diese Schritte während des Trainingsjobs mehrmals aus. Die Speichervorgänge erfolgen am Speicherort CHECKPOINT_DIR, den Sie im JobSet-Manifest der Arbeitslast aktualisieren konfiguriert haben.
Orbax
Orbax-Checkpoints erstellen: Das Verzeichnis ist nach der Schrittnummer benannt. Der Replikator erkennt das neu erstellte Prüfpunktverzeichnis, führt bei Bedarf die Replikation oder Sicherung durch und bereinigt automatisch.
Weitere Informationen zur Verwendung des Orbax-Replicator-Checkpoint-Managers finden Sie in der MaxText-Datei checkpointing.
Ein Beispiel für die Interaktion mit dem Replikator-Dienst finden Sie in der MaxText-Datei max_utils.
PyTorch
Verwenden Sie InClusterLocalCheckpointIO als benutzerdefiniertes pytorch_lightning.CheckpointIO, um das korrekte verteilte Checkpointing mit lokalem Speicher zu ermöglichen. Mit dem folgenden Beispielbefehl wird die mehrstufige Prüfpunkterstellung mithilfe einer Referenzimplementierung aktiviert, die auf dem NVIDIA NeMo-Framework basiert:
torchrun train.py <other_train_flags> \
--local-ckpt-dir=CHECKPOINT_DIR \
--local-ckpt-interval=20 \
--job-name=JOB_NAME \
--enable-high-scale-ckpt
Ersetzen Sie Folgendes:
CHECKPOINT_DIR: der Pfad zu Ihrem Prüfpunktverzeichnis.JOB_NAME: Der Name der Arbeitslast Ihres Trainingsjobs.
Clusterupgrades
Bei Clusterupgrades können Sie das CheckpointConfiguration-Objekt entweder vor oder nach dem Upgrade löschen und neu erstellen. Diese Aktion ist erforderlich, da das DaemonSet des Knotensicherungstreibers, das von diesem Objekt dynamisch bereitgestellt wird, nicht automatisch aktualisiert wird.
Wenn Sie die DaemonSet-Spezifikation beibehalten möchten, müssen Sie nichts weiter tun.
Fehlerbehebung
Dieser Abschnitt enthält Hinweise zur Fehlerbehebung bei Problemen mit Multi-Tier Checkpointing. Allgemeine Informationen zur Fehlerbehebung bei Speicherproblemen finden Sie unter Fehlerbehebung bei Cloud Storage in GKE.
Multi-Tier-Prüfpunkte nicht aktiviert
Der folgende Fehler weist darauf hin, dass Multi-Tier Checkpointing in Ihrem Cluster nicht aktiviert ist:
error: unable to recognize "checkpoint.yaml": no matches for kind "CheckpointConfiguration" in version "checkpointing.gke.io/v1"
Dieser Fehler kann auftreten, nachdem Sie kubectl apply -f checkpoint.yaml im Schritt CheckpointConfiguration erstellen ausgeführt haben.
Prüfen Sie mit dem folgenden Befehl, ob Sie Multi-Tier Checkpointing in Ihrem Cluster aktiviert haben, um dieses Problem zu beheben:
gcloud container clusters describe CLUSTER_NAME \
--project PROJECT_ID
--location CLUSTER_LOCATION
Wenn mehrstufiges Checkpointing aktiviert ist, sollte die Ausgabe in etwa so aussehen:
addonsConfig:
gcePersistentDiskCsiDriverConfig:
enabled: true
gcsFuseCsiDriverConfig:
enabled: true
highScaleCheckpointingConfig:
enabled: true
kubernetesDashboard:
disabled: true
networkPolicyConfig:
disabled: true
Wenn Multi-Tier Checkpointing nicht aktiviert ist, aktualisieren Sie Ihren Cluster, um Multi-Tier Checkpointing zu aktivieren.
Der CSI-Treiber für Multi-Tier Checkpointing kann Volumes nicht bereitstellen
Dieses Problem kann auftreten, wenn der CSI-Treiber das Cloud Storage-Volume nicht bereitstellen kann. Es kann mehrere ähnliche Zeilen geben.
kubectl get pod -n gke-managed-checkpointing
NAME READY STATUS RESTARTS AGE
multitier-driver-14694e4d-774f-4104-8bba-f0bd82fd7557-5vxr9 0/5 Init:0/1 0 6m32s
Prüfen Sie zur Behebung dieses Problems die CSI-Treiber-Pod-Ereignisse, wie im folgenden Beispiel gezeigt:
kubectl describe pod multitier-driver-14694e4d-774f-4104-8bba-f0bd82fd7557-5vxr9 -n gke-managed-checkpointing
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 17m default-scheduler Successfully assigned gke-managed-checkpointing/multitier-driver-14694e4d-774f-4104-8bba-f0bd82fd7557-5vxr9 to gke-my-cluster-default-pool-353c773f-6d8q
Warning FailedMount 82s (x16 over 17m) kubelet MountVolume.SetUp failed for volume "gcs" : rpc error: code = PermissionDenied desc = failed to get GCS bucket "checkpointing-test-bucket": googleapi: Error 403: Caller does not have storage.objects.list access to the Google Cloud Storage bucket. Permission 'storage.objects.list' denied on resource (or it may not exist)., forbidden
Wenn das Problem wie im Beispiel gezeigt auf einen Cloud Storage-Bucket-Fehler PermissionDenied zurückzuführen ist, können Sie es beheben, indem Sie die Berechtigungen richtig einrichten.
Nächste Schritte
- Weitere Informationen zum Bereitstellen von TPU-Multislice in Google Kubernetes Engine
- Informationen zum Optimieren des Cloud Storage FUSE-CSI-Treibers für Google Kubernetes Engine für die Leistung
- Orbax-Checkpointing-Optionen ansehen