Menjalankan workload batch kecil dengan TPU dan mode penyediaan flex-start


Panduan ini menunjukkan cara mengoptimalkan penyediaan TPU untuk workload pelatihan skala kecil dan menengah menggunakan mode penyediaan mulai fleksibel. Dalam panduan ini, Anda menggunakan mulai fleksibel untuk men-deploy beban kerja yang terdiri dari node pool slice TPU.

Panduan ini ditujukan untuk engineer Machine Learning (ML), Admin dan operator platform, serta spesialis Data dan AI yang tertarik untuk menggunakan kemampuan orkestrasi container Kubernetes dalam menjalankan beban kerja batch. Untuk mengetahui informasi selengkapnya tentang peran umum dan contoh tugas yang kami rujuk dalam konten, lihat Peran dan tugas pengguna GKE Enterprise umum. Trusted Cloud by S3NS

Harga mulai fleksibel

Mulai fleksibel direkomendasikan jika workload Anda memerlukan penyediaan dinamis sumber daya sesuai kebutuhan, hingga tujuh hari dengan reservasi jangka pendek, tanpa pengelolaan kuota yang rumit, dan akses yang hemat biaya. Mulai fleksibel didukung oleh Dynamic Workload Scheduler dan ditagih menggunakan harga Dynamic Workload Scheduler:

  • Diskon (hingga 53%) untuk vCPU, GPU, dan TPU.
  • Anda membayar sesuai penggunaan.

Sebelum memulai

Sebelum memulai, pastikan Anda telah menjalankan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Aktifkan Google Kubernetes Engine API
  • Jika ingin menggunakan Google Cloud CLI untuk tugas ini, instal lalu lakukan inisialisasi gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan gcloud components update.
  • Verifikasi bahwa Anda memiliki cluster Autopilot atau cluster Standard yang menjalankan versi 1.33.0-gke.1712000 atau yang lebih baru.
  • Pastikan Anda memahami batasan mulai fleksibel.
  • Saat menggunakan cluster Standar, pastikan Anda mempertahankan setidaknya satu node pool tanpa mengaktifkan flex-start agar cluster berfungsi dengan benar.
  • Pastikan Anda memiliki kuota untuk TPU preemptible di lokasi node Anda.

Membuat node pool dengan flex-start

Untuk membuat node pool dengan flex-start yang diaktifkan pada cluster Standar yang ada, gunakan gcloud CLI.

Jika Anda menggunakan cluster dalam mode Autopilot, lewati bagian ini dan buka bagian Menjalankan workload batch.

Anda dapat membuat node pool slice TPU host tunggal atau multi-host dengan flex-start:

  1. Membuat node pool dengan flex-start:

    Host tunggal

    gcloud container node-pools create NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --location=LOCATION_NAME \
        --node-locations=NODE_ZONES \
        --machine-type=MACHINE_TYPE \
        --reservation-affinity=none \
        --enable-autoscaling \
        --flex-start \
        --num-nodes 0 \
        --min-nodes=0 \
        --max-nodes=1
    

    Ganti kode berikut:

    • NODE_POOL_NAME: nama yang Anda pilih untuk node pool.
    • CLUSTER_NAME: nama cluster.
    • LOCATION_NAME: region komputasi untuk bidang kontrol cluster.
    • NODE_ZONES: daftar yang dipisahkan koma untuk satu atau beberapa zona tempat GKE membuat node pool.
    • MACHINE_TYPE: jenis mesin yang akan digunakan untuk node. Untuk mengetahui informasi selengkapnya tentang jenis mesin yang kompatibel dengan TPU, gunakan tabel di Memilih versi TPU.

    Multi-host

    gcloud container node-pools create NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --location=LOCATION_NAME \
        --node-locations=NODE_ZONES \
        --machine-type=MACHINE_TYPE \
        --tpu-topology=TPU_TOPOLOGY \
        --flex-start \
        --enable-autoscaling \
        --num-nodes=0 \
        --max-nodes=2 \
        --reservation-affinity=none \
        --no-enable-autorepair
    

    Ganti kode berikut:

    • NODE_POOL_NAME: nama yang Anda pilih untuk node pool.
    • CLUSTER_NAME: nama cluster.
    • LOCATION_NAME: region komputasi untuk bidang kontrol cluster.
    • NODE_ZONES: daftar yang dipisahkan koma untuk satu atau beberapa zona tempat GKE membuat node pool.
    • MACHINE_TYPE: jenis mesin yang akan digunakan untuk node. Misalnya, Anda dapat menggunakan ct6e-standard-4t untuk TPU Trillium. Untuk mempelajari jenis mesin yang tersedia lebih lanjut, lihat Memilih versi TPU.
    • TPU_TOPOLOGY: topologi fisik untuk slice TPU. Format topologi bergantung pada versi TPU. Untuk mempelajari topologi TPU lebih lanjut, gunakan tabel di Memilih topologi.

    Perintah sebelumnya menggunakan flag wajib berikut saat Anda membuat node pool dengan flex-start:

    • --enable-autoscaling: Penyediaan flex-start hanya menyediakan resource komputasi yang diperlukan saat workload Anda berjalan. Anda harus menetapkan parameter berikut:

      • --num-nodes=0
      • --min-nodes=0
      • --max-nodes ditetapkan ke jumlah virtual machine yang diperlukan slice TPU Anda.

        Misalnya, perintah pembuatan node pool Anda dapat menyertakan parameter berikut:

        ...
        --machine-type=ct6e-standard-4t \
        --tpu-topology=4x4 \
        --enable-autoscaling \
        --num-nodes=0 \
        --max-nodes=4 \
        

        Perintah ini menetapkan kolom --max-nodes ke 4 karena topologi 4x4 terdiri dari 16 chip dan setiap VM ct6e-standard-4t memiliki 4 chip.

      Penskala otomatis cluster melakukan penskalaan hingga jumlah node yang diperlukan beban kerja Anda. Setelah beban kerja Anda selesai, autoscaler cluster akan menurunkan skala ke nol node.

    • --reservation-affinity=none: flex-start tidak menggunakan atau memerlukan reservasi.

  2. Verifikasi status mulai fleksibel di node pool:

    gcloud container node-pools describe NODE_POOL_NAME \
        --cluster CLUSTER_NAME \
        --location LOCATION_NAME \
        --format="get(config.flexStart)"
    

    Jika flex-start diaktifkan di node pool, kolom flexStart akan disetel ke True.

Menjalankan workload batch

Di bagian ini, Anda akan membuat Job yang menjadwalkan node TPU dengan flex-start. Pengontrol Job di Kubernetes membuat satu atau beberapa Pod dan memastikan bahwa Pod tersebut berhasil menjalankan tugas tertentu.

  1. Di Trusted Cloud konsol, luncurkan sesi Cloud Shell dengan mengklik Ikon aktivasi Cloud Shell Activate Cloud Shell. Sesi akan terbuka di panel bawah konsol Trusted Cloud .

  2. Buat file bernama dws-flex-start.yaml:

    Host tunggal

    Gunakan manifes berikut untuk file dws-flex-start.yaml:

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: job-1
    spec:
      template:
        spec:
          nodeSelector:
            cloud.google.com/gke-flex-start: "true"
            cloud.google.com/gke-tpu-accelerator: ACCELERATOR_TYPE
            cloud.google.com/gke-tpu-topology: TPU_TOPOLOGY
          containers:
          - name: container-1
            image: gcr.io/k8s-staging-perf-tests/sleep:latest
            args: ["3600s"] # Sleep for 1 hour
            resources:
              requests:
                  google.com/tpu: NUM_CHIPS
              limits:
                  google.com/tpu: NUM_CHIPS
          restartPolicy: OnFailure
    

    Multi-host

    Gunakan manifes berikut untuk file dws-flex-start.yaml:

    apiVersion: v1
    kind: Service
    metadata:
      name: headless-svc
    spec:
      clusterIP: None
      selector:
        job-name: job-1
    ---
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: job-1
    spec:
      backoffLimit: 0
      completions: 2
      parallelism: 2
      completionMode: Indexed
      template:
        spec:
          subdomain: headless-svc
          restartPolicy: Never
          nodeSelector:
              cloud.google.com/gke-flex-start: "true"
              cloud.google.com/gke-tpu-accelerator: ACCELERATOR_TYPE
              cloud.google.com/gke-tpu-topology: TPU_TOPOLOGY
          containers:
          - name: tpu-job
            image: python:3.10
            ports:
            - containerPort: 8471 # Default port using which TPU VMs communicate
            - containerPort: 8431 # Port to export TPU runtime metrics, if supported.
            securityContext:
              privileged: true
            command:
            - bash
            - -c
            - |
              pip install 'jax[tpu]' -f https://storage.googleapis.com/jax-releases/libtpu_releases.html
              python -c 'import jax; print("TPU cores:", jax.device_count())'
            resources:
              requests:
                google.com/tpu: NUM_CHIPS
              limits:
                google.com/tpu: NUM_CHIPS
    

    Ganti kode berikut:

    • ACCELERATOR_TYPE: jenis akselerator TPU yang Anda gunakan saat membuat node pool. Misalnya, tpu-v4-podslice atau tpu-v5-lite-podslice.
    • TPU_TOPOLOGY: topologi fisik untuk slice TPU. Misalnya, nilainya mungkin 4x4x4 atau 2x2, bergantung pada versi TPU.
    • NUM_CHIPS: jumlah chip TPU di setiap VM adalah satu, empat, atau delapan. Untuk mempelajari lebih lanjut, lihat Versi TPU.
  3. Terapkan manifes dws-flex-start.yaml:

    kubectl apply -f dws-flex-start.yaml
    
  4. Pastikan bahwa Job berjalan di node yang sama:

    kubectl get pods
    

    Outputnya mirip dengan hal berikut ini:

    NAME    READY   STATUS      RESTARTS   AGE   IP       NODE               NOMINATED NODE   READINESS GATES
    job-1   0/1     Completed   0          19m   10.(...) gke-flex-zonal-a2  <none>           <none>
    

Pembersihan

Agar tidak dikenai biaya pada akun Anda untuk resource yang Anda gunakan di halaman ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource. Trusted Cloud by S3NS

Menghapus project

  1. In the Trusted Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Menghapus resource satu per satu

  1. Hapus Tugas:

    kubectl delete job -l "job-name in (job-1,job-2)"
    
  2. Hapus node pool:

    gcloud container node-pools delete NODE_POOL_NAME \
          --location LOCATION_NAME
    
  3. Hapus cluster:

    gcloud container clusters delete CLUSTER_NAME
    

Langkah berikutnya