Meningkatkan kemudahan mendapatkan instance dengan menggunakan fleksibilitas instance

Dokumen ini menjelaskan cara membuat dan menjalankan tugas Batch yang menggunakan fleksibilitas instance. Fleksibilitas instance memungkinkan Anda mengizinkan tugas berjalan di beberapa jenis mesin yang Anda tentukan dan dapat diberi peringkat secara opsional.

Dengan mengizinkan lebih banyak jenis mesin untuk tugas, Anda dapat menggunakan fleksibilitas instance untuk meningkatkan ketersediaan, yaitu probabilitas bahwa resource tersedia untuk menjalankan tugas Anda. Untuk mengetahui informasi selengkapnya tentang cara memilih fitur ketersediaan yang akan digunakan untuk workload Anda, lihat Meningkatkan ketersediaan resource. Misalnya, menggunakan fleksibilitas instance dapat membantu Anda melakukan hal berikut:

  • Mengurangi kemungkinan terjadinya error ketersediaan resource dan keterlambatan penjadwalan terkait.
  • Pilih resource dengan ketersediaan yang lebih tinggi untuk membantu tugas selesai lebih cepat—misalnya:
    • Meningkatkan probabilitas untuk mendapatkan lebih banyak instance untuk tugas yang mendukung pemrosesan paralel.
    • Dapatkan Spot VM yang lebih kecil kemungkinannya untuk di-preempt.

Sebelum memulai

  1. Jika belum pernah menggunakan Batch, baca Mulai menggunakan Batch dan aktifkan Batch dengan menyelesaikan prasyarat untuk project dan pengguna.
  2. Untuk mendapatkan izin yang Anda perlukan untuk membuat tugas, minta administrator untuk memberi Anda peran IAM berikut:

    Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.

    Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Pembatasan

Jika tugas menggunakan fleksibilitas instance, semua batasan berikut berlaku:

  • Peningkatan ketersediaan meningkat seiring dengan jumlah jenis mesin yang Anda izinkan untuk digunakan oleh tugas.

  • Tugas tidak dapat menentukan model penyediaan FLEX_START atau model penyediaan RESERVATION_BOUND.

  • Tugas tidak dapat menggunakan reservasi yang ditargetkan secara khusus. (Kolom reservation harus tidak ditentukan atau ditetapkan ke NO_RESERVATION.)

    Reservasi yang ditargetkan secara khusus mencakup semua reservasi untuk model penyediaan RESERVATION_BOUND dan beberapa reservasi untuk model penyediaan STANDARD. Fitur ini pada dasarnya tidak kompatibel karena pembuatan instance hanya dapat berhasil untuk jenis mesin pemesanan.

  • Setiap tugas dapat memiliki hingga 50 pilihan instance.

  • Setiap pilihan instance dalam tugas harus memiliki nama unik, peringkat unik, dan satu atau beberapa jenis mesin unik.

  • Jenis mesin tidak dapat diulang; sertakan setiap jenis mesin hanya dalam satu pilihan instance per tugas.

  • Setiap tugas dapat memiliki hingga 200 jenis mesin unik di seluruh pilihan instancenya.

  • Meskipun menentukan beberapa jenis mesin dalam pilihan instance yang sama bersifat opsional, hal ini diperlukan jika Anda menginginkan resource dengan kemampuan perolehan yang lebih tinggi.

    • Batch mencoba memilih satu atau beberapa jenis mesin dengan ketersediaan tertinggi hanya jika pemilihan instance untuk peringkat memiliki beberapa jenis mesin. Misalnya, pilihan ini penting jika Anda ingin tugas Anda memiliki VM Spot yang cenderung tidak di-preempt atau lebih banyak instance untuk tugas yang dapat menjalankan tugas secara paralel.
    • Jika tidak, saat pemilihan instance untuk peringkat hanya memiliki satu jenis mesin, fleksibilitas instance hanya membantu mencegah error ketersediaan resource.
  • Tugas tidak dapat menyertakan kolom machineType, dan jenis mesin untuk template instance yang ditentukan tugas akan diabaikan.

  • Anda harus memverifikasi bahwa setiap properti yang Anda tentukan untuk tugas kompatibel dengan setiap jenis mesin yang diizinkan. Jika tidak, tugas mungkin gagal setelah dikirimkan karena tidak dapat membuat instance. Misalnya, sebaiknya Anda memverifikasi bahwa setidaknya properti berikut untuk tugas kompatibel dengan semua jenis mesin:

    • lokasi (jika ditentukan, kolom allowedLocations[]; jika tidak, location)
    • resource komputasi per tugas (kolom computeResource)
    • disk dan image (kolom volumes[], kolom disk[], dan kolom bootDisk)
    • jaringan (kolom network)
    • semua properti instance lainnya (sub-bidang instances[]):

      • platform CPU minimum (kolom minCpuPlatform)
      • model penyediaan (kolom provisioningModel)
      • GPU (kolom accelerators[])
  • Anda tidak dapat mengganti disk dan platform CPU minimum untuk tugas Batch. Semua jenis mesin menggunakan nilai yang Anda tentukan (di subbidang policy atau template instance) atau, jika tidak ditentukan, menggunakan nilai default untuk jenis mesin dalam pemilihan instance prioritas tertinggi. Oleh karena itu, sebaiknya Anda melakukan semua hal berikut:

    • Pastikan jenis boot disk kompatibel untuk setiap jenis mesin yang diizinkan. Singkatnya, jenis mesin generasi ke-4 dan yang lebih baru tidak mendukung disk persisten, jenis mesin generasi ke-2 dan yang lebih lama tidak mendukung Hyperdisk, dan jenis mesin generasi ke-3 dan yang lebih lama menggunakan disk boot persisten secara default.

    • Jangan tentukan platform CPU minimum atau disk opsional kecuali Anda telah memverifikasi bahwa platform CPU minimum atau disk opsional tersebut didukung untuk setiap jenis mesin yang diizinkan.

Membuat tugas yang diizinkan untuk menggunakan beberapa jenis mesin

Untuk membuat tugas yang diizinkan menggunakan beberapa jenis mesin, pilih salah satu metode berikut.

gcloud

Untuk mengonfigurasi beberapa jenis mesin saat menggunakan Google Cloud CLI untuk membuat tugas, selesaikan langkah-langkah berikut:

  1. Sertakan kolom instanceFlexibilityPolicy dan sub-kolom di kolom allocationPolicy dalam file JSON yang menentukan detail konfigurasi tugas Anda. Kolom instanceFlexibilityPolicy mendukung satu atau beberapa pilihan instance, yang masing-masing memiliki nama unik, peringkat unik, dan daftar satu atau beberapa jenis mesin.

    "allocationPolicy":{
      "instanceFlexibilityPolicy":{
        "instanceSelections":{
          "INSTANCE_SELECTION_NAME":{
            "rank": RANK,
            "machineTypes": [MACHINE_TYPES]
          }
        }
      }
    }
    

    Ganti kode berikut:

    • INSTANCE_SELECTION_NAME: nama untuk pemilihan instance. Jika tugas memiliki beberapa pilihan instance, pastikan setiap nama dalam tugas ini unik.

    • RANK: Opsional: bilangan bulat nol atau lebih besar yang menunjukkan prioritas untuk pemilihan instance ini, dengan nilai terendah adalah prioritas tertinggi. Jika tidak ditentukan, nilai defaultnya adalah 0 (prioritas tertinggi). Jika pekerjaan memiliki beberapa pilihan instance, pastikan setiap peringkat dalam pekerjaan ini unik.

    • MACHINE_TYPES: daftar yang dipisahkan koma dari satu atau beberapa jenis mesin, yang ditulis sebagai string, untuk pemilihan instance ini. Anda hanya dapat menyertakan setiap jenis mesin dalam satu pilihan instance per tugas. Misalnya, daftar tiga jenis mesin dapat ditulis sebagai berikut:

      "MACHINE_TYPE_1", "MACHINE_TYPE_2", "MACHINE_TYPE_3"
      

      Ganti MACHINE_TYPE_1, MACHINE_TYPE_2, MACHINE_TYPE_3 masing-masing dengan jenis mesin—misalnya, e2-micro, e2-small, dan n1-standard-2.

    Untuk mengetahui informasi selengkapnya, lihat juga contoh tugas.

  2. Saat fitur ini berada dalam Pratinjau, Anda harus menggunakan perintah gcloud alpha batch jobs submit untuk membuat dan mengirimkan tugas.

    gcloud alpha batch jobs submit JOB_NAME \
      --location LOCATION \
      --config JSON_CONFIGURATION_FILE
    

    Ganti kode berikut:

    • JOB_NAME: nama tugas.
    • LOCATION: lokasi tugas.
    • JSON_CONFIGURATION_FILE: jalur untuk file JSON dengan detail konfigurasi tugas.

REST

Untuk menggunakan Batch API guna membuat tugas yang menggunakan beberapa jenis mesin, gunakan metode v1alpha jobs.create saat fitur ini dalam Pratinjau.

Untuk menentukan beberapa jenis mesin untuk tugas, sertakan kolom instanceFlexibilityPolicy dan sub-kolom di kolom allocationPolicy dalam isi utama di file JSON. Kolom instanceFlexibilityPolicy mendukung satu atau beberapa pilihan instance, yang masing-masing memiliki nama unik, peringkat unik, dan daftar satu atau beberapa jenis mesin.

"allocationPolicy":{
  "instanceFlexibilityPolicy":{
    "instanceSelections":{
      "INSTANCE_SELECTION_NAME":{
        "rank": RANK,
        "machineTypes": [MACHINE_TYPES]
      }
    }
  }
}

Ganti kode berikut:

  • INSTANCE_SELECTION_NAME: nama untuk pilihan instance. Jika tugas memiliki beberapa pilihan instance, pastikan setiap nama dalam tugas ini unik.

  • RANK: Opsional: bilangan bulat nol atau lebih besar yang merepresentasikan prioritas untuk pemilihan instance ini, dengan nilai terendah adalah prioritas tertinggi. Jika tidak ditentukan, nilai defaultnya adalah 0 (prioritas tertinggi). Jika lowongan memiliki beberapa pilihan instance, pastikan setiap peringkat dalam lowongan ini unik.

  • MACHINE_TYPES: daftar yang dipisahkan koma dari satu atau beberapa jenis mesin, yang ditulis sebagai string, untuk pemilihan instance ini. Anda hanya dapat menyertakan setiap jenis mesin dalam satu pilihan instance per tugas. Misalnya, daftar tiga jenis mesin dapat ditulis sebagai berikut:

    "MACHINE_TYPE_1", "MACHINE_TYPE_2", "MACHINE_TYPE_3"
    

    Ganti MACHINE_TYPE_1, MACHINE_TYPE_2, MACHINE_TYPE_3 masing-masing dengan jenis mesin—misalnya, e2-micro, e2-small, dan n1-standard-2.

Untuk mengetahui informasi selengkapnya, lihat juga contoh tugas.

Contoh file konfigurasi JSON tugas

Misalnya, saat menggunakan gcloud CLI atau Batch API, Anda dapat menggunakan file konfigurasi JSON berikut untuk membuat tugas skrip dasar yang memiliki dua pilihan instance:

  • Pemilihan instance bernama first-choice memiliki prioritas tertinggi ("rank": 0) dan tiga jenis mesin (e2-micro, e2-small, dan n1-standard-2).
  • Pilihan instance bernama second-choice memiliki prioritas kedua ("rank": 1) dan satu jenis mesin (e2-medium).
{
  "taskGroups": [
    {
      "taskSpec": {
        "runnables": [
          {
            "script": {
              "text": "echo Hello World! This is task $BATCH_TASK_INDEX."
            }
          }
        ]
      },
      "taskCount": 3
    }
  ],
  "allocationPolicy":{
    "instanceFlexibilityPolicy":{
      "instanceSelections":{
        "first-choice":{
          "rank": 0,
          "machineTypes": ["e2-micro", "e2-small", "n1-standard-2"]
        },
        "second-choice":{
          "rank": 1,
          "machineTypes": ["e2-medium"]
        }
      }
    }
  }
}

Langkah berikutnya