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 pada beberapa jenis mesin yang Anda tentukan dan dapat secara opsional diberi peringkat.

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 probabilitas error ketersediaan resource dan penundaan penjadwalan terkait.
  • Memilih resource dengan ketersediaan yang lebih tinggi untuk membantu tugas selesai lebih cepat—misalnya:
    • Meningkatkan probabilitas mendapatkan lebih banyak instance untuk tugas yang mendukung pemrosesan paralel.
    • Mendapatkan VM Spot yang cenderung tidak 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

Saat tugas menggunakan fleksibilitas instance, semua batasan berikut akan 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 field 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 reservasi.

  • 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 instance-nya.

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

    • Batch mencoba memilih satu atau beberapa jenis mesin dengan ketersediaan tertinggi hanya jika pilihan 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 pilihan 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 apa pun 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 verifikasi 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 (subkolom 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 subkolom policy atau template instance) atau, jika tidak ditentukan, menggunakan nilai default untuk jenis mesin dalam pilihan instance prioritas tertinggi. Oleh karena itu, sebaiknya lakukan semua hal berikut:

    • Verifikasi bahwa jenis disk booting 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 booting persisten secara default.

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

Membuat tugas yang diizinkan 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 instanceFlexibilityPolicy kolom dan subkolom di allocationPolicy kolom 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 pilihan instance. Jika tugas memiliki beberapa pilihan instance, pastikan setiap nama dalam tugas ini unik.

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

    • MACHINE_TYPES: daftar yang dipisahkan koma dari satu atau beberapa jenis mesin, yang ditulis sebagai string, untuk pilihan instance ini. Anda dapat menyertakan setiap jenis mesin hanya 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 dengan jenis mesin—misalnya, e2-micro, e2-small, dan n1-standard-2.

    Untuk mengetahui informasi selengkapnya, lihat juga contoh tugas.

  2. Saat fitur ini 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 subkolom di kolom allocationPolicy di isi utama dalam 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 mewakili prioritas untuk pilihan instance ini, dengan nilai terendah adalah prioritas tertinggi. Jika tidak ditentukan, nilai default-nya adalah 0 (prioritas tertinggi). Jika tugas memiliki beberapa pilihan instance, pastikan setiap peringkat dalam tugas ini unik.

  • MACHINE_TYPES: daftar yang dipisahkan koma dari satu atau beberapa jenis mesin, yang ditulis sebagai string, untuk pilihan instance ini. Anda dapat menyertakan setiap jenis mesin hanya 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 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:

  • Pilihan 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