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 Google Cloud konten, lihat Peran dan tugas pengguna GKE umum.

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

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

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

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

Jika Anda memiliki cluster Standard 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 Standard regional, zona tempat jenis akselerator GPU tersedia harus berada di region tempat cluster berada. Saat membuat kumpulan node, 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 cluster:

    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. Mencantumkan jenis akselerator GPU yang tersedia, tidak termasuk Workstation Virtual di lokasi:

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

    Ganti LOCATION_NAME 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 Anda gunakan.
  4. Untuk melihat nama jenis mesin yang dapat Anda tentukan, klik link pada 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 Anda pilih.

Sebelum menggunakan mesin yang dioptimalkan untuk akselerator, pastikan mesin tersebut didukung dengan mode penyediaan mulai fleksibel, 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 dilampirkan ke setiap node di node pool. Nilai yang valid bergantung pada jenis akselerator dan jenis mesin Anda. Setiap jenis mesin memiliki batasan jumlah GPU yang dapat didukungnya. Untuk menentukan nilai yang akan digunakan (selain nilai default 1):

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

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. 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=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
    

    Ganti kode berikut:

    • NODE_POOL_NAME: nama yang Anda pilih untuk node pool.
    • CLUSTER_NAME: nama cluster Standar yang ingin Anda ubah.
    • LOCATION_NAME: region komputasi untuk bidang kontrol cluster.
    • PROJECT_ID: project ID Anda.
    • ACCELERATOR_TYPE: jenis akselerator tertentu (misalnya, nvidia-tesla-t4 untuk NVIDIA T4) yang akan dilampirkan 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: optional. Waktu proses maksimum node dalam detik, hingga default tujuh hari. Nomor yang Anda masukkan harus berakhiran s. Misalnya, untuk menentukan satu hari, masukkan 86400s.
    • 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 flex-start yang diaktifkan.

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

  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:
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 beberapa zona tempat GKE membuat node pool.

Terraform memanggil API untuk membuat cluster dengan node pool yang menggunakan flex-start 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 Tugas 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"
            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. 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