Crea un cluster Cluster Director con Pathways

Questa pagina mostra agli amministratori della piattaforma e agli ingegneri di machine learning (ML) come creare un cluster Cluster Director orchestrato da Slurm e configurarlo per i workload Pathways. Completando questi passaggi, esegui il provisioning di un cluster con sezioni TPU v6e, un nodo controller della CPU, un file system Google Cloud Managed Lustre condiviso e l'ambiente di runtime /home/pathways. Pathways non è preinstallato su un cluster Cluster Director: dopo aver creato il cluster, scarichi gli script Pathways sul nodo di accesso ed esegui uno script di configurazione una volta.

Prima di iniziare

Prima di iniziare

Prima di iniziare, completa i seguenti prerequisiti:

  • Installa Google Cloud CLI.
  • Abilita l'API Hypercompute Cluster.
  • Assicurati che il tuo account utente e l'account di servizio predefinito di Compute Engine dispongano dei ruoli di Identity and Access Management (IAM) necessari per creare un cluster Cluster Director e connetterti. Per l'elenco dei ruoli, consulta Prima di iniziare nella guida rapida di Cluster Director.
  • Crea una prenotazione TPU v6e nella zona in cui prevedi di creare il cluster (ad esempio, almeno quattro VM ct6e-standard-4t per due sezioni 2x4).
  • Configura sudo senza password sui nodi del cluster per il recupero automatico delle sezioni. Chiedi all'amministratore di concederti il ruolo Compute OS Admin Login (roles/compute.osAdminLogin) nel progetto.
  • Crea un bucket Cloud Storage per i dati temporanei e gli output dei workload di Pathways e concedi il ruolo Storage Object User (roles/storage.objectUser) sul progetto al tuo account utente e al account di servizio predefinito di Compute Engine.

Configura l'ambiente locale

Accedi con le tue credenziali Google Cloud :

gcloud auth login

Definisci le seguenti variabili di ambiente con valori appropriati per il tuo workload:

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

Sostituisci quanto segue:

  • PROJECT_ID: il tuo ID progettoGoogle Cloud .
  • REGION: la regione in cui crei le risorse.
  • ZONE: la zona in cui crei le risorse.
  • CLUSTER_ID: il nome del cluster. Il nome può contenere fino a 10 caratteri e può utilizzare solo numeri e lettere minuscole.
  • RESERVATION_NAME: il nome della prenotazione di TPU v6e in ZONE.

Crea un cluster Cluster Director

Nell'esempio seguente, crei un cluster con due sezioni TPU v6e 2x4 (quattro VM ct6e-standard-4t) dalla tua prenotazione e un nodo CPU per il controller Pathways. Tutti i nodi montano un file system Managed Lustre condiviso in /home. Per saperne di più sui campi nella definizione del cluster, consulta Crea un cluster personalizzato.

  1. Crea il cluster utilizzando l'API REST:

    Crea il corpo della richiesta:

    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
    

    Poi invia la richiesta:

    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}"
    

    Il cluster include:

    • Partizione tpu: un set di nodi statico di VM TPU v6e prenotate. staticNodeCount è il numero di VM e acceleratorTopology è la topologia di ogni sezione. Ogni VM ct6e-standard-4t ha quattro chip, quindi una sezione 2x4 ha due VM. Per più sezioni, moltiplica: due sezioni 2x4 richiedono un staticNodeCount di 4.
    • Partizione cpu: una VM on demand che esegue il gestore delle risorse Pathways, il server proxy IFRT e il client MaxText. Gli script Pathways inviano i job a una partizione denominata cpu. La VM utilizza il tipo di macchina n2-highmem-32 perché il servizio Pathways e MaxText insieme richiedono fino a 240 GB di memoria durante il salvataggio dei checkpoint. Utilizza anche un'immagine con Slurm 26.05, che supporta le sezioni TPU, perché il servizio Pathways invia i job dei worker TPU da questa VM.
    • requeueExitCodes: Slurm inserisce nuovamente in coda un job che esce con uno di questi codici. Questa impostazione consente a Slurm di riavviare un job worker TPU quando viene prerilasciata una VM nello slice, non solo la prima.
  2. Attendi che il cluster sia pronto. Puoi seguire l'avanzamento nella pagina Cluster Director nella console Google Cloud oppure verificare che reconciling sia false nell'output del seguente comando:

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

Configura l'ambiente Pathways

L'ambiente Pathways si trova in /home/pathways nel file system condiviso, quindi lo configuri una volta per cluster. Contiene le immagini container Pathways, un ambiente Python con JAX e pathwaysutils e gli script Pathways.

  1. Connettiti al nodo di accesso. Per altri modi per connetterti, consulta Connettiti a un cluster.

    gcloud compute ssh ${CLUSTER_ID}-login-001 \
        --project=${PROJECT} \
        --zone=${ZONE} \
        --tunnel-through-iap
    
  2. Verifica che le partizioni cpu e tpu esistano e siano nello stato idle:

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

    L'output è simile al seguente:

    PARTITION AVAIL NODES STATE NODELIST FEATURES
    tpu* up 4 idle ${CLUSTER_ID}-nstpu-[0-3]
    cpu up 1 idle ${CLUSTER_ID}-nscpu-0
    
  3. Scarica gli script Pathways sul nodo di accesso:

    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
    

    Questo comando scarica i seguenti script:

    • setup_env.sh: esegue una configurazione una tantum dell'ambiente Pathways.
    • start_pathways.sh: avvia il servizio Pathways.
    • run_worker_slice.sh: avvia il worker Pathways per una sezione TPU (inviata da start_pathways.sh).
    • run_maxtext.sh: esegue un workload di addestramento MaxText di esempio.
  4. Esegui lo script di configurazione. Ci vogliono circa 5 minuti:

    chmod +x *.sh
    ./setup_env.sh
    

    Lo script estrae le immagini del server e del proxy Pathways, crea un ambiente Python con JAX, pathwaysutils e MaxText, copia gli script in /home/pathways e collega ~/pathways a /home/pathways. Termina con un output simile al seguente:

    Environment ready: JAX 0.11.1
    
  5. (Facoltativo) Per consentire ad altri utenti del cluster di accedere all'ambiente Pathways, chiedi loro di collegare /home/pathways alla propria home directory:

    ln -sfn /home/pathways ~/pathways
    

A questo punto, il cluster è pronto per Pathways. Il servizio Pathways viene avviato nell'ambito dell'esecuzione di un workload, perché i workload batch e interattivi lo avviano con impostazioni diverse. Per ulteriori informazioni, consulta Esegui un workload batch con Pathways ed Esegui un workload interattivo con Pathways.

Se riscontri problemi, consulta Risolvi i problemi relativi a Pathways on Cloud.

Pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questa pagina, elimina il cluster Cluster Director quando hai finito:

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

Passaggi successivi