Melakukan pemeliharaan host untuk node yang menjalankan workload pelatihan dan inferensi

Dokumen ini menjelaskan cara melakukan pemeliharaan host pada instance Compute Engine pokok untuk node di cluster Google Kubernetes Engine (GKE). Anda hanya perlu mengelola pemeliharaan ini secara aktif untuk jenis instance Compute Engine tertentu yang tidak melakukan migrasi langsung, termasuk instance dengan GPU dan TPU. Strategi yang dijelaskan dalam dokumen ini berfungsi dengan baik untuk beban kerja pelatihan dan inferensi. Jika Anda hanya perlu melakukan pemeliharaan host secara manual untuk satu node, atau workload Anda dapat mentoleransi pemeliharaan host otomatis, lihat Memahami cara melakukan pemeliharaan host di GKE.

Strategi ini melakukan pemeliharaan host untuk grup node, dan secara opsional, memulai upgrade cluster GKE.

Gunakan strategi paralel untuk node workload yang dapat memiliki satu periode waktu nonaktif, seperti untuk node workload pelatihan. Gunakan strategi rolling untuk node workload yang dapat memiliki batch waktu nonaktif sambil mempertahankan ketersediaan sebagian besar resource, seperti untuk node workload inferensi.

Menggunakan strategi paralel untuk mengupdate node workload pelatihan

Strategi ini melakukan perubahan secara bersamaan untuk sekelompok node yang menggunakan akselerator. Anda dapat menggunakan strategi ini untuk workload pelatihan. Atau, Anda dapat menggunakannya untuk jenis beban kerja lain yang metode perubahan paling tidak mengganggu adalah dengan memiliki satu periode waktu nonaktif sepenuhnya untuk semua node dalam grup dan beban kerja yang berjalan di dalamnya.

Strategi ini mengikuti langkah-langkah tingkat tinggi berikut:

  1. Hentikan workload: pilih node pool dan hentikan workload yang berjalan di node pool tersebut atau pindahkan workload ke node lain yang tetap tersedia.
  2. Memicu pemeliharaan host: menerapkan label pemeliharaan ke semua node yang dipilih secara bersamaan dan menunggu hingga proses selesai di semua node.
  3. Mengupgrade versi GKE: mengubah versi GKE node.
  4. Mulai ulang workload: setelah semua pemeliharaan dan upgrade host selesai, mulai ulang workload Anda.

Petunjuk yang diberikan melakukan perubahan untuk satu node pool. Namun, Anda dapat menyesuaikan langkah-langkah untuk melakukan perubahan pada beberapa node pool secara bersamaan. Pastikan, sebelum memulai langkah-langkah ini, Anda memiliki waktu setidaknya beberapa jam saat workload ini tidak perlu berjalan di node ini.

Untuk meminimalkan gangguan saat menerima perubahan penting untuk instance Compute Engine yang mendasarinya dan node GKE, gunakan periode waktu nonaktif ini untuk melakukan pemeliharaan host dan upgrade versi GKE. Namun, Anda hanya dapat melakukan pemeliharaan host jika tidak ingin mengupgrade versi node GKE.

Pertimbangan sebelum memulai

Tinjau pertimbangan berikut sebelum Anda memulai:

  • Hindari men-deploy ulang workload: untuk menghindari penundaan yang tidak perlu karena PodDisruptionBudgets, jangan men-deploy ulang workload apa pun hingga Anda menyelesaikan semua langkah.
  • Rencanakan gangguan: pastikan workload Anda dapat terganggu selama jangka waktu tertentu. Langkah-langkah ini memerlukan waktu beberapa jam untuk diselesaikan, terutama karena waktu yang diperlukan untuk pemeliharaan host.

Melakukan update untuk semua node secara bersamaan

Untuk melakukan pemeliharaan host dan, secara opsional, upgrade versi GKE, selesaikan langkah-langkah berikut:

  1. Siapkan workload Anda: hentikan workload Anda, atau pastikan workload tersebut telah mengambil snapshot atau titik pemeriksaan terbaru.
  2. Mulai pemeliharaan host: terapkan label pemeliharaan ke semua node di kumpulan node yang dipilih:

    kubectl label nodes -l cloud.google.com/gke-nodepool=NODE_POOL_NAME cloud.google.com/perform-maintenance=true --overwrite
    

    Compute Engine mulai menguras dan mengupdate instance pokok secara bersamaan. Proses ini mungkin memerlukan waktu beberapa jam. Untuk mengetahui informasi selengkapnya, lihat Proses penghentian yang benar.

  3. Memantau status pemeliharaan host: GKE menghapus label pemeliharaan saat pemeliharaan selesai. Setelah pemeliharaan selesai, Anda dapat menemukan log dengan pesan berikut di Cloud Logging:

    Maintenance window has completed for this instance. All maintenance
    notifications on the instance have been removed.
    
  4. Opsional: Upgrade versi node GKE: ikuti petunjuk untuk mengupgrade versi GKE node.

Menggunakan strategi berkelanjutan untuk mengupdate node workload inferensi

Strategi ini menguraikan pendekatan manual untuk melakukan pemeliharaan pada node GKE yang menjalankan workload inferensi. Proses ini melibatkan update node secara berkelompok untuk mempertahankan ketersediaan layanan. Metode ini paling cocok untuk workload yang dapat mentoleransi persentase replika tertentu yang offline untuk sementara.

Strategi ini mengikuti langkah-langkah tingkat tinggi berikut:

  1. Mengidentifikasi dan mengelompokkan node: pilih node pool yang akan diupdate. Kelompokkan node ke dalam batch yang ukurannya sesuai dengan toleransi kegagalan workload Anda.
  2. Ulangi proses untuk setiap batch: untuk setiap batch, terapkan label pemeliharaan dan pantau batch node hingga label dihapus.
  3. Upgrade versi GKE: setelah semua batch menyelesaikan pemeliharaan host, ubah versi node GKE.

Pertimbangan sebelum memulai

Tinjau pertimbangan berikut sebelum Anda memulai:

  • Pahami deployment Anda: keberhasilan memerlukan pengetahuan mendetail tentang distribusi workload, penempatan replika, dan domain kegagalan. Pastikan Anda mempertahankan kapasitas penayangan yang memadai selama proses.
  • Rencanakan ukuran batch: perbarui node dalam batch. Ukuran setiap batch ditentukan oleh toleransi kesalahan beban kerja Anda. Faktor yang perlu dipertimbangkan mencakup hal berikut:
    • Jumlah replika per model penayangan.
    • Distribusi replika di seluruh node dan domain gagal.
    • PodDisruptionBudgets dapat membantu menerapkan jumlah maksimum Pod yang tidak berfungsi secara bersamaan.
    • Rekomendasi: untuk menyederhanakan pengelolaan, pertimbangkan untuk mendedikasikan node pool yang berbeda untuk berbagai set replika, yang memungkinkan Anda mengisolasi domain kegagalan di tingkat node pool.
  • Menghitung batasan waktu: pertimbangkan faktor waktu berikut:
    • Setiap batch dapat memerlukan waktu beberapa jam untuk menyelesaikan langkah pemeliharaan host.
    • Hitung ukuran batch minimum untuk membantu memastikan bahwa semua pemeliharaan selesai dalam batas waktu yang diperlukan:
      1. MAINTENANCE_BLOCKS = floor(HOURS_TO_MAINTENANCE / 4) (dengan HOURS_TO_MAINTENANCE adalah total waktu yang tersedia).
      2. MIN_PER_BATCH = TOTAL_NODE_COUNT / MAINTENANCE_BLOCKS
    • Ukuran tumpukan yang Anda pilih harus sama dengan atau lebih besar dari MIN_PER_BATCH.
  • Tinjau jenis workload tertentu: pertimbangkan hal berikut untuk jenis konfigurasi masing-masing:
    • Mixture of Experts (MOE): pastikan strategi batching Anda mempertahankan jumlah minimum replika yang diperlukan untuk setiap model.
    • Penayangan yang tidak digabungkan: pastikan Anda melacak semua replika yang terlibat dalam penyiapan yang tidak digabungkan saat merencanakan batch.
    • Node pool multi-host (TPU, MNNVL): untuk konfigurasi ini, Anda mungkin akan menonaktifkan seluruh node pool sekaligus. Rencanakan domain kegagalan di beberapa node pool dengan tepat.

Melakukan update berkelanjutan dalam batch

Untuk melakukan update bertahap, selesaikan langkah-langkah berikut:

  1. Mengidentifikasi node untuk pemeliharaan: identifikasi semua node tempat Anda ingin melakukan pemeliharaan, lalu simpan daftar ini. Untuk mengidentifikasi node, gunakan salah satu metode berikut atau pilih secara manual:

    • Mendapatkan semua node di cluster yang menggunakan akselerator (TPU atau GPU):

      kubectl get nodes -o json | jq -r '.items[] | select(.spec.taints[]? | select(.key=="nvidia.com/gpu" or .key=="google.com/tpu")) | .metadata.name'
      
    • Mendapatkan semua node dalam node pool tertentu:

      kubectl get nodes -l cloud.google.com/gke-nodepool=NODE_POOL_NAME --no-headers -o custom-columns=":metadata.name"
      

      Ganti NODE_POOL_NAME dengan nama node pool.

    • Mendapatkan semua node dengan label tertentu:

      kubectl get nodes -l LABEL -o jsonpath='{.items[*].metadata.name}'
      

      Ganti LABEL dengan label node.

  2. Membagi node menjadi beberapa batch: membagi node yang teridentifikasi menjadi beberapa batch yang sama. Tentukan ukuran batch menggunakan formula yang dijelaskan dalam item daftar Menghitung batasan waktu di bagian Pertimbangan sebelum Anda memulai sebelumnya.

  3. Lakukan pemeliharaan host: untuk setiap batch, selesaikan langkah-langkah berikut:

    1. Pilih batch node dan terapkan label pemeliharaan:

      kubectl label nodes LIST_OF_NODES_IN_BATCH cloud.google.com/perform-maintenance=true --overwrite
      

      Ganti LIST_OF_NODES_IN_BATCH dengan daftar node yang dipisahkan spasi dari batch. Contoh, node-1 node-2 node-3.

      .
    2. Pantau status pemeliharaan host. GKE menghapus label pemeliharaan saat pemeliharaan selesai. Setelah pemeliharaan selesai, Anda dapat menemukan log dengan pesan berikut di Logging:

      Maintenance window has completed for this instance. All maintenance
      notifications on the instance have been removed.
      
    3. Ulangi dua langkah sebelumnya untuk setiap batch yang tersisa hingga Anda menyelesaikan pemeliharaan host untuk semua batch.

  4. Opsional: Upgrade versi node GKE: lakukan langkah ini hanya setelah pemeliharaan host selesai untuk semua node, untuk menghindari skenario saat node GKE di-deploy di host yang belum menyelesaikan pemeliharaan. Lihat petunjuk di bagian berikut.

Mengupgrade versi GKE node

Pertimbangkan jumlah node yang ingin Anda upgrade secara bersamaan. Dengan strategi paralel, Anda melakukan pemeliharaan host untuk seluruh node pool atau beberapa node pool secara bersamaan. Dengan strategi berkelanjutan, Anda melakukan pemeliharaan host dalam batch. Tentukan metode upgrade yang akan Anda gunakan berdasarkan ukuran grup node:

  • Strategi paralel: jika setiap node pool Anda memiliki 20 node atau kurang per zona, gunakan upgrade lonjakan. Jika setiap node pool Anda memiliki lebih dari 20 node per zona, hapus dan buat ulang node pool.
  • Strategi rolling: jika batch Anda memiliki 20 node, per zona, per node pool, atau kurang, gunakan upgrade lonjakan. Jika batch Anda memiliki lebih dari 20 node, per zona, per node pool, hapus dan buat ulang node.

Menggunakan upgrade lonjakan

  1. Konfigurasi upgrade lonjakan, menggunakan setelan maxUnavailable untuk menentukan jumlah node yang dapat tidak tersedia secara bersamaan, per zona, dalam node pool. Misalnya, jika Anda memiliki 18 node dalam satu zona di node pool, tetapkan nilai kolom maxUnavailable ke 18.

    Setelan ini berfungsi paling baik saat menggunakan kapasitas dari reservasi yang tidak memiliki kapasitas berlebih. Untuk mengetahui informasi selengkapnya tentang alasan penggunaan setelan ini, lihat Mengupgrade di lingkungan dengan keterbatasan resource.

  2. Upgrade node pool dengan menjalankan perintah berikut. Jika Anda ingin mengupgrade beberapa node pool, jalankan perintah ini untuk setiap node pool:

    gcloud container clusters upgrade CLUSTER_NAME \
        --node-pool NODE_POOL_NAME \
        --cluster-version VERSION \
        --location CONTROL_PLANE_LOCATION \
        --quiet
    

    Ganti kode berikut:

    • CLUSTER_NAME: nama cluster Anda.
    • NODE_POOL_NAME: nama node pool.
    • VERSION: target upgrade otomatis yang direkomendasikan untuk node pool. Untuk mengetahui informasi selengkapnya, lihat Mendapatkan informasi upgrade untuk node cluster Standar pool. Jika cluster Anda tidak memiliki target upgrade otomatis yang direkomendasikan, periksa entri Pembaruan versi terbaru di catatan rilis GKE.
    • CONTROL_PLANE_LOCATION: lokasi bidang kontrol cluster Anda.

Hapus dan buat ulang node

Hapus node pool dan buat ulang menggunakan versi yang lebih baru:

  1. Hapus node pool:

    gcloud container node-pools delete NODE_POOL_NAME \
        --cluster CLUSTER_NAME \
        --location CONTROL_PLANE_LOCATION
    
  2. Buat ulang node pool, teruskan versi baru menggunakan flag --cluster-version. Teruskan target upgrade otomatis yang direkomendasikan untuk node pool. Untuk mengetahui informasi selengkapnya, lihat Mendapatkan informasi upgrade untuk node cluster Standar pool. Jika cluster Anda tidak memiliki target upgrade otomatis yang direkomendasikan, periksa entri Pembaruan versi terbaru di catatan rilis GKE.