Gestire l'interruzione dei nodi GKE per GPU e TPU


Durante il ciclo di vita di un cluster GKE di lunga durata, si verificano interruzioni periodiche dei carichi di lavoro a causa di eventi di manutenzione automatica emessi daGoogle Cloud per le risorse Compute Engine alla base dell'infrastruttura GKE. Questa pagina ti aiuta a capire cosa si intende per interruzione dei nodi in GKE, a monitorare le notifiche di manutenzione e a ridurre al minimo l'impatto delle interruzioni nei tuoi nodi GKE con GPU e TPU collegate.

Questo documento è rivolto agli amministratori e agli operatori della piattaforma che gestiscono il ciclo di vita della piattaforma l'infrastruttura tecnologica di base. Per scoprire di più sui ruoli comuni e su esempi di attività a cui facciamo riferimento nei Google Cloud contenuti, consulta Ruoli e attività comuni degli utenti di GKE Enterprise.

Che cosa significa interruzione del nodo in GKE?

I cluster GKE gestiscono il ciclo di vita dei nodi GKE. Questi nodi vengono eseguiti su VM Compute Engine, che talvolta registrano eventi host causati da una serie di motivi, ad esempio:

  • Aggiornamenti e manutenzione hardware o software. Gli eventi di manutenzione automatica vengono emessi da Google Cloud.
  • Guasti hardware.
  • Upgrade alle VM Compute Engine. Questi upgrade sono diversi da quelli al nodo GKE o alla versione del pool di nodi.

Gli eventi host vengono emessi per l' Google Cloud infrastruttura di base e aggirano i criteri e le esclusioni di manutenzione di GKE. Durante il ciclo di vita di un cluster GKE di lunga durata, i nodi potrebbero subire interruzioni periodiche dei workload di addestramento o di pubblicazione. Quando queste interruzioni interessano i nodi GKE che eseguono i carichi di lavoro AI/ML, GKE deve riavviare sia i carichi di lavoro in esecuzione sia il nodo sottostante.

Perché le GPU e le TPU richiedono la gestione delle interruzioni

Per la maggior parte delle VM di Compute Engine, con alcune eccezioni, il criterio di manutenzione dell'host è impostato su live migrate, il che significa che i carichi di lavoro in esecuzione in genere non subiscono interruzioni o ne subiscono poche. Tuttavia, alcune classi di VM non supportano la migrazione live, tra cui le VM con GPU e TPU collegate. Quando si verifica un evento host nella VM all'interno di una sezione TPU, l'intera sezione viene interrotta e poi riprogrammata perché tutti gli eventi di manutenzione sono coordinati a livello di sezione. Pertanto, se crei uno slice TPU con centinaia di VM, tutte queste VM riceveranno la stessa pianificazione degli eventi di manutenzione.

Quando si verifica un evento host, GKE termina il nodo e i relativi pod. Se i pod vengono di cui è stato eseguito il deployment all'interno di un carico di lavoro più grande, come un job o un deployment, GKE riavvia i pod sul nodo interessato.

Spetta a te o ai framework che utilizzi gestire la configurazione del carico di lavoro in modo da reagire in modo appropriato agli eventi di manutenzione. Ad esempio, puoi salvare lo stato del job di addestramento AI per ridurre la perdita di dati.

Per gestire l'interruzione dei workload AI/ML, puoi procedere nel seguente modo:

Monitorare le notifiche di manutenzione

Compute Engine emette notifiche quando per i nodi e le relative VM sottostanti sono pianificati eventi host che causano interruzioni e quando questi eventi diventano attivi. Le notifiche includono informazioni sull'ora di inizio pianificata, sul tipo di evento e su altri dettagli.

In GKE versione 1.31.1-gke.2008000 e successive, puoi monitorare gli eventi di manutenzione imminenti, inclusi quelli descritti in questa sezione.

La manutenzione imminente è pianificata, ma non attiva

Prima che per una VM con GPU o TPU collegate sia pianificato un evento di manutenzione, Compute Engine invia notifiche a tutte le sue VM. Queste notifiche segnalano l'inizio del periodo di manutenzione. Quando una manutenzione imminente è pianificata dalla VM, ma non è attiva, GKE aggiunge scheduled-maintenance-time all'etichetta del nodo.

Per eseguire query su queste notifiche a livello di nodo, esegui il seguente comando:

kubectl get nodes -l cloud.google.com/scheduled-maintenance-time \
    -L cloud.google.com/scheduled-maintenance-time

L'output è simile al seguente:

NAME                         STATUS    SCHEDULED-MAINTENANCE-TIME
<gke-accelerator-node-name>  Ready     1733083200
<gke-accelerator-node-name>  Ready     1733083200
[...]

La colonna SCHEDULED-MAINTENANCE-TIME rappresenta i secondi, che vengono visualizzati nel formato della data e dell'ora di epoch Unix.

Per eseguire query su queste notifiche a livello di metadati del nodo, controlla le istanze per verificare la presenza di una notifica di evento di manutenzione.

Inizia la manutenzione pianificata

Per le famiglie di macchine ottimizzate per l'acceleratore che supportano la manutenzione avanzata, puoi accedere all'endpoint upcoming-maintenance che fornisce informazioni sugli eventi di manutenzione pianificati e avviati.

Quando inizia la manutenzione pianificata, Compute Engine aggiorna i metadati nella directory http://metadata.google.internal/computeMetadata/v1/instance/attributes/. Compute Engine aggiorna le etichette dei metadati come segue:

  • Imposta maintenance-event su TERMINATE_ON_HOST_MAINTENANCE.
  • In upcoming-maintenance, imposta maintenance_status su ONGOING.

GKE eseguirà l'eviction dei pod e la terminazione dei carichi di lavoro in modo ordinato entro il tempo massimo predefinito limitato della finestra di notifica della manutenzione.

Riduci al minimo l'impatto delle interruzioni

Per ridurre al minimo l'impatto dell'interruzione del nodo, puoi avviare manualmente un evento di manutenzione dell'host.

Se non avvii un evento di manutenzione, Compute Engine completerà la manutenzione pianificata regolarmente.

Avviare manualmente un evento di manutenzione dell'host

Quando Compute Engine emette una notifica su un evento di manutenzione pianificata, puoi avviare manualmente la manutenzione a un ora in linea con la tua pianificazione operativa, ad esempio durante i periodi di attività ridotta.

Su un nodo del pool di nodi, imposta l'etichetta del nodocloud.google.com/perform-maintenance su true. Ad esempio:

kubectl label nodes <node-name> cloud.google.com/perform-maintenance=true

GKE eseguirà l'espulsione controllata dei pod e interromperà i carichi di lavoro prima dell'inizio dell'evento di manutenzione con l'azione perform-maintenance. Il periodo di tempo che intercorre tra l'applicazione dell'etichetta e l'inizio della manutenzione varia.

Configura GKE per terminare i carichi di lavoro in modo corretto

In questa sezione, configurerai GKE per gestire il ciclo di vita dell'applicazione e ridurre al minimo l'interruzione del carico di lavoro. Se non configuri un periodo di tolleranza, il valore predefinito è 30 secondi.

GKE fa del suo meglio per terminare questi pod in modo corretto ed eseguire l'azione di terminazione che hai definito, ad esempio il salvataggio di uno stato di addestramento. GKE invia un segnale SIGTERM ai pod all'inizio del periodo di tolleranza. Se i pod non escono entro la fine del periodo di tolleranza, GKE invia un segnale di follow-up SIGKILL a tutti i processi ancora in esecuzione in qualsiasi contenitore del pod.

Per configurare il periodo di interruzione graduale, imposta il periodo di tolleranza per l'interruzione (secondi) nel campo spec.terminationGracePeriodSeconds del manifest del pod. Ad esempio, per impostare una notifica ogni 10 minuti, imposta il spec.terminationGracePeriodSecondscampo nel manifest del pod su 600 secondi, come segue:

    spec:
      terminationGracePeriodSeconds: 600

Ti consigliamo di impostare un periodo di tolleranza per la risoluzione sufficientemente lungo da consentire il completamento di eventuali attività in corso entro il periodo di tempo della notifica. Se il tuo carico di lavoro utilizza un framework ML come MaxText, Pax o JAX con Orbax, i carichi di lavoro possono acquisire l'indicatore di arresto SIGTERM e avviare un processo di checkpointing. Per saperne di più, consulta Controllo automatico TPU.

Procedura di arresto controllato

Quando inizia un evento di interruzione, che sia attivato manualmente o automaticamente dalla VM, Compute Engine segnala l'imminente arresto della macchina aggiornando la chiave di metadati maintenance-event. In entrambi i casi di imminente interruzione del servizio del nodo, GKE avvierà il ritiro graduale.

Il seguente flusso di lavoro mostra come GKE esegue l'interruzione del nodo in modo corretto quando è imminente l'arresto del nodo:

  1. Entro 60 secondi si verifica quanto segue:
    1. I componenti di sistema applicano l'cloud.google.com/active-node-maintenance etichetta del nodo impostata su ONGOING per indicare che i carichi di lavoro vengono interrotti.
    2. GKE applica l'incompatibilità del nodo per impedire la pianificazione di nuovi pod sul nodo. L'incompatibilità ha la chiave cloud.google.com/impending-node-termination:NoSchedule. Ti consigliamo di modificare i tuoi carichi di lavoro in modo da tollerare questo stato indesiderato a causa dell'interruzione nota che si verifica.
  2. Il componente di gestione della manutenzione inizia a espellere i pod prima espellendo i pod di carico di lavoro e poi i pod di sistema (ad esempio kube-system).
  3. GKE invia un segnale di arresto SIGTERM ai pod di workload in esecuzione sul nodo per avvisarli di un arresto imminente. I pod possono utilizzare questo avviso per completare eventuali attività in corso. GKE fa del suo meglio per terminare questi Pod in modo corretto.
  4. Al termine dell'espulsione, GKE aggiorna il valore dell'etichetta cloud.google.com/active-node-maintenance in terminating per indicare che il nodo è pronto per l'interruzione.

Successivamente, il nodo viene terminato e viene allocato un nodo sostitutivo. GKE cancella le etichette e gli elementi con tag al termine del processo. Per aumentare la finestra di interruzione per i carichi di lavoro che utilizzano GPU o TPU, completa i passaggi descritti nella sezione Avvia manualmente un evento di manutenzione dell'host.

Monitorare l'avanzamento di un'interruzione controllata attiva

Puoi filtrare i log di GKE in base ai seguenti eventi di interruzione graduale:

  • Quando la VM rileva un'interruzione a causa di una terminazione imminente del nodo, ad esempio un evento di manutenzione dell'host Compute Engine, GKE imposta cloud.google.com/active-node-maintenance su ONGOING quando i carichi di lavoro vengono arrestati e su terminating quando i carichi di lavoro sono stati completati e il nodo è pronto per essere terminato.
  • Quando impedisce la pianificazione di nuovi carichi di lavoro, GKE applica il taint cloud.google.com/impending-node-termination:NoSchedule.

Passaggi successivi