Cluster Director-Cluster mit Pathways erstellen

Auf dieser Seite wird Plattformadministratoren und ML-Entwicklern (Machine Learning) gezeigt, wie sie einen von Slurm orchestrierten Cluster Director-Cluster erstellen und für Pathways-Arbeitslasten konfigurieren. Wenn Sie diese Schritte ausführen, stellen Sie einen Cluster mit TPU v6e-Slices, einem CPU-Controller-Knoten, einem freigegebenen Google Cloud Managed Lustre-Dateisystem und der Laufzeitumgebung /home/pathways bereit. Pathways ist nicht auf einem Cluster Director-Cluster vorinstalliert. Nachdem Sie den Cluster erstellt haben, laden Sie die Pathways-Skripts auf den Login-Knoten herunter und führen einmal ein Setupskript aus.

Hinweis

  • Wählen Sie den Tab für die gewünschte Verwendung der Beispiele auf dieser Seite aus:

    gcloud

    Aktivieren Sie Cloud Shell in der Google Cloud Console.

    Cloud Shell aktivieren

    Unten in der Google Cloud Console wird eine Cloud Shell-Sitzung gestartet und eine Eingabeaufforderung angezeigt. Cloud Shell ist eine Shell-Umgebung, in der das Google Cloud CLI bereits installiert ist und Werte für Ihr aktuelles Projekt bereits festgelegt sind. Das Initialisieren der Sitzung kann einige Sekunden dauern.

    REST

    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.

      Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

    Weitere Informationen finden Sie in der Dokumentation zur Google Cloud -Authentifizierung unter Für die Verwendung von REST authentifizieren.

Hinweis

Bevor Sie beginnen, müssen die folgenden Voraussetzungen erfüllt sein:

  • Installieren Sie die Google Cloud CLI.
  • Aktivieren Sie die Hypercompute Cluster API.
  • Ihr Nutzerkonto und das Compute Engine-Standarddienstkonto müssen die IAM-Rollen (Identity and Access Management) haben, die zum Erstellen eines Cluster Director-Clusters und zum Herstellen einer Verbindung zu diesem erforderlich sind. Eine Liste der Rollen finden Sie unter Vorbereitung in der Kurzanleitung für Cluster Director.
  • Erstellen Sie eine TPU v6e-Reservierung in der Zone, in der Sie den Cluster erstellen möchten (z. B. mindestens vier ct6e-standard-4t-VMs für zwei 2x4-Slices).
  • Konfigurieren Sie passwortloses sudo auf den Clusterknoten für die automatische Slice-Wiederherstellung. Bitten Sie Ihren Administrator, Ihnen die Rolle „Compute OS-Administrator-Login“ (roles/compute.osAdminLogin) für das Projekt zuzuweisen.
  • Erstellen Sie einen Cloud Storage-Bucket für Pathways-Scratch-Daten und Arbeitslastausgaben und weisen Sie Ihrem Nutzerkonto und dem Compute Engine-Standarddienstkonto die Rolle „Storage-Objekt-Nutzer“ (roles/storage.objectUser) für das Projekt zu.

Lokale Umgebung einrichten

Melden Sie sich mit Ihren Google Cloud -Anmeldedaten an:

gcloud auth login

Definieren Sie die folgenden Umgebungsvariablen mit Werten, die für Ihre Arbeitslast geeignet sind:

export PROJECT=PROJECT_ID
export REGION=REGION
export ZONE=ZONE
export CLUSTER_ID=CLUSTER_ID
export RESERVATION_NAME=RESERVATION_NAME

Ersetzen Sie Folgendes:

  • PROJECT_ID: IhreGoogle Cloud -Projekt-ID.
  • REGION: die Region, in der Sie Ressourcen erstellen.
  • ZONE: die Zone, in der Sie Ressourcen erstellen.
  • CLUSTER_ID: der Clustername. Der Name darf bis zu 10 Zeichen lang sein und nur Ziffern und Kleinbuchstaben enthalten.
  • RESERVATION_NAME: der Name Ihrer TPU v6e-Reservierung in ZONE.

Cluster Director-Cluster erstellen

Im folgenden Beispiel erstellen Sie einen Cluster mit zwei TPU v6e-2x4-Slices (vier ct6e-standard-4t-VMs) aus Ihrer Reservierung und einem CPU-Knoten für den Pathways-Controller. Alle Knoten stellen ein freigegebenes Managed Lustre-Dateisystem unter /home bereit. Weitere Informationen zu den Feldern in der Clusterdefinition finden Sie unter Benutzerdefinierten Cluster erstellen.

  1. Erstellen Sie den Cluster mit der REST API:

    Erstellen Sie den Anfragetext:

    cat <<EOF > "${CLUSTER_ID}_create.json"
    {
      "networkResources": {
        "net": {
          "config": {
            "newNetwork": {
              "network": "projects/${PROJECT}/global/networks/${CLUSTER_ID}-net"
            }
          }
        }
      },
      "storageResources": {
        "home": {
          "config": {
            "newLustre": {
              "lustre": "projects/${PROJECT}/locations/${ZONE}/instances/${CLUSTER_ID}-lustre",
              "filesystem": "lustre",
              "capacityGb": "18000",
              "perUnitStorageThroughput": "500"
            }
          }
        }
      },
      "computeResources": {
        "crtpu": {
          "config": {
            "newReservedInstances": {
              "reservation": "projects/${PROJECT}/zones/${ZONE}/reservations/${RESERVATION_NAME}"
            }
          }
        },
        "crcpu": {
          "config": {
            "newOnDemandInstances": {
              "zone": "${ZONE}",
              "machineType": "n2-highmem-32"
            }
          }
        }
      },
      "orchestrator": {
        "slurm": {
          "loginNodes": {
            "count": "1",
            "zone": "${ZONE}",
            "machineType": "n2-standard-16",
            "enableOsLogin": true,
            "enablePublicIps": true,
            "bootDisk": {
              "type": "pd-balanced",
              "sizeGb": "100"
            },
            "storageConfigs": [
              {
                "id": "home",
                "localMount": "/home"
              }
            ]
          },
          "nodeSets": [
            {
              "id": "nstpu",
              "computeId": "crtpu",
              "staticNodeCount": "4",
              "maxDynamicNodeCount": "0",
              "enablePublicIps": true,
              "resourcePolicyConfig": {
                "acceleratorTopology": "2x4"
              },
              "computeInstance": {
                "bootDisk": {
                  "type": "hyperdisk-balanced",
                  "sizeGb": "100"
                }
              },
              "storageConfigs": [
                {
                  "id": "home",
                  "localMount": "/home"
                }
              ]
            },
            {
              "id": "nscpu",
              "computeId": "crcpu",
              "staticNodeCount": "1",
              "maxDynamicNodeCount": "0",
              "enablePublicIps": true,
              "computeInstance": {
                "bootDisk": {
                  "type": "pd-balanced",
                  "sizeGb": "100",
                  "image": "projects/clusterdirector-public-images/global/images/family/tpu-v6e-v5p-ubuntu2204-slurm2605-v20260902"
                }
              },
              "storageConfigs": [
                {
                  "id": "home",
                  "localMount": "/home"
                }
              ]
            }
          ],
          "partitions": [
            {
              "id": "tpu",
              "nodeSetIds": ["nstpu"]
            },
            {
              "id": "cpu",
              "nodeSetIds": ["nscpu"]
            }
          ],
          "defaultPartition": "tpu",
          "config": {
            "requeueExitCodes": [1, 2, 134, 137, 139, 143]
          }
        }
      }
    }
    EOF
    

    Senden Sie dann die Anfrage:

    curl -s -X POST \
        -H "Content-Type: application/json" \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -d @"${CLUSTER_ID}_create.json" \
        "https://hypercomputecluster.googleapis.com/v1alpha/projects/${PROJECT}/locations/${REGION}/clusters?clusterId=${CLUSTER_ID}"
    

    Der Cluster enthält Folgendes:

    • tpu-Partition: Ein statisches Knotenset reservierter TPU v6e-VMs. staticNodeCount ist die Anzahl der VMs und acceleratorTopology ist die Topologie der einzelnen Slices. Jede ct6e-standard-4t-VM hat vier Chips, sodass ein 2x4-Slice zwei VMs hat. Für mehr Slices multiplizieren Sie: Zwei 2x4-Slices benötigen einen staticNodeCount von 4.
    • cpu-Partition: Eine On-Demand-VM, auf der der Pathways-Ressourcenmanager, der IFRT-Proxyserver und der MaxText-Client ausgeführt werden. Die Pathways-Skripts senden Jobs an eine Partition mit dem Namen cpu. Die VM verwendet den Maschinentyp n2-highmem-32, da der Pathways-Dienst und MaxText zusammen bis zu 240 GB Arbeitsspeicher benötigen, während sie Prüfpunkte speichern. Außerdem wird ein Image mit Slurm 26.05 verwendet, das TPU-Slices unterstützt, da der Pathways-Dienst die TPU-Worker-Jobs von dieser VM sendet.
    • requeueExitCodes: Slurm stellt einen Job, der mit einem dieser Codes beendet wird, wieder in die Warteschlange. Mit dieser Einstellung kann Slurm einen TPU-Worker-Job neu starten, wenn eine beliebige VM im Slice vorzeitig beendet wird, nicht nur die erste.
  2. Warten Sie, bis der Cluster bereit ist. Sie können den Fortschritt auf der Seite Cluster Director in der Google Cloud Console verfolgen oder in der Ausgabe des folgenden Befehls prüfen, ob reconciling den Wert false hat:

    curl -s \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        "https://hypercomputecluster.googleapis.com/v1alpha/projects/${PROJECT}/locations/${REGION}/clusters/${CLUSTER_ID}"
    

Pathways-Umgebung einrichten

Die Pathways-Umgebung befindet sich im freigegebenen Dateisystem unter /home/pathways. Sie müssen sie also nur einmal pro Cluster einrichten. Sie enthält die Pathways-Container-Images, eine Python-Umgebung mit JAX und pathwaysutils sowie die Pathways-Skripts.

  1. Stellen Sie eine Verbindung zum Login-Knoten her. Weitere Möglichkeiten zum Herstellen einer Verbindung finden Sie unter Verbindung zu einem Cluster herstellen.

    gcloud compute ssh ${CLUSTER_ID}-login-001 \
        --project=${PROJECT} \
        --zone=${ZONE} \
        --tunnel-through-iap
    
  2. Prüfen Sie, ob die Partitionen cpu und tpu vorhanden sind und den Status idle haben:

    sinfo -o "%P %a %D %T %N %f"
    

    Die Ausgabe sieht etwa so aus:

    PARTITION AVAIL NODES STATE NODELIST FEATURES
    tpu* up 4 idle ${CLUSTER_ID}-nstpu-[0-3]
    cpu up 1 idle ${CLUSTER_ID}-nscpu-0
    
  3. Laden Sie die Pathways-Skripts auf den Login-Knoten herunter:

    mkdir -p ~/pathways-scripts && cd ~/pathways-scripts
    for f in setup_env.sh start_pathways.sh run_worker_slice.sh run_maxtext.sh; do
      curl -fsSLO "https://raw.githubusercontent.com/GoogleCloudPlatform/slurm-gcp/tpu-2605/pathways/scripts/${f}"
    done
    

    Mit diesem Befehl werden die folgenden Skripts heruntergeladen:

    • setup_env.sh: Führt eine einmalige Einrichtung der Pathways-Umgebung durch.
    • start_pathways.sh: Startet den Pathways-Dienst.
    • run_worker_slice.sh: Startet den Pathways-Worker für ein TPU-Slice (eingereicht von start_pathways.sh).
    • run_maxtext.sh: Führt eine MaxText-Beispieltrainingsarbeitslast aus.
  4. Führen Sie das Setupscript aus. Das dauert etwa 5 Minuten:

    chmod +x *.sh
    ./setup_env.sh
    

    Das Script ruft die Pathways-Server- und Proxy-Images ab, erstellt eine Python-Umgebung mit JAX, pathwaysutils und MaxText, kopiert die Scripts nach /home/pathways und verknüpft ~/pathways mit /home/pathways. Sie endet mit einer Ausgabe, die etwa so aussieht:

    Environment ready: JAX 0.11.1
    
  5. Optional: Wenn Sie anderen Clusternutzern Zugriff auf die Pathways-Umgebung gewähren möchten, lassen Sie sie /home/pathways mit ihrem Basisverzeichnis verknüpfen:

    ln -sfn /home/pathways ~/pathways
    

Der Cluster ist jetzt für Pathways bereit. Sie starten den Pathways-Dienst im Rahmen der Ausführung einer Arbeitslast, da Batch- und interaktive Arbeitslasten ihn mit unterschiedlichen Einstellungen starten. Weitere Informationen finden Sie unter Batcharbeitslast mit Pathways ausführen und Interaktive Arbeitslast mit Pathways ausführen.

Wenn Probleme auftreten, lesen Sie den Abschnitt Fehlerbehebung für Pathways in der Cloud.

Bereinigen

Löschen Sie den Cluster Director-Cluster, wenn Sie fertig sind, damit Ihrem Google Cloud -Konto die auf dieser Seite verwendeten Ressourcen nicht in Rechnung gestellt werden:

curl -s -X DELETE \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://hypercomputecluster.googleapis.com/v1alpha/projects/${PROJECT}/locations/${REGION}/clusters/${CLUSTER_ID}"

Nächste Schritte