Membuat cluster Cluster Director dengan Pathways

Halaman ini menunjukkan kepada administrator platform dan engineer machine learning (ML) cara membuat cluster Cluster Director yang diorkestrasi Slurm dan mengonfigurasinya untuk workload Pathways. Dengan menyelesaikan langkah-langkah ini, Anda akan menyediakan cluster dengan slice TPU v6e, node pengontrol CPU, sistem file Google Cloud Managed Lustre bersama, dan lingkungan runtime /home/pathways. Pathways tidak diinstal sebelumnya di cluster Cluster Director: setelah membuat cluster, Anda mendownload skrip Pathways ke node login dan menjalankan skrip penyiapan sekali.

Sebelum memulai

  • Pilih tab untuk melihat bagaimana Anda berencana menggunakan contoh di halaman ini:

    gcloud

    Di konsol Google Cloud , aktifkan Cloud Shell.

    Aktifkan Cloud Shell

    Di bagian bawah konsol Google Cloud , sesi Cloud Shell akan terbuka dan menampilkan prompt command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi pada sesi.

    REST

    Untuk menggunakan contoh REST API di halaman ini dalam lingkungan pengembangan lokal, gunakan kredensial yang Anda berikan ke gcloud CLI.

      Instal Google Cloud CLI.

      Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

    Untuk mengetahui informasi selengkapnya, lihat Melakukan autentikasi untuk menggunakan REST dalam dokumentasi autentikasi Google Cloud .

Sebelum memulai

Sebelum memulai, selesaikan prasyarat berikut:

  • Menginstal Google Cloud CLI.
  • Aktifkan Hypercompute Cluster API.
  • Pastikan akun pengguna Anda dan akun layanan default Compute Engine memiliki peran Identity and Access Management (IAM) yang diperlukan untuk membuat dan terhubung ke cluster Cluster Director. Untuk daftar peran, lihat Sebelum memulai di panduan memulai Cluster Director.
  • Buat pemesanan TPU v6e di zona tempat Anda berencana membuat cluster (misalnya, setidaknya empat VM ct6e-standard-4t untuk dua slice 2x4).
  • Konfigurasikan sudo tanpa sandi pada node cluster untuk pemulihan slice otomatis. Minta administrator untuk memberi Anda peran Compute OS Admin Login (roles/compute.osAdminLogin) di project.
  • Buat bucket Cloud Storage untuk data sementara Pathways dan output workload, serta berikan peran Storage Object User (roles/storage.objectUser) pada project ke akun pengguna Anda dan akun layanan default Compute Engine.

Menyiapkan lingkungan lokal Anda

Login dengan kredensial Google Cloud Anda:

gcloud auth login

Tentukan variabel lingkungan berikut dengan nilai yang sesuai untuk workload Anda:

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

Ganti kode berikut:

  • PROJECT_ID:Google Cloud project ID Anda.
  • REGION: region tempat Anda membuat resource.
  • ZONE: zona tempat Anda membuat resource.
  • CLUSTER_ID: nama cluster. Nama dapat berisi hingga 10 karakter dan hanya boleh menggunakan angka dan huruf kecil.
  • RESERVATION_NAME: nama pemesanan TPU v6e Anda di ZONE.

Membuat cluster Cluster Director

Dalam contoh berikut, Anda membuat cluster dengan dua slice 2x4 TPU v6e (empat VM ct6e-standard-4t) dari pemesanan Anda, dan satu node CPU untuk pengontrol Pathways. Semua node memasang sistem file Managed Lustre bersama di /home. Untuk mengetahui informasi selengkapnya tentang kolom dalam definisi cluster, lihat Membuat cluster kustom.

  1. Buat cluster menggunakan REST API:

    Buat isi permintaan:

    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
    

    Kemudian, kirim permintaan:

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

    Cluster ini mencakup:

    • Partisi tpu: nodeset statis VM TPU v6e yang dipesan. staticNodeCount adalah jumlah VM, dan acceleratorTopology adalah topologi setiap slice. Setiap VM ct6e-standard-4t memiliki empat chip, sehingga slice 2x4 memiliki dua VM. Untuk lebih banyak slice, kalikan: dua slice 2x4 memerlukan staticNodeCount sebesar 4.
    • Partisi cpu: satu VM on-demand yang menjalankan pengelola resource Pathways, server proxy IFRT, dan klien MaxText. Skrip Pathways mengirimkan tugas ke partisi bernama cpu. VM menggunakan jenis mesin n2-highmem-32 karena layanan Pathways dan MaxText bersama-sama memerlukan memori hingga 240 GB saat menyimpan checkpoint. VM ini juga menggunakan image dengan Slurm 26.05, yang mendukung slice TPU, karena layanan Pathways mengirimkan tugas worker TPU dari VM ini.
    • requeueExitCodes: Slurm mengantrekan ulang tugas yang keluar dengan salah satu kode ini. Setelan ini memungkinkan Slurm memulai ulang tugas worker TPU saat VM apa pun dalam slice di-preempt, bukan hanya VM pertama.
  2. Tunggu hingga cluster siap. Anda dapat mengikuti progresnya di halaman Cluster Director di konsol Google Cloud , atau memeriksa apakah reconciling adalah false dalam output perintah berikut:

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

Menyiapkan lingkungan Pathways

Lingkungan Pathways berada di /home/pathways pada sistem file bersama, sehingga Anda menyiapkannya sekali per cluster. Image ini berisi image container Pathways, lingkungan Python dengan JAX dan pathwaysutils, serta skrip Pathways.

  1. Hubungkan ke node login. Untuk cara lain dalam menghubungkan, lihat Menghubungkan ke cluster.

    gcloud compute ssh ${CLUSTER_ID}-login-001 \
        --project=${PROJECT} \
        --zone=${ZONE} \
        --tunnel-through-iap
    
  2. Pastikan partisi cpu dan tpu ada dan dalam status idle:

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

    Outputnya mirip dengan hal berikut ini:

    PARTITION AVAIL NODES STATE NODELIST FEATURES
    tpu* up 4 idle ${CLUSTER_ID}-nstpu-[0-3]
    cpu up 1 idle ${CLUSTER_ID}-nscpu-0
    
  3. Download skrip Pathways ke node login:

    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
    

    Perintah ini mendownload skrip berikut:

    • setup_env.sh: melakukan penyiapan satu kali untuk lingkungan Pathways.
    • start_pathways.sh: memulai layanan Pathways.
    • run_worker_slice.sh: memulai worker Pathways untuk satu slice TPU (dikirim oleh start_pathways.sh).
    • run_maxtext.sh: menjalankan contoh workload pelatihan MaxText.
  4. Jalankan skrip penyiapan. Proses ini memerlukan waktu sekitar 5 menit:

    chmod +x *.sh
    ./setup_env.sh
    

    Skrip ini mengambil image server dan proxy Pathways, membangun lingkungan Python dengan JAX, pathwaysutils, dan MaxText, menyalin skrip ke /home/pathways, dan menautkan ~/pathways ke /home/pathways. Output-nya diakhiri dengan output yang mirip dengan berikut ini:

    Environment ready: JAX 0.11.1
    
  5. Opsional: Untuk memberi pengguna cluster lain akses ke lingkungan Pathways, minta mereka menautkan /home/pathways ke direktori beranda mereka:

    ln -sfn /home/pathways ~/pathways
    

Pada tahap ini, cluster sudah siap untuk Pathways. Anda memulai layanan Pathways sebagai bagian dari menjalankan workload, karena workload batch dan interaktif memulainya dengan setelan yang berbeda. Untuk mengetahui informasi selengkapnya, lihat Menjalankan workload batch dengan Pathways dan Menjalankan workload interaktif dengan Pathways.

Jika Anda mengalami masalah, lihat Memecahkan masalah Pathways di Cloud.

Pembersihan

Agar akun Google Cloud Anda tidak dikenai biaya untuk resource yang digunakan di halaman ini, hapus cluster Cluster Director setelah Anda selesai:

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

Langkah berikutnya