In diesem Leitfaden wird anhand einer JAX-Trainingsarbeitslast, die im selben Cluster wie die Pathways-Controller-Komponenten ausgeführt wird, gezeigt, wie eine Batcharbeitslast ausgeführt wird.
Sie können Batcharbeitslasten in einem Google Kubernetes Engine-Cluster (GKE) oder in einem Cluster Director-Cluster mit Slurm ausführen:
- In GKE werden die Pathways-Clusterkomponenten nach Abschluss der JAX-Arbeitslast beendet.
- Auf dem Cluster Director werden die Pathways-Controller-Komponenten als separater Slurm-Job ausgeführt. Sie werden also nach Abschluss der JAX-Arbeitslast weiter ausgeführt, bis Sie sie beenden.
Diese Seite enthält Anleitungen für beide Plattformen. Wählen Sie in jedem Abschnitt den Tab GKE oder Cluster Director aus.
Hinweis
-
Wählen Sie den Tab für die gewünschte Verwendung der Beispiele auf dieser Seite aus:
gcloud
Installieren Sie die Google Cloud CLI und melden Sie sich dann mit Ihrer föderierten Identität in der gcloud CLI an. Nach der Anmeldung initialisieren Sie die Google Cloud CLI mit dem folgenden Befehl:
gcloud initREST
Wenn Sie die REST API-Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung verwenden möchten, verwenden Sie die Anmeldedaten, die Sie der gcloud CLI bereitstellen.
Installieren Sie die Google Cloud CLI und melden Sie sich dann mit Ihrer föderierten Identität in der gcloud CLI an.
Weitere Informationen finden Sie in der Dokumentation zur Google Cloud -Authentifizierung unter Für die Verwendung von REST authentifizieren.
Hinweis
GKE
Erfüllen Sie die folgenden Voraussetzungen:
- GKE-Cluster erstellen
- Cluster Toolkit einrichten
- Kubernetes-Tools installieren
- Aktivieren Sie die Kubernetes Engine API.
- Erstellen Sie einen Cloud Storage-Bucket für Pathways-Artefakte und -Ausgaben.
Cluster Director
Erfüllen Sie die folgenden Voraussetzungen:
- Cluster Director-Cluster erstellen und Pathways-Umgebung einrichten
- Erstellen Sie einen Cloud Storage-Bucket, in den Sie Pathways-Scratch-Daten und -Prüfpunkte schreiben können.
Trainings-Image mit MaxText erstellen
MaxText ist ein von Google entwickeltes Open-Source-Projekt für Large Language Models (LLMs). Es ist in JAX geschrieben und für die effiziente Ausführung auf TPUs und GPUs von Google Cloud konzipiert.
GKE
Wenn Sie ein MaxText-Docker-Image mit der aktuellen Version von stabilem JAX aus dem Open-Source-GitHub-Repository erstellen möchten, führen Sie den folgenden Befehl aus:
git clone https://github.com/AI-Hypercomputer/maxtext cd maxtext gcloud config set project PROJECT_ID bash src/dependencies/scripts/docker_build_dependency_image.sh MODE=stable gcloud auth configure-docker # This script needs bash version >= 4.2 to execute. bash src/dependencies/scripts/docker_upload_runner.sh \ CLOUD_IMAGE_NAME=USER_runner
Ersetzen Sie Folgendes:
PROJECT_ID: IhreGoogle Cloud -Projekt-ID.USER: IhreGoogle Cloud -Nutzer-ID.
Mit diesem Befehl wird das MaxText-Kubernetes-Image an gcr.io/PROJECT_ID/USER_runner übertragen.
Sie können dieses Docker-Image verwenden, um das Training auf TPUs mit dem Pathways-Backend auszuführen.
Cluster Director
Sie müssen kein Trainings-Image erstellen: setup_env.sh hat MaxText in der Pathways-Umgebung in /home/pathways installiert und run_maxtext.sh führt es aus.
Batcharbeitslast ausführen
GKE
Wenn sich die Binärdatei
gclusternicht in Ihrer UmgebungsvariablenPATHbefindet, fügen Sie das Verzeichnis mitgclusterzuPATHhinzu:export PATH="$PATH:CLUSTER_TOOLKIT_PATH"
Ersetzen Sie
CLUSTER_TOOLKIT_PATHdurch den absoluten Pfad zum Verzeichnis, das die Binärdateigclusterenthält, z. B.$HOME/cluster-toolkit.Senden Sie das vordefinierte MaxText-Docker-Image mit dem Befehl
gcluster job submit:gcluster job submit \ --pathways \ --pathways-gcs-location="gs://BUCKET_NAME/pathways-artifacts" \ --name=WORKLOAD \ --cluster=CLUSTER \ --project=PROJECT_ID \ --location=LOCATION \ --num-slices=WORKLOAD_NODEPOOL_COUNT \ --compute-type=COMPUTE_TYPE \ --topology=TOPOLOGY \ --image="gcr.io/PROJECT_ID/USER_runner" \ --command="python3 -m maxtext.trainers.pre_train.train /deps/src/maxtext/configs/base.yml base_output_directory=gs://BUCKET_NAME per_device_batch_size=1 enable_checkpointing=false remat_policy=full global_parameter_scale=1 steps=20 max_target_length=2048 use_iota_embed=true reuse_example_batch=1 dataset_type=synthetic attention=flash gcs_metrics=True enable_single_controller=True run_name=RUN_NAME-pathways-job"
Ersetzen Sie Folgendes:
BUCKET_NAME: der Cloud Storage-Bucket für Ausgaben.WORKLOAD: Ein eindeutiger Name zur Identifizierung Ihrer Arbeitslast (maximal 22 Zeichen aufgrund von DNS-Label-Limits).CLUSTER: der Name Ihres GKE-Cluster.PROJECT_ID: IhreGoogle Cloud -Projekt-ID.LOCATION: die Region oder Zone Ihres GKE-Cluster.WORKLOAD_NODEPOOL_COUNT: Die Anzahl der TPU-Slice-Knotenpools.COMPUTE_TYPE: der TPU-Maschinentyp, z. B.ct6e-standard-4t. Weitere Informationen zu den unterstützten TPU-Typen für die einzelnen TPU-Versionen finden Sie unter TPU-Versionen.TOPOLOGY: die TPU-Platzierungstopologie, z. B.2x4.USER: IhreGoogle Cloud -Nutzer-ID.RUN_NAME: ein vom Nutzer zugewiesener Name zur Identifizierung der Workflowausführung.
Weitere Informationen zu den Optionen für die Jobübermittlung finden Sie im Leitfaden zur Jobübermittlung mit dem Cluster Toolkit.
Verfolgen Sie den Fortschritt Ihrer Arbeitslast mit dem Befehl
gcluster job logs:gcluster job logs WORKLOAD \ --cluster=CLUSTER \ --project=PROJECT_ID \ --location=LOCATION \ --main-only \ --follow
Die Ausgabe sieht etwa so aus:
completed step: 0, seconds: 1.259, TFLOP/s/device: 10.792, Tokens/s/device: 1626.636, total_weights: 65536, loss: 10.876, lm_loss: 10.876, perplexity: 52906.090 completed step: 1, seconds: 3.366, TFLOP/s/device: 4.036, Tokens/s/device: 608.366, total_weights: 65536, loss: 10.876, lm_loss: 10.876, perplexity: 52906.090 completed step: 2, seconds: 0.264, TFLOP/s/device: 51.415, Tokens/s/device: 7749.885, total_weights: 65536, loss: 10.563, lm_loss: 10.563, perplexity: 38665.316 completed step: 3, seconds: 1.025, TFLOP/s/device: 13.257, Tokens/s/device: 1998.187, total_weights: 65536, loss: 9.983, lm_loss: 9.983, perplexity: 21646.125 completed step: 4, seconds: 1.194, TFLOP/s/device: 11.376, Tokens/s/device: 1714.750, total_weights: 65536, loss: 9.462, lm_loss: 9.462, perplexity: 12864.218 completed step: 5, seconds: 1.185, TFLOP/s/device: 11.465, Tokens/s/device: 1728.203, total_weights: 65536, loss: 8.961, lm_loss: 8.961, perplexity: 7791.373Optional: Wenn Sie die Arbeitslast abbrechen möchten, bevor sie abgeschlossen ist, verwenden Sie den Befehl
gcluster job cancel:gcluster job cancel WORKLOAD \ --cluster=CLUSTER \ --project=PROJECT_ID \ --location=LOCATION
Cluster Director
Führen Sie die folgenden Befehle auf dem Login-Knoten des Clusters von ~/pathways aus.
Die Skripts suchen nacheinander und schreiben ihre Logs in dieses Verzeichnis.
Starten Sie den Pathways-Dienst:
cd ~/pathways SLICE_SHAPE=TOPOLOGY \ MIN_SLICES=MIN_SLICES \ MAX_SLICES=MAX_SLICES \ GCS_BUCKET=gs://BUCKET_NAME \ sbatch start_pathways.sh
Ersetzen Sie Folgendes:
TOPOLOGY: die TPU-Topologie der einzelnen Slices. Sie muss mit deracceleratorTopologyIhres TPU-Knotensatzes übereinstimmen, z. B.2x4.MIN_SLICES: Die Mindestanzahl der laufenden Slices, die zum Starten und Fortsetzen des Trainings erforderlich sind.MAX_SLICES: die maximale Anzahl von Slices, die verwendet werden sollen, normalerweise die Anzahl der Slices im Knotensatz.BUCKET_NAME: der Cloud Storage-Bucket für Pathways-Scratch-Daten und -Prüfpunkte.
Wenn Ihre TPU-Partition nicht die Standardpartition des Clusters ist, legen Sie für
PARTITIONauch den Namen fest.Der Dienst ist bereit, wenn das Log
pathways-service-JOB_ID.out(wobeiJOB_IDdie Slurm-Job-ID ist) eine Ausgabe wie die folgende enthält:Pathways Runtime Service is READY! Discovery file : /home/USER/pathways/cluster.env IFRT Proxy Target : grpc://RM_IP:29000 Running TPU Slices : 2 / 2 (min=2)Senden Sie die MaxText-Trainingsarbeitslast. Sie können ihn direkt nach dem Dienstjob einreichen: Er wartet bis zu einer Stunde, bis der Dienst bereit ist.
sbatch run_maxtext.shDer MaxText-Job wartet, bis der Pathways-Dienst mindestens
MIN_SLICESausgeführte Slices hat, bevor er mit dem Training beginnt. Die Arbeitslast trainiert Llama 3.1 8B mit synthetischen Daten. Die Slice-Einstellungen und der Bucket stammen vom Dienst. Legen Sie sie daher nicht für diesen Job fest. Sie können die folgenden optionalen Variablen festlegen:STEPS: die Anzahl der Trainingsschritte. Der Standardwert ist30.CHECKPOINT_PERIOD: die Anzahl der Schritte zwischen Prüfpunkten. Der Standardwert ist5.BASE_OUTPUT_DIR: der Cloud Storage-Pfad, in den MaxText Prüfpunkte schreibt. Der Standardwert istgs://BUCKET_NAME/maxtext-runs.REDUCED_LAYERS=1: Trainiert eine Variante mit 8 Schichten anstelle der vollständigen 32 Schichten für2x2Slices.
Verfolgen Sie den Fortschritt Ihrer Arbeitslast (ersetzen Sie
JOB_IDdurch die Slurm-Job-ID des MaxText-Jobs). MaxText schreibt sein Log in den Standardfehlerkanal:tail -f maxtext-llama31-JOB_ID.err
In jedem Trainingsschritt wird eine Zeile wie die folgende ausgegeben:
completed step: 24, seconds: 0.326, live slice count: 2, TFLOP/s/device: 88.199, Tokens/s/device: 6289.27, total_weights: 32768, loss: 6.238Sie können
run_maxtext.shspäter noch einmal einreichen, ohne den Dienst neu starten zu müssen.Wenn Sie fertig sind, beenden Sie die Arbeitslast und dann den Pathways-Dienst:
scancel -u ${USER} -n maxtext-llama31 scancel -u ${USER} -n pathways-serviceWenn Sie den Dienst abbrechen, werden auch die Pathways-Worker-Jobs abgebrochen. Die TPU-VMs sind statische Knoten, sodass sie weiter ausgeführt werden und für andere Slurm-Jobs verfügbar sind.
Wenn Probleme auftreten, lesen Sie den Abschnitt Fehlerbehebung für Pathways in der Cloud.