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


Panduan ini menunjukkan cara mengoptimalkan penyediaan GPU untuk workload pelatihan skala sedang dan kecil menggunakan mode penyediaan mulai fleksibel. Dalam panduan ini, Anda menggunakan flex-start untuk men-deploy workload yang terdiri dari dua Tugas Kubernetes. Setiap Job memerlukan satu GPU. GKE secara otomatis menyediakan satu node dengan dua GPU A100 untuk menjalankan kedua Tugas.

Jika workload Anda memerlukan pemrosesan terdistribusi multi-node, pertimbangkan untuk menggunakan flex-start dengan penyediaan dalam antrean. Untuk mengetahui informasi selengkapnya, lihat Menjalankan workload skala besar dengan mulai fleksibel dengan penyediaan dalam antrean.

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. Google Cloud

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.
  • Verifikasi bahwa Anda memiliki kuota untuk GPU yang dapat di-preempt di lokasi node Anda.

Membuat node pool dengan flex-start

Untuk membuat node pool dengan flex-start yang diaktifkan pada cluster Standar yang ada, Anda dapat menggunakan gcloud CLI atau Terraform.

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

gcloud

  1. Membuat node pool dengan flex-start:

    gcloud container node-pools create NODE_POOL_NAME \
        --cluster CLUSTER_NAME \
        --location LOCATION_NAME \
        --project PROJECT_ID \
        --accelerator type=nvidia-a100-80gb,count=2 \
        --machine-type a2-ultragpu-2g \
        --max-run-duration MAX_RUN_DURATION \
        --flex-start \
        --num-nodes 0 \
        --enable-autoscaling \
        --total-min-nodes 0 \
        --total-max-nodes 5 \
        --location-policy ANY \
        --reservation-affinity none \
        --no-enable-autorepair
    

    Ganti kode berikut:

    • NODE_POOL_NAME: nama yang Anda pilih untuk node pool.
    • LOCATION_NAME: region komputasi untuk bidang kontrol cluster.
    • PROJECT_ID: project ID Anda.
    • CLUSTER_NAME: nama cluster Standard yang ingin Anda ubah.
    • MAX_RUN_DURATION: optional. Waktu proses maksimum node dalam detik, hingga default tujuh hari.

    Dalam perintah ini, flag --flex-start menginstruksikan gcloud untuk membuat node pool dengan flex-start yang diaktifkan.

    GKE membuat node pool dengan node yang berisi dua GPU A100 (a2-ultragpu-2g). Node pool ini secara otomatis menskalakan node dari nol hingga maksimum lima node.

  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.

Terraform

Anda dapat menggunakan mulai fleksibel dengan GPU menggunakan modul Terraform.

  1. Tambahkan blok berikut ke konfigurasi Terraform Anda:
```hcl
resource "google_container_node_pool" " "gpu_dws_pool" {
name = "gpu-dws-pool"

queued_provisioning {
    enabled = false
}

}
node_config {
    machine_type = "a3-highgpu-8g"
    flex_start = true
}
```

Terraform memanggil API untuk membuat cluster dengan node pool yang menggunakan mulai fleksibel dengan GPU. Google Cloud Node pool awalnya memiliki nol node dan penskalaan otomatis diaktifkan. Untuk mempelajari Terraform lebih lanjut, lihat spesifikasi resource google_container_node_pool di terraform.io.

Menjalankan workload batch

Di bagian ini, Anda akan membuat dua Tugas Kubernetes yang masing-masing memerlukan satu GPU. Pengontrol Job di Kubernetes membuat satu atau beberapa Pod dan memastikan bahwa Pod tersebut berhasil menjalankan tugas tertentu.

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

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

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: job-1
    spec:
      template:
        spec:
          nodeSelector:
            cloud.google.com/gke-flex-start: "true"
          containers:
          - name: container-1
            image: gcr.io/k8s-staging-perf-tests/sleep:latest
            args: ["10s"] # Sleep for 10 seconds
            resources:
              requests:
                  nvidia.com/gpu: 1
              limits:
                  nvidia.com/gpu: 1
          restartPolicy: OnFailure
    ---
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: job-2
    spec:
      template:
        spec:
          nodeSelector:
            cloud.google.com/gke-flex-start: "true"
          containers:
          - name: container-2
            image: gcr.io/k8s-staging-perf-tests/sleep:latest
            args: ["10s"] # Sleep for 10 seconds
            resources:
              requests:
                  nvidia.com/gpu: 1
              limits:
                  nvidia.com/gpu: 1
          restartPolicy: OnFailure
    
  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 -l "job-name in (job-1,job-2)" -o wide
    

    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>
    job-2   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. Google Cloud

Menghapus project

  1. In the Google 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