Questa pagina ti aiuta a comprendere, configurare e monitorare gli eventi di interruzione che possono verificarsi sui nodi Google Kubernetes Engine (GKE) che eseguono carichi di lavoro di intelligenza artificiale (AI) o machine learning (ML), tra cui:
- Perché le GPU e le TPU richiedono la gestione delle interruzioni
- Gestisci le interruzioni dei carichi di lavoro in GKE
- Configurare GKE per terminare i carichi di lavoro in modo corretto
- Monitorare l'avanzamento di una risoluzione temporanea attiva
Durante il ciclo di vita di un cluster GKE a lunga esecuzione, vengono eseguiti periodicamente delle interruzioni dei carichi di lavoro manutenzione automatica eventi emessi da Google Cloud per le risorse Compute Engine sottostanti nell'infrastruttura GKE. Quando queste interruzioni influiscono sulle tue che eseguono carichi di lavoro AI/ML, GKE deve riavvia sia i carichi di lavoro in esecuzione sia il nodo sottostante.
Perché le GPU e le TPU richiedono la gestione delle interruzioni
I tuoi cluster GKE gestiscono il ciclo di vita dei nodi GKE. Il provisioning di questi nodi viene eseguito sulle VM di Compute Engine. Le VM Compute Engine presentano periodicamente eventi host causati da diversi motivi, come aggiornamenti hardware o software, manutenzione e guasti hardware. Gli eventi host vengono emessi per l'infrastruttura Google Cloud sottostante e aggirano i criteri e le esclusioni di manutenzione di GKE.
La maggior parte delle VM di Compute Engine, con alcune eccezioni, ha criterio di manutenzione dell'host impostata su Live Migrate. il che significa che l'esecuzione dei carichi di lavoro presenta interruzioni minime o nulle. Tuttavia, alcune classi di VM non supportano migrazione live, incluse VM con GPU e TPU in cui le tue AI/ML carichi di lavoro con scale out impegnativi. Inoltre, GKE potrebbe anche riavviare le TPU riservate e on demand utilizzando la preemption, che consente a GKE di eseguire il provisioning di TPU più grandi per motivi di defragmentazione.
Quando si verifica un evento host, GKE chiude il nodo e i relativi pod. Se il deployment dei pod viene eseguito nell'ambito di un carico di lavoro più grande, ad esempio un job o un deployment, GKE riavvia i pod sul nodo interessato. Sta a te o ai framework che utilizzi per gestire i carichi di lavoro o i job reagire in modo appropriato all'interruzione. Ad esempio, puoi salvare lo stato del job di addestramento AI e ridurre la perdita di dati.
Procedura di risoluzione controllata
Il flusso di lavoro seguente mostra come GKE esegue il nodo controllato in caso di interruzione dovuta a Compute Engine:
- Compute Engine emette un valore aggiornato di
TERMINATE_ON_HOST_MAINTENANCE
per la chiave dei metadati VMmaintenance-event
. Entro 60 secondi si verifica quanto segue:
I componenti di sistema applicano la seguente nuova etichetta del nodo impostata su
true
per indicare che la manutenzione è in corso:cloud.google.com/active-node-maintenance
GKE applica l'incompatibilità del nodo per impedire la pianificazione di nuovi pod sul nodo: cloud.google.com/impending-node-termination:NoSchedule. Ti consigliamo di modificare i carichi di lavoro per tollerare questo stato indesiderato a causa della terminazione nota che si verifica.
Il componente
maintenance-handler
inizia a rimuovere i pod in ordine di carico di lavoro, prima i pod di lavoro e poi i pod di sistema (ad esempiokube-system
).GKE invia un segnale di arresto SIGTERM per avvisare i pod di carichi di lavoro in esecuzione sul nodo 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.
Le notifiche maintenance-event
si verificano quando la VM Compute Engine di base
di un nodo GKE subisce un evento dell'host che causa l'interruzione del nodo. In questo caso, Compute Engine aggiorna la maintenance-event
chiave dei metadati.
La finestra di notifica di manutenzione avanzata prima dell'interruzione del nodo è la seguente:
- GPU: 60 minuti.
- TPU: 5 minuti.
Successivamente, il nodo viene terminato e viene allocato un nodo sostitutivo. GKE cancella le etichette e le incompatibilità 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 Configurare GKE per terminare i carichi di lavoro in modo corretto.
Gestire l'interruzione del carico di lavoro in GKE
Per gestire gli eventi di terminazione di GKE e ridurre le interruzioni delle carichi di lavoro nei tuoi cluster, GKE monitora queste notifiche per te ed effettua le seguenti operazioni:
- GKE invia una notifica ai tuoi carichi di lavoro prima di un'imminente scadenza Arresto: quando un nodo GKE deve essere arrestato per un host di manutenzione, GKE invia un segnale SIGTERM ai pod in esecuzione sul nodo all'inizio del periodo di preavviso. Gli indicatori del sistema operativo come SIGTERM possono essere gestiti in modo nativo dalla maggior parte delle librerie standard, come esempio Python e Vai. Framework in grado di acquisire SIGTERM includi MaxText, Pax e JAX con Orbax.
- GKE termina normalmente i carichi di lavoro: puoi configurare GKE in modo da terminare normalmente i carichi di lavoro con un pod periodo di tolleranza per la chiusura. I pod possono reagire all'indicatore SIGTERM per completare le attività in corso ed eseguire qualsiasi azione di interruzione che definisci, ad esempio il salvataggio di uno stato di addestramento. Durante l'interruzione controllata, GKE fa del suo meglio per terminare i pod in modo corretto ed eseguire le procedure di pulizia o l'azione di interruzione che definisci nella tua applicazione, ad esempio memorizzando i dati del carico di lavoro per ridurre la perdita di dati o salvare uno stato di addestramento.
Configura GKE per terminare i tuoi carichi di lavoro in modo controllato
In questa sezione, configuri GKE per gestire il ciclo di vita delle applicazioni l'interruzione del carico di lavoro. Se non configuri un il periodo di tolleranza, per impostazione predefinita, è di 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 indicatori SIGTERM
ai pod all'inizio del periodo di tolleranza
punto. Se i pod non si chiudono entro la fine del periodo di tolleranza,
invia un segnale SIGKILL
di follow-up a tutti i processi ancora in esecuzione
container nel pod.
Per configurare il periodo di terminazione controllata per i carichi di lavoro, segui le per GPU o TPU.
GPU
Nel manifest del pod, imposta il campo spec.terminationGracePeriodSeconds
su un
fino a un massimo di 3600 secondi (60 minuti). Ad esempio, per ottenere
di notifica di 10 minuti, nel manifest del pod imposta
spec.terminationGracePeriodSeconds
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.
TPU
Per allocare il tempo massimo per eseguire le procedure di pulizia, imposta il campo spec.terminationGracePeriodSeconds
su 300 secondi (cinque minuti) nel manifest del pod. Ad esempio:
spec:
terminationGracePeriodSeconds: 300
Ti consigliamo di impostare un periodo di tolleranza per la chiusura di un account che sia abbastanza lungo per qualsiasi attività da completare entro il periodo di notifica.
Se il carico di lavoro utilizza un framework ML come MaxText, Pax o JAX con Orbax, i carichi di lavoro può acquisire il segnale SIGTERM di arresto e avviare un processo di checkpoint. Per saperne di più, consulta Controllo automatico TPU.
Monitora l'avanzamento di una terminazione controllata attiva
Nei cluster GKE con il piano di controllo in esecuzione 1.29.1-gke.1425000
o in un secondo momento, GKE esegue il deployment di un componente a livello di nodo
gpu-maintenance-handler
. Questo componente viene eseguito su tutti i nodi GPU e TPU insieme a un componente del piano di controllo corrispondente. Questi componenti svolgono le seguenti funzioni:
- Elaborare eventi di cessazione controllata.
- Rispondere a eventi di interruzione imminente sulla VM GKE inoltrando un segnale SIGTERM ai carichi di lavoro in esecuzione di un nodo. Queste interruzioni vengono registrate come richieste di espulsione e eliminazione dei pod.
GKE aggiunge un'etichetta e un'incompatibilità ai nodi con un arresto imminente
. GKE monitora le notifiche degli eventi host, come la manutenzione, utilizzando il componente di sistema maintenance-handler
in esecuzione su ogni nodo GPU e TPU.
GKE registra i seguenti eventi di terminazione controllata:
- Quando rileva un'interruzione a causa di un'imminente interruzione del nodo, ad esempio un evento di manutenzione dell'host GCE: GKE aggiunge le seguenti etichette dei nodi:
cloud.google.com/active-node-maintenance
impostato sutrue
. - Quando impedisci la pianificazione di nuovi carichi di lavoro: GKE applica il taint
cloud.google.com/impending-node-termination:NoSchedule
.
Quando GKE termina l'interruzione in modo corretto, le etichette e gli elementi dannosi vengono cancellati.
Per monitorare lo stato di una terminazione controllata attiva causata da un'interruzione:
puoi visualizzare i log gpu-maintenance-handler
utilizzando la console o Google Cloud CLI.
gcloud
Individua i nomi dei nodi e dei pod in cui sono in esecuzione istanze di
gpu-maintenance-handler
eseguendo il seguente comando:kubectl get pods -l name=maintenance-handler -A -o wide
Ogni riga dell'output include Nome nodo, Nome pod e stato.
Controlla i log:
kubectl logs -n=kube-system MAINTENANCE_HANDLER_POD_NAME
Sostituisci
MAINTENANCE_HANDLER_POD_NAME
con il nome dell'istanza dell'handler.Se viene rilevato un evento di manutenzione, il pod registra un messaggio, applica le etichette, dopodiché inizierà l'eliminazione.
Controlla le etichette e le incompatibilità dei nodi:
kubectl describe node NODE_NAME
Sostituisci
NODE_NAME
con il nome del nodo che vuoi visualizzare.L'output mostra l'elenco di etichette dei nodi e incompatibilità da osservare.
Console
Vai alla pagina Esplora log nella console Google Cloud:
Nel campo Query, specifica la seguente query:
resource.type="k8s_container" resource.labels.namespace_name="kube-system" resource.labels.container_name="maintenance-handler" resource.labels.cluster_name="CLUSTER_NAME"
Sostituisci
CLUSTER_NAME
: il nome del tuo cluster.
Passaggi successivi
- Scopri come selezionare le GPU nei pod Autopilot.
- Scopri come eseguire il deployment di carichi di lavoro TPU su GKE Autopilot.