Mengelola gangguan node GKE untuk GPU dan TPU


Halaman ini membantu Anda memahami, mengonfigurasi, dan memantau peristiwa gangguan yang mungkin terjadi pada node Google Kubernetes Engine (GKE) yang menjalankan workload kecerdasan buatan (AI) atau machine learning (ML), termasuk:

Selama siklus proses cluster GKE yang berjalan lama, secara berkala gangguan pada beban kerja terjadi karena pemeliharaan otomatis yang dikeluarkan oleh Google Cloud untuk resource Compute Engine yang mendasari infrastruktur GKE. Ketika gangguan ini memengaruhi Node GKE yang menjalankan workload AI/ML, GKE perlu memulai ulang beban kerja yang sedang berjalan dan node yang mendasarinya.

Alasan GPU dan TPU memerlukan pengelolaan gangguan

Cluster GKE Anda mengelola siklus proses node GKE. Node ini disediakan di VM Compute Engine. VM Compute Engine secara berkala mengadakan peristiwa yang disebabkan oleh berbagai alasan seperti update perangkat keras atau perangkat lunak, pemeliharaan, dan perangkat keras gagal. Peristiwa host dikeluarkan untuk layanan Google Cloud infrastruktur dan abaikan Kebijakan dan pengecualian pemeliharaan GKE.

Sebagian besar VM Compute Engine, dengan beberapa pengecualian, memiliki kebijakan pemeliharaan host ditetapkan ke live migration, yang berarti tidak ada gangguan atau gangguan pada beban kerja yang berjalan. Namun, kelas VM tertentu tidak mendukung migrasi langsung, termasuk VM dengan GPU dan TPU tempat AI/ML Anda workload berjalan. Selain itu, GKE juga dapat memulai ulang TPU on-demand dengan menggunakan preemption, yang memungkinkan GKE untuk menyediakan TPU yang lebih besar terhadap defragmentasi alasan.

Saat terjadi peristiwa host, GKE menghentikan node dan Pod-nya. Jika Pod di-deploy sebagai bagian dari workload yang lebih besar seperti Job atau Deployment, GKE akan memulai ulang Pod pada node yang terpengaruh. Terserah Anda atau kerangka kerja yang Anda gunakan untuk menangani beban kerja atau Tugas agar bereaksi dengan tepat terjadinya gangguan. Misalnya, Anda dapat menyimpan status tugas pelatihan AI untuk mengurangi kehilangan data.

Proses penghentian halus

Alur kerja berikut menunjukkan cara GKE mengeksekusi node halus penghentian setelah gangguan dikeluarkan oleh Compute Engine:

  1. Compute Engine mengeluarkan nilai TERMINATE_ON_HOST_MAINTENANCE yang telah diupdate untuk kunci metadata VM maintenance-event.
  2. Dalam 60 detik, hal berikut akan terjadi:

    1. Komponen sistem menerapkan label node baru berikut yang ditetapkan ke true untuk menunjukkan bahwa pemeliharaan sedang dalam proses: cloud.google.com/active-node-maintenance

    2. GKE menerapkan taint node untuk mencegah Pod baru dijadwalkan di node: cloud.google.com/impending-node-termination:NoSchedule. Sebaiknya ubah beban kerja agar dapat menoleransi taint ini karena penghentian yang diketahui dan terjadi.

  3. Komponen maintenance-handler mulai mengeluarkan Pod sesuai urutan workload Pod terlebih dahulu, lalu Pod sistem (misalnya, kube-system).

  4. GKE mengirimkan sinyal penonaktifan SIGTERM untuk memberi tahu beban kerja yang sedang berjalan Pod di node yang akan segera dimatikan. Pod dapat menggunakan pemberitahuan ini untuk menyelesaikan setiap tugas yang sedang berlangsung. GKE melakukan upaya terbaik untuk menghentikan layanan Pod dengan lancar.

Notifikasi maintenance-event terjadi saat VM Compute Engine yang mendasari node GKE mengalami peristiwa host yang mengganggu yang menyebabkan penghentian node. Saat hal ini terjadi, Compute Engine akan memperbarui maintenance-event kunci metadata. Periode notifikasi pemeliharaan lanjutan sebelum node dihentikan adalah sebagai berikut:

  • GPU: 60 menit.
  • TPU: 5 menit.

Setelah itu, penghentian node akan terjadi dan node pengganti dialokasikan. GKE menghapus label dan taint setelah proses selesai. Kepada meningkatkan periode penghentian untuk workload Anda menggunakan GPU atau TPU, selesaikan langkah-langkah dalam Konfigurasikan GKE untuk menghentikan workload Anda dengan lancar.

Menangani gangguan beban kerja di GKE

Untuk mengelola peristiwa penghentian GKE dan mengurangi gangguan pada di cluster Anda, GKE memantau notifikasi ini untuk Anda, dan akan melakukan hal berikut:

  • GKE memberi tahu workload Anda terlebih dahulu saat terjadi shutdown: Saat node GKE perlu dihentikan untuk host peristiwa pemeliharaan, GKE mengirimkan sinyal SIGTERM ke Pod yang sedang berjalan pada node di awal periode pemberitahuan lanjutan. Sinyal OS seperti SIGTERM dapat ditangani secara native oleh sebagian besar contoh Python dan Buka. Framework yang dapat menangkap SIGTERM mencakup MaxText, Pax, dan JAX dengan Orbax.
  • GKE menghentikan workload Anda dengan lancar: Anda dapat mengonfigurasi GKE untuk menghentikan workload Anda secara halus dengan Pod masa tenggang penghentian. Pod dapat bereaksi terhadap sinyal SIGTERM untuk menyelesaikan semua tugas yang sedang berlangsung dan menjalankan tindakan penghentian apa pun yang Anda tentukan, seperti menyimpan status pelatihan. Selama penghentian secara halus, GKE berusaha untuk menghentikan Pod dengan lancar dan untuk menjalankan proses pembersihan atau tindakan penghentian yang Anda tentukan di aplikasi dengan, misalnya, menyimpan data beban kerja untuk mengurangi kehilangan data atau menyimpan status pelatihan.

Mengonfigurasi GKE untuk menghentikan workload Anda dengan lancar

Pada bagian ini, Anda mengonfigurasi GKE untuk mengelola siklus proses aplikasi dan meminimalkan gangguan terhadap beban kerja Anda. Jika Anda tidak mengonfigurasi masa tenggang, masa tenggang default adalah 30 detik.

GKE melakukan upaya terbaik untuk menghentikan Pod ini dengan baik dan mengeksekusi tindakan penghentian yang Anda tentukan, misalnya, menyimpan status. GKE mengirimkan sinyal SIGTERM ke Pod di awal masa tenggang titik. Jika Pod tidak keluar pada akhir masa tenggang, GKE mengirimkan sinyal SIGKILL tindak lanjut ke proses apa pun yang masih berjalan di container-nya di Pod.

Guna mengonfigurasi periode penghentian halus untuk workload, ikuti instruksi untuk GPU atau TPU.

GPU

Dalam manifes Pod, tetapkan kolom spec.terminationGracePeriodSeconds ke maksimum 3600 detik (60 menit). Misalnya, untuk mendapatkan selama 10 menit, dalam manifes Pod Anda, setel spec.terminationGracePeriodSeconds menjadi 600 detik, sebagai berikut:

    spec:
      terminationGracePeriodSeconds: 600

Sebaiknya tetapkan masa tenggang penghentian yang cukup lama untuk semua periode tugas untuk diselesaikan dalam jangka waktu notifikasi.

TPU

Untuk mengalokasikan waktu maksimum melakukan proses pembersihan, atur spec.terminationGracePeriodSeconds hingga 300 detik (lima menit) di Manifes pod. Contoh:

    spec:
      terminationGracePeriodSeconds: 300

Sebaiknya tetapkan masa tenggang penghentian yang cukup lama untuk semua periode tugas untuk diselesaikan dalam jangka waktu notifikasi.

Jika beban kerja Anda menggunakan framework ML seperti MaxText, Pax, atau JAX dengan Orbax, workload dapat menangkap sinyal SIGTERM shutdown dan memulai proses {i>checkpointing<i}. Untuk mempelajari lebih lanjut, lihat Titik pemeriksaan otomatis TPU.

Memantau progres penghentian tuntas yang aktif

Di cluster GKE dengan bidang kontrol yang menjalankan 1.29.1-gke.1425000 atau yang lebih baru, GKE men-deploy komponen level node yang disebut gpu-maintenance-handler. Komponen ini berjalan pada semua node GPU dan TPU dengan komponen bidang kontrol yang sesuai. Komponen ini melakukan hal berikut:

  • Memproses peristiwa penghentian halus.
  • Tanggapi peristiwa gangguan yang akan segera terjadi di VM GKE dengan meneruskan sinyal SIGTERM ke beban kerja node yang sedang berjalan. Gangguan ini dicatat sebagai permintaan Penghapusan Pod dan Penghapusan.

GKE menambahkan label dan taint ke node yang akan segera dimatikan . GKE memantau notifikasi peristiwa host, seperti pemeliharaan mesin, dengan menggunakan komponen sistem maintenance-handler yang berjalan di setiap node GPU dan TPU.

GKE mencatat peristiwa penghentian halus berikut ke dalam log:

Ketika GKE menyelesaikan penghentian tuntas, label dan taint akan dihapus.

Untuk memantau status penghentian tuntas aktif yang disebabkan oleh gangguan, Anda dapat melihat log gpu-maintenance-handler dengan menggunakan Konsol atau Google Cloud CLI.

gcloud

  1. Mencari nama node dan Pod yang menjalankan instance gpu-maintenance-handler dengan menjalankan perintah berikut:

    kubectl get pods -l name=maintenance-handler -A -o wide
    

    Setiap baris output mencakup Node name, Pod name, dan status.

  2. Periksa log:

    kubectl logs -n=kube-system MAINTENANCE_HANDLER_POD_NAME
    

    Ganti MAINTENANCE_HANDLER_POD_NAME dengan nama dari instance pengendali.

    Jika peristiwa pemeliharaan terdeteksi, Pod akan mencatat pesan, menerapkan label, dan penghapusan dimulai.

  3. Periksa label dan taint node:

    kubectl describe node NODE_NAME
    

    Ganti NODE_NAME dengan nama node yang ingin Anda lihat.

    Output menunjukkan daftar label node dan taint yang akan dipantau.

Konsol

  1. Buka halaman Logs Explorer di konsol Google Cloud:

    Buka Logs Explorer

  2. Di kolom Kueri, tentukan kueri berikut:

    resource.type="k8s_container"
    resource.labels.namespace_name="kube-system"
    resource.labels.container_name="maintenance-handler"
    resource.labels.cluster_name="CLUSTER_NAME"
    

    Ganti CLUSTER_NAME: Nama cluster Anda.

Langkah selanjutnya