Menjalankan workload batch kecil dengan GPU dan VM mulai fleksibel

Panduan ini menunjukkan cara mengoptimalkan penyediaan GPU untuk workload pelatihan skala menengah dan kecil menggunakan VM Flex-start. VM Flex-start dibuat menggunakan opsi konsumsi flex-start. Dalam panduan ini, Anda menggunakan VM Flex-start untuk men-deploy workload yang terdiri dari dua Tugas Kubernetes. Setiap Tugas 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 flex-start dengan penyediaan dalam antrean.

Panduan ini ditujukan untuk Engineer machine learning (ML), Admin dan operator platform, serta Spesialis Data dan AI yang tertarik menggunakan kemampuan orkestrasi container Kubernetes untuk menjalankan workload batch. Untuk mengetahui informasi selengkapnya tentang peran umum dan contoh tugas yang kami referensikan dalam Google Cloud konten, lihat Peran dan tugas pengguna GKE umum.

Harga flex-start

Flex-start direkomendasikan jika workload Anda memerlukan resource yang disediakan secara dinamis sesuai kebutuhan, hingga tujuh hari dengan reservasi jangka pendek, tanpa pengelolaan kuota yang kompleks, dan akses yang hemat biaya. Flex-start 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 melakukan 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 perintah gcloud components update. Versi gcloud CLI yang lebih lama mungkin tidak mendukung perintah yang dijalankan dalam dokumen ini.
  • Pastikan Anda memiliki cluster Autopilot atau cluster Standar yang menjalankan versi 1.33.0-gke.1712000 atau yang lebih baru.
  • Pastikan Anda memahami batasan flex-start.
  • Saat menggunakan cluster Standar, pastikan Anda mempertahankan setidaknya satu node pool tanpa flex-start yang diaktifkan agar cluster berfungsi dengan benar.
  • Pastikan Anda memiliki kuota untuk GPU preemptible di lokasi node Anda.

Jika Anda tidak memiliki cluster atau cluster Anda tidak memenuhi persyaratan, Anda dapat membuat cluster regional Standar menggunakan gcloud CLI. Tambahkan flag berikut agar Anda dapat mempelajari flex-start:

--location=us-central1 \
--node-locations=us-central1-a,us-central1-b \
--machine-type=g2-standard-8

Saat membuat node pool flex-start, gunakan flag yang disebutkan sebelumnya dan --accelerator type=nvidia-l4,count=1.

Jika Anda memiliki cluster Standar yang memenuhi persyaratan, bagian berikutnya akan memandu Anda memilih jenis akselerator GPU dan jenis mesin untuk cluster Anda.

Memilih jenis akselerator GPU

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

Ketersediaan GPU khusus untuk setiap zona. Anda perlu menemukan jenis akselerator GPU yang tersedia di zona tempat cluster Standar berada. Jika Anda memiliki cluster Standar regional, zona tempat jenis akselerator GPU tersedia harus berada di region tempat cluster berada. Saat membuat node pool, Anda menentukan jenis akselerator dan zona untuk node. Jika Anda menentukan jenis akselerator yang tidak tersedia di lokasi cluster, pembuatan node pool akan gagal.

Jalankan perintah berikut untuk mendapatkan lokasi cluster dan jenis akselerator GPU yang didukung.

  1. Dapatkan lokasi tempat cluster berada:

    gcloud container clusters list
    

    Outputnya mirip dengan hal berikut ini:

    NAME                LOCATION  MASTER_VERSION      MASTER_IP     MACHINE_TYPE  NODE_VERSION        NUM_NODES  STATUS   STACK_TYPE
    example-cluster-1   us-west2  1.33.2-gke.1111000  34.102.3.122  e2-medium     1.33.2-gke.1111000  9          RUNNING  IPV4
    
  2. Buat daftar jenis akselerator GPU yang tersedia, tidak termasuk Workstation Virtual di lokasi:

    gcloud compute accelerator-types list | grep CONTROL_PLANE_LOCATION | grep -v "Workstation"
    

    Ganti CONTROL_PLANE_LOCATION dengan lokasi cluster.

    Misalnya, untuk mendapatkan daftar jenis akselerator GPU di region us-west2, jalankan perintah berikut:

    gcloud compute accelerator-types list | grep us-west2 | grep -v "Workstation"
    

    Outputnya mirip dengan hal berikut ini:

    nvidia-b200            us-west2-c                 NVIDIA B200 180GB
    nvidia-tesla-p4        us-west2-c                 NVIDIA Tesla P4
    nvidia-tesla-t4        us-west2-c                 NVIDIA T4
    nvidia-tesla-p4        us-west2-b                 NVIDIA Tesla P4
    nvidia-tesla-t4        us-west2-b                 NVIDIA T4
    

Memilih jenis mesin yang kompatibel

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

Setelah mengetahui GPU mana yang tersedia di lokasi cluster, Anda dapat menentukan jenis mesin yang kompatibel. Google Cloud membatasi GPU ke seri mesin tertentu. Gunakan langkah-langkah berikut untuk menemukan jenis mesin:

  1. Lihat tabel model GPU yang tersedia.
  2. Temukan baris untuk jenis akselerator GPU yang telah Anda pilih.
  3. Lihat kolom "Seri mesin" untuk baris tersebut. Kolom ini memberi tahu Anda seri mesin yang harus digunakan.
  4. Untuk melihat nama jenis mesin yang dapat Anda tentukan, klik link di seri mesin.

Satu-satunya pengecualian adalah seri mesin N1, yang memberikan panduan tambahan tentang jenis mesin N1 yang dapat Anda gunakan dengan jenis akselerator yang dipilih.

Sebelum menggunakan mesin yang dioptimalkan akselerator, pastikan mesin tersebut didukung dengan mode penyediaan flex-start, seperti yang ditunjukkan dalam Ketersediaan opsi konsumsi menurut jenis mesin.

Menentukan jumlah akselerator

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

Untuk membuat node pool, Anda perlu menentukan jumlah akselerator yang akan dipasang ke setiap node di node pool. Nilai yang valid bergantung pada jenis akselerator dan jenis mesin Anda. Setiap jenis mesin memiliki batas jumlah GPU yang dapat didukungnya. Untuk menentukan nilai yang akan digunakan (selain default 1):

  1. Lihat jenis mesin GPU.
  2. Dalam tabel, telusuri jenis akselerator untuk jenis seri mesin Anda.
  3. Gunakan nilai di kolom "Jumlah GPU".

Membuat node pool dengan flex-start

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

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

gcloud

  1. Buat node pool dengan flex-start:

    gcloud container node-pools create NODE_POOL_NAME \
        --cluster CLUSTER_NAME \
        --location CONTROL_PLANE_LOCATION \
        --project PROJECT_ID \
        --accelerator type=ACCELERATOR_TYPE,count=COUNT \
        --machine-type MACHINE_TYPE \
        --max-run-duration MAX_RUN_DURATION \
        --flex-start \
        --node-locations NODE_ZONES \
        --num-nodes 0 \
        --enable-autoscaling \
        --total-min-nodes 0 \
        --total-max-nodes 5 \
        --location-policy ANY \
        --reservation-affinity none \
        --no-enable-autorepair \
        --consolidation-delay=CONSOLIDATION_DELAY
    

    Ganti kode berikut:

    • NODE_POOL_NAME: nama yang Anda pilih untuk node pool.
    • CLUSTER_NAME: nama cluster Standar yang ingin Anda ubah.
    • CONTROL_PLANE_LOCATION: region komputasi untuk control plane cluster.
    • PROJECT_ID: project ID Anda.
    • ACCELERATOR_TYPE: jenis akselerator tertentu (misalnya, nvidia-tesla-t4 untuk NVIDIA T4) yang akan dipasang ke instance.
    • COUNT: jumlah akselerator yang akan dipasang ke instance. Nilai defaultnya adalah 1.
    • MACHINE_TYPE: jenis mesin yang akan digunakan untuk node.
    • MAX_RUN_DURATION: opsional. Runtime maksimum node dalam detik, hingga default tujuh hari. Angka yang Anda masukkan harus diakhiri dengan s. Misalnya, untuk menentukan satu hari, masukkan 86400s.
    • CONSOLIDATION_DELAY: opsional. Durasi yang ditunggu Cluster Autoscaler sebelum dapat menurunkan skala node yang kurang dimanfaatkan. Gunakan setelan ini untuk menunda penurunan skala dan menyimpan node pool untuk digunakan kembali oleh Pod lain. Angka yang Anda masukkan harus diakhiri dengan s. Misalnya, untuk menentukan satu jam, masukkan 3600s. Tersedia di GKE versi 1.34.1-gke.2364000 dan yang lebih baru.
    • NODE_ZONES: daftar yang dipisahkan koma untuk satu atau beberapa zona tempat GKE membuat node pool.

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

    GKE membuat node pool dengan node yang berisi dua instance dari jenis akselerator yang ditentukan. Node pool awalnya memiliki nol node dan penskalaan otomatis diaktifkan

Terraform

Anda dapat menggunakan flex-start dengan GPU menggunakan modul Terraform.

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

queued_provisioning {
    enabled = false
}

}
node_config {
    machine_type = "MACHINE_TYPE"
    accelerator_type = "ACCELERATOR_TYPE"
    accelerator_count = COUNT
    node_locations = ["NODE_ZONES"]
    flex_start = true
}

Ganti kode berikut:

  • MACHINE_TYPE: jenis mesin yang akan digunakan untuk node.
  • ACCELERATOR_TYPE: jenis akselerator tertentu (misalnya, nvidia-tesla-t4 untuk NVIDIA T4) yang akan dipasang ke instance.
  • COUNT: jumlah akselerator yang akan dipasang ke instance. Nilai defaultnya adalah 1.
  • NODE_ZONES: daftar yang dipisahkan koma untuk satu atau atau lebih zona tempat GKE membuat node pool.

Terraform memanggil Google Cloud API untuk membuat cluster dengan node pool yang menggunakan VM Flex-start dengan GPU. 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.

Memverifikasi status flex-start di node pool

Jalankan perintah berikut:

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

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

Menjalankan workload batch

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

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

  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"
            cloud.google.com/gke-accelerator: ACCELERATOR_TYPE
          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"
            cloud.google.com/gke-accelerator: ACCELERATOR_TYPE
          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. Verifikasi bahwa Tugas 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 Google Cloud akun Anda untuk resource yang Anda gunakan di halaman ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

Menghapus project

  1. Di Google Cloud konsol, buka halaman Manage resources.

    Buka Kelola resource

  2. Pada daftar project, pilih project yang Anda ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus 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 CONTROL_PLANE_LOCATION
    
  3. Hapus cluster:

    gcloud container clusters delete CLUSTER_NAME
    

Langkah berikutnya