Esegui la manutenzione dell'host per i nodi che eseguono workload di addestramento e inferenza

Questo documento spiega come eseguire la manutenzione dell'host delle istanze di Compute Engine sottostanti per i nodi nei cluster Google Kubernetes Engine (GKE). Devi gestire attivamente questa manutenzione solo per alcuni tipi di istanze di Compute Engine che non eseguono la migrazione live, incluse le istanze con GPU e TPU. Le strategie descritte in questo documento sono adatte per i carichi di lavoro di addestramento e inferenza. Se devi eseguire manualmente la manutenzione dell'host solo per un singolo nodo o se i tuoi carichi di lavoro possono tollerare la manutenzione automatica dell'host , consulta Informazioni su come eseguire la manutenzione dell'host su GKE.

Queste strategie eseguono la manutenzione dell'host per gruppi di nodi e, facoltativamente, avviano gli upgrade dei cluster GKE.

Utilizza la strategia parallela per i nodi dei carichi di lavoro in cui puoi avere un singolo periodo di inattività, ad esempio per i nodi dei carichi di lavoro di addestramento. Utilizza la strategia in sequenza per i nodi dei carichi di lavoro in cui puoi avere batch di inattività mantenendo la disponibilità della maggior parte delle risorse, ad esempio per i nodi dei carichi di lavoro di inferenza.

Utilizzare una strategia parallela per aggiornare i nodi dei carichi di lavoro di addestramento

Questa strategia esegue le modifiche contemporaneamente per un gruppo di nodi che utilizzano gli acceleratori. Puoi utilizzare questa strategia per i carichi di lavoro di addestramento. In alternativa, puoi utilizzarla per altri tipi di carichi di lavoro in cui il metodo meno invasivo per eseguire le modifiche consiste nell'avere una singola finestra di inattività completa per tutti i nodi del gruppo e i carichi di lavoro in esecuzione su di essi.

La strategia segue questi passaggi di alto livello:

  1. Interrompi i carichi di lavoro: seleziona i node pool e interrompi i carichi di lavoro in esecuzione su di essi o spostali su altri nodi che rimangono disponibili.
  2. Attiva la manutenzione dell'host: applica l'etichetta di manutenzione a tutti i nodi selezionati contemporaneamente e attendi il completamento del processo su tutti i nodi.
  3. Esegui l'upgrade della versione GKE: modifica la versione GKE dei nodi.
  4. Riavvia i carichi di lavoro: al termine di tutti gli upgrade e della manutenzione dell'host, riavvia i carichi di lavoro.

Le istruzioni fornite eseguono le modifiche per un singolo pool di nodi. Tuttavia, puoi adattare i passaggi per eseguire le modifiche per più node pool contemporaneamente. Prima di iniziare questi passaggi, assicurati di avere almeno qualche ora in cui questo carico di lavoro non deve essere eseguito su questi nodi.

Per ridurre al minimo le interruzioni durante la ricezione di modifiche critiche sia per le istanze di Compute Engine sottostanti sia per i nodi GKE, utilizza questo periodo di inattività per eseguire sia la manutenzione dell'host sia gli upgrade della versione GKE. Tuttavia, puoi eseguire solo la manutenzione dell'host se non vuoi eseguire l'upgrade della versione dei nodi GKE.

Considerazioni preliminari

Prima di iniziare, esamina le seguenti considerazioni:

  • Evita di rieseguire il deployment dei carichi di lavoro: per evitare ritardi non necessari dovuti a PodDisruptionBudgets, non rieseguire il deployment di alcun carico di lavoro finché non hai completato tutti i passaggi.
  • Pianifica le interruzioni: assicurati che i tuoi carichi di lavoro possano essere interrotti per un periodo di tempo. Il completamento di questi passaggi richiede diverse ore, principalmente a causa del tempo necessario per la manutenzione dell'host.

Eseguire gli aggiornamenti per tutti i nodi contemporaneamente

Per eseguire la manutenzione dell'host e, facoltativamente, gli upgrade della versione GKE, completa i seguenti passaggi:

  1. Prepara i carichi di lavoro: interrompi i carichi di lavoro o assicurati che abbiano eseguito uno snapshot o un checkpoint recenti.
  2. Avvia la manutenzione dell'host: applica l'etichetta di manutenzione a tutti i nodi nel pool di nodi selezionato:

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

    Compute Engine inizia a svuotare e aggiornare contemporaneamente le istanze sottostanti. Questo processo potrebbe richiedere alcune ore. Per ulteriori informazioni, consulta Processo di terminazione controllata.

  3. Monitora lo stato della manutenzione dell'host: GKE rimuove l' etichetta di manutenzione al termine della manutenzione. Al termine della manutenzione, puoi trovare un log con il seguente messaggio in Cloud Logging:

    Maintenance window has completed for this instance. All maintenance
    notifications on the instance have been removed.
    
  4. Facoltativo: esegui l'upgrade della versione dei nodi GKE: segui le istruzioni per eseguire l'upgrade della versione GKE dei nodi.

Utilizzare una strategia in sequenza per aggiornare i nodi dei carichi di lavoro di inferenza

Questa strategia descrive un approccio manuale per eseguire la manutenzione dei nodi GKE che eseguono carichi di lavoro di inferenza. Comporta l'aggiornamento dei nodi in batch per mantenere la disponibilità del servizio. Questo metodo è più adatto per i carichi di lavoro che possono tollerare una determinata percentuale di repliche temporaneamente offline.

La strategia segue questi passaggi di alto livello:

  1. Identifica e raggruppa i nodi: scegli i node pool da aggiornare. Raggruppa i nodi in batch dimensionati in base alla tolleranza agli errori del carico di lavoro.
  2. Esegui l'iterazione dei batch: per ogni batch, applica l'etichetta di manutenzione e monitora il batch di nodi finché l'etichetta non viene rimossa.
  3. Esegui l'upgrade della versione GKE: al termine della manutenzione dell'host di tutti i batch, modifica la versione dei nodi GKE.

Considerazioni preliminari

Prima di iniziare, esamina le seguenti considerazioni:

  • Comprendi il deployment: il successo richiede una conoscenza dettagliata di distribuzione del carico di lavoro, posizionamento delle repliche e domini di errore. Assicurati di mantenere una capacità di gestione sufficiente durante l'intero processo.
  • Pianifica le dimensioni dei batch: aggiorna i nodi in batch. Le dimensioni di ogni batch sono determinate dalla tolleranza agli errori del carico di lavoro. Di seguito sono riportati alcuni fattori da considerare:
    • Il numero di repliche per modello di gestione.
    • La distribuzione delle repliche tra nodi e domini di errore.
    • PodDisruptionBudgets può aiutarti a applicare il numero massimo di pod inattivi contemporaneamente.
    • Suggerimento: per semplificare la gestione, valuta la possibilità di dedicare diversi node pool a diversi set di repliche, in modo da isolare i domini di errore a livello di pool di nodi.
  • Calcola i vincoli di tempo: considera i seguenti fattori di tempistica:
    • Il completamento del passaggio di manutenzione dell'host di ogni batch può richiedere diverse ore.
    • Calcola le dimensioni minime del batch per assicurarti che tutta la manutenzione venga completata entro le scadenze richieste:
      1. MAINTENANCE_BLOCKS = floor(HOURS_TO_MAINTENANCE / 4) (dove HOURS_TO_MAINTENANCE è il tempo totale disponibile).
      2. MIN_PER_BATCH = TOTAL_NODE_COUNT / MAINTENANCE_BLOCKS
    • Le dimensioni del batch scelte devono essere maggiori o uguali a MIN_PER_BATCH.
  • Esamina i tipi di carichi di lavoro specifici: considera quanto segue per i rispettivi tipi di configurazione:
    • Mixture of Experts (MOE): assicurati che la strategia di batching mantenga il numero minimo di repliche richieste per ogni modello.
    • Gestione disaggregata: assicurati di monitorare tutte le repliche coinvolte nella configurazione disaggregata durante la pianificazione dei batch.
    • Node pool multi-host (TPU, MNNVL): per queste configurazioni, è probabile che tu debba disattivare un intero pool di nodi alla volta. Pianifica i domini di errore su più node pool di conseguenza.

Eseguire gli aggiornamenti in sequenza in batch

Per eseguire gli aggiornamenti in sequenza, completa i seguenti passaggi:

  1. Identifica i nodi per la manutenzione: identifica tutti i nodi su cui vuoi eseguire la manutenzione e salva questo elenco. Per identificare i nodi, utilizza uno dei seguenti metodi o selezionarli manualmente:

    • Recupera tutti i nodi nel cluster che utilizzano gli acceleratori (TPU o GPU):

      kubectl get nodes -o json | jq -r '.items[] | select(.spec.taints[]? | select(.key=="nvidia.com/gpu" or .key=="google.com/tpu")) | .metadata.name'
      
    • Recupera tutti i nodi in un pool di nodi specifico:

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

      Sostituisci NODE_POOL_NAME con il nome del pool di nodi.

    • Recupera tutti i nodi con un'etichetta specifica:

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

      Sostituisci LABEL con l'etichetta del nodo.

  2. Dividi i nodi in batch: dividi i nodi identificati in batch uguali. Determina le dimensioni del batch utilizzando la formula descritta nell'elemento dell'elenco Calcola i vincoli di tempo nella sezione Considerazioni preliminari precedente.

  3. Esegui la manutenzione dell'host: per ogni batch, completa i seguenti passaggi:

    1. Seleziona un batch di nodi e applica l'etichetta di manutenzione:

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

      Sostituisci LIST_OF_NODES_IN_BATCH con un elenco di nodi del batch separato da spazi. Ad esempio, node-1 node-2 node-3.

    2. Monitora lo stato della manutenzione dell'host. GKE rimuove l'etichetta di manutenzione al termine della manutenzione. Al termine della manutenzione, puoi trovare un log con il seguente messaggio in Logging:

      Maintenance window has completed for this instance. All maintenance
      notifications on the instance have been removed.
      
    3. Ripeti i due passaggi precedenti per ogni batch rimanente finché non avrai completato la manutenzione dell'host per tutti i batch.

  4. Facoltativo: esegui l'upgrade della versione dei nodi GKE: esegui questo passaggio solo dopo che la manutenzione dell'host è stata completata per tutti i nodi, per evitare scenari in cui i nodi GKE vengono sottoposti a deployment su host che non hanno ancora completato la manutenzione. Consulta le istruzioni nella sezione seguente.

Eseguire l'upgrade della versione GKE dei nodi

Considera il numero di nodi di cui vuoi eseguire l'upgrade contemporaneamente. Con la strategia parallela, hai eseguito la manutenzione dell'host per l'intero pool di nodi o per più node pool contemporaneamente. Con la strategia in sequenza, hai eseguito la manutenzione dell'host in batch. Determina il metodo di upgrade da utilizzare in base alle dimensioni dei gruppi di nodi:

  • Strategia parallela: se i tuoi node pool hanno 20 o meno nodi per zona, utilizza gli upgrade di sovraccarico. Se i tuoi node pool hanno più di 20 nodi per zona, elimina e ricrea i node pool.
  • Strategia in sequenza: se i batch hanno 20 nodi, per zona, per node pool o meno, utilizza gli upgrade di sovraccarico. Se i batch hanno più di 20 nodi, per zona, per pool di nodi, elimina e ricrea i nodi.

Utilizzare gli upgrade di sovraccarico

  1. Configura gli upgrade di sovraccarico, utilizzando l'impostazione maxUnavailable per determinare il numero di nodi che possono non essere disponibili contemporaneamente, per zona, in un pool di nodi. Ad esempio, se hai 18 nodi in una zona in un pool di nodi, imposta il valore del campo maxUnavailable su 18.

    Questa impostazione è ideale quando utilizzi la capacità di una prenotazione in cui non hai capacità in eccesso. Per ulteriori informazioni sul motivo per cui utilizzare questa impostazione, consulta Eseguire l'upgrade in un ambiente con risorse limitate.

  2. Esegui l'upgrade del pool di nodi eseguendo il seguente comando. Se vuoi eseguire l'upgrade di più node pool, esegui questo comando per ogni pool di nodi:

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

    Sostituisci quanto segue:

    • CLUSTER_NAME: il nome del tuo cluster.
    • NODE_POOL_NAME: il nome del pool di nodi.
    • VERSION: una destinazione di upgrade automatico consigliata per il pool di nodi. Per ulteriori informazioni, consulta Recuperare informazioni sugli upgrade per i node pool dei cluster standard. Se il tuo cluster non ha una destinazione di upgrade automatico consigliata, controlla le voci più recenti di Aggiornamenti della versione nelle note di rilascio di GKE.
    • CONTROL_PLANE_LOCATION: la località del piano di controllo del cluster.

Eliminare e ricreare i nodi

Elimina il pool di nodi e ricrealo utilizzando la versione successiva:

  1. Elimina il pool di nodi:

    gcloud container node-pools delete NODE_POOL_NAME \
        --cluster CLUSTER_NAME \
        --location CONTROL_PLANE_LOCATION
    
  2. Ricrea il pool di nodi, passando la nuova versione utilizzando il flag --cluster-version. Passa la destinazione di upgrade automatico consigliata per il pool di nodi. Per ulteriori informazioni, consulta Recuperare informazioni sugli upgrade per i node pool dei cluster standard. Se il tuo cluster non ha una destinazione di upgrade automatico consigliata, controlla le voci più recenti di Aggiornamenti della versione nelle note di rilascio di GKE.