Resilienza del cluster

Se ti interessano i cluster di addestramento di Vertex AI, contatta il tuo rappresentante di vendita per l'accesso.

I cluster di addestramento di Vertex AI integrano un sistema di controllo di integrità completo per garantire l'affidabilità dei nodi di calcolo e la stabilità dei job Slurm. Questo sistema offre opzioni di recupero automatiche e manuali. Durante l'esecuzione del job viene eseguita una procedura automatica per monitorare i componenti critici, come l'integrità della GPU e l'utilizzo del disco, sostituendo automaticamente i nodi che non funzionano. Per le situazioni che richiedono l'intervento dell'utente, il cluster di addestramento fornisce un'API reportFaultyNodes, che consente di eliminare manualmente un nodo difettoso specifico o di segnalare un sospetto guasto hardware sull'host sottostante.

Eseguire un carico di lavoro di test per verificare la funzionalità della GPU

Passaggio 1: connettersi ai nodi del cluster utilizzando SSH

Da Cloud Shell o dalla Google Cloud console, connettiti al nodo di accesso utilizzando IAP. L'esempio seguente mostra il comando per Cloud Shell:

gcloud compute ssh --zone $ZONE "Login Node Name" --tunnel-through-iap --project $PROJECT_ID

Passaggio 2: eseguire un comando Slurm standard

Dopo aver eseguito la connessione a un nodo di accesso, esegui alcuni comandi Slurm standard per verificare che il cluster funzioni correttamente.

~$ sinfo
PARTITION   AVAIL  TIMELIMIT  NODES  STATE NODELIST
partition1*    up   infinite      2   idle hcsa3m1236-a3mnodeset-[0-1]

Poi invia un job batch.

~$ sbatch --qos normal --wrap "echo start! && sleep 10s && echo done!"

Dovresti vedere che nella tua home directory viene creato un file slurm-job-id.out.

Passaggio 3: eseguire un carico di lavoro della GPU

Salva i seguenti contenuti come file di script denominato test.sh nella tua home directory.

#!/bin/bash
#SBATCH --nodes=2
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=4
#SBATCH --gres=gpu:8
#SBATCH --job-name=nvidia_smi

srun nvidia-smi -L

Imposta le autorizzazioni dello script su 755 per renderlo eseguibile, quindi invia il job Slurm:

~$ sbatch ./test.sh

Slurm salva l'output dello script in un file denominato slurm-job-id.out.

Output previsto:

GPU 0: NVIDIA H100 80GB HBM3 (UUID: GPU-f75045e8-4d87-49d1-2eb9-39ec2baddf9b)
GPU 1: NVIDIA H100 80GB HBM3 (UUID: GPU-b91556d8-5215-d0ed-50b8-a88720e5b29c)
GPU 2: NVIDIA H100 80GB HBM3 (UUID: GPU-7600155a-0036-35f5-9489-a7b4ed0ce887)
GPU 3: NVIDIA H100 80GB HBM3 (UUID: GPU-a402e125-7841-033f-f08b-7921526c121f)
GPU 4: NVIDIA H100 80GB HBM3 (UUID: GPU-20eef8f8-b2c7-1716-5ce7-7f64475bd2c0)
GPU 5: NVIDIA H100 80GB HBM3 (UUID: GPU-65463286-e587-b52f-4d5b-8880eecbf0e7)
GPU 6: NVIDIA H100 80GB HBM3 (UUID: GPU-d5ff75e7-dd54-edf6-a684-33c26fc365e1)
GPU 7: NVIDIA H100 80GB HBM3 (UUID: GPU-26e81ae2-11fd-9d7e-95b6-c186e5173007)
GPU 0: NVIDIA H100 80GB HBM3 (UUID: GPU-e66a185a-b40c-81d9-d35d-19cab811df34)
GPU 1: NVIDIA H100 80GB HBM3 (UUID: GPU-d23e5cf7-afd8-bec2-1487-9e27eeb6aae0)
GPU 2: NVIDIA H100 80GB HBM3 (UUID: GPU-4dde1b05-ea5e-01e9-5c1e-e1c0d3b4b113)
GPU 3: NVIDIA H100 80GB HBM3 (UUID: GPU-3a0d734a-6fb8-d841-a97f-d6846553ea7f)
GPU 4: NVIDIA H100 80GB HBM3 (UUID: GPU-76fe0d37-08b2-a3a6-8ddf-55501426bc7c)
GPU 5: NVIDIA H100 80GB HBM3 (UUID: GPU-9e0a41e1-b399-8934-01af-6198b749c02a)
GPU 6: NVIDIA H100 80GB HBM3 (UUID: GPU-dddd09ee-c944-1098-9c4e-d96f8762ecb1)
GPU 7: NVIDIA H100 80GB HBM3 (UUID: GPU-df52c109-0ac1-30cc-226b-85b1a8a6bc16)

Verifica dell'integrità del cluster

Questa sezione mostra come testare il cluster di addestramento utilizzando lo strumento Cluster Health Scanner (CHS), preinstallato sull'immagine del cluster di addestramento. Lo strumento CHS controlla l'integrità del cluster eseguendo test come la diagnostica DCGM e i test NCCL per verificare che il cluster sia pronto per eseguire i carichi di lavoro.

Dal nodo di accesso del cluster, puoi eseguire il seguente script per eseguire i test utilizzando lo strumento CHS.

export CLUSTER_ID=<your_cluster_id>
export PARTITION=a3u
export MACHINE_TYPE=a3-ultragpu-8g
cd ~
/opt/cluster-health-scanner/deploy/slurm/cluster-validation.sh \
--nodelist=${CLUSTER_ID}-${PARTITION}-[0-1] \
--nodes=2 \
--partition=${PARTITION} \
--machine-type=${MACHINE_TYPE} \
--relative-exec-path=../../opt/cluster-health-scanner/deploy/slurm \
--results-dir=results

Un'esecuzione di test riuscita fornisce due set di risultati:

  • Output di riepilogo: nella console viene stampato un breve riepilogo, che dovrebbe essere simile all'esempio seguente.
  • Log dettagliati: per un report completo, consulta i log dettagliati salvati nella directory ~/results.
Starting DCGM Diagnostics...
DCGM diagnostics passing on all nodes!
Starting NCCL all_reduce_perf...
CURR_NODES:  cluster-id-0
cluster-id-1
NCCL test passing on all nodes!

Controlli di integrità e ripristino automatici

Per garantire l'affidabilità dei nodi, i cluster di addestramento monitorano continuamente l'integrità dei nodi utilizzando la seguente suite di controlli automatici. I cluster di addestramento eseguono controlli di integrità durante il prologo Slurm (prima dell'avvio di un job) e l'epilogo (dopo il completamento di un job).

Suite di controlli di integrità

  • Integrità della GPU: esegue una diagnostica dettagliata e individuale della GPU, inclusi il monitoraggio del codice nvidia-smi, dcgmi e xid.
  • Utilizzo del disco: verifica l'utilizzo elevato del disco sulle partizioni critiche (/, /mnt/localssd, /mnt/localdisk) per evitare che i job non vadano a buon fine a causa della mancanza di spazio.
  • Integrità della rete: verifica che le interfacce di rete principali abbiano un indirizzo IPv4. Se viene rilevato un problema, tenta di autoripararsi reimpostando l'interfaccia.
  • Carico della CPU: monitora il carico medio del sistema e registra un avviso se supera una soglia predefinita.

Procedura di ripristino da errori

Se un controllo rileva un errore grave e irrecuperabile, i cluster di addestramento di Vertex AI avviano automaticamente una procedura di ripristino da errori. La procedura standard prevede lo svuotamento dei nodi difettosi, la rimessa in coda del job Slurm interessato, quindi l'eliminazione e la ricreazione dei nodi svuotati per ripristinarli a uno stato integro.

Questo ripristino automatico è soggetto alle seguenti condizioni:

  • Limite di riavvio: la procedura di ripristino viene ignorata se il job Slurm interessato è già stato riavviato un determinato numero di volte.

  • Utilizzo della GPU: l'eliminazione e la ricreazione dei nodi vengono ignorate anche se il job in esecuzione sul nodo non utilizza tutte le GPU disponibili. In questo caso, il nodo viene svuotato solo per impedire la pianificazione di nuovi job.

Gestire manualmente i nodi di calcolo difettosi

I cluster di addestramento forniscono API per la segnalazione e la gestione manuale dei nodi di calcolo difettosi, il che è particolarmente utile se i controlli di integrità automatici non risolvono un problema. Puoi eseguire queste operazioni su un solo nodo alla volta.

Azione Descrizione Ideali per
Eliminazione nodo Rimuove un nodo difettoso specificato dal cluster. Questa è l'azione predefinita. Errori generali o quando un nodo non risponde e deve essere riciclato.
Segnalazione dell'host come difettoso Segnala l'host fisico sottostante come difettoso, attivando una procedura di riparazione o migrazione. Sospetti guasti hardware sulla macchina fisica che ospita il nodo GPU.

Azione 1: eliminare un nodo difettoso

Questa azione elimina il nodo specificato. Il risultato di questa operazione dipende dal fatto che il nodo sia classificato come "statico" o "dinamico" da Slurm:

  • Nodi statici: se l'indice di un nodo eliminato è inferiore al numero minimo di nodi del pool di nodi, viene ricreato un nuovo nodo di calcolo con lo stesso nome e le stesse specifiche.

  • Nodi dinamici: se l'indice di un nodo eliminato è maggiore del numero minimo di nodi, viene ricreato solo se è pianificato un carico di lavoro in attesa. In caso contrario, viene rimosso.

Questi esempi utilizzano un alias gcurl, che è una scorciatoia autenticata e pratica per interagire con gli endpoint API. Il seguente comando crea un alias per curl che include le intestazioni di autorizzazione richieste.

alias gcurl='curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json"'

Richiesta API per eliminare un nodo

Per eliminare un nodo difettoso, esegui la seguente richiesta POST. Il NODE_ID deve essere nel formato CLUSTER_ID-NODEPOOL_ID-INDEX.

  gcurl -X POST https://REGION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/REGION/modelDevelopmentClusters/CLUSTER_ID:reportFaultyNodes -d '{"nodeActions": [{"nodeId": "NODE_ID"}]}'
  

Controllare lo stato dell'operazione
Puoi monitorare il risultato dell'azione reportFaultyNodes controllando lo stato dell'operazione.

  gcurl https://REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID
  

Azione 2: segnalare un host come difettoso

Puoi segnalare l'host fisico di un nodo GPU come difettoso se sospetti un guasto hardware.

  • VM supportate: A3 Ultra e A4 High-GPU

  • Stato del nodo: il nodo di destinazione deve essere nello stato RUNNING prima di chiamare l'API. Passerà a REPAIRING in caso di chiamata riuscita e tornerà a RUNNING dopo la riparazione dell'host o la ricreazione del nodo su un nuovo host. Questa è un'operazione "best effort".

Prerequisito: concedere il ruolo IAM

Per utilizzare questa funzionalità, devi concedere il ruolo Amministratore istanze Compute (v1) (roles/compute.instanceAdmin.v1) all'agente di servizio Vertex AI.

  PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)")

  gcloud projects add-iam-policy-binding PROJECT_ID\
  --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-aiplatform.iam.iam.gserviceaccount.com" \
  --role="roles/compute.instanceAdmin.v1"
  

Richiesta API per segnalare un host

Esegui la seguente richiesta POST per segnalare l'host sottostante come difettoso. In questo caso, devi fornire uno o più comportamenti e descrizioni osservati per faultReasons.
Per il campo behavior, devi utilizzare uno dei seguenti valori:

Comportamento Descrizione
PERFORMANCE Le GPU collegate alla VM presentano problemi di prestazioni rispetto ad altre GPU del cluster, non vengono visualizzati errori XID nei log e Compute Engine non rileva altri pattern di errore comuni, come il danneggiamento silenzioso dei dati.
SILENT_DATA_CORRUPTION Vedi il danneggiamento dei dati nella VM, ma la VM continua a essere eseguita. Questo può essere dovuto a problemi come difetti della vCPU, bug software o problemi del kernel.
UNRECOVERABLE_GPU_ERROR Hai identificato un errore GPU irrecuperabile con un XID.
BEHAVIOR_UNSPECIFIED Non sai qual è il problema della tua VM.

Ecco un esempio della richiesta API.

gcurl -X POST \
  https://REGION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/REGION/modelDevelopmentClusters/CLUSTER_ID:reportFaultyNodes \
  -d '{"nodeActions": [{"nodeId": "NODE_ID", "reportFaultyHost": {"faultReasons": [{"behavior": "BEHAVIOR_1", "description": "DESCRIPTION_1"}, {"behavior": "BEHAVIOR_2", "description": "DESCRIPTION_2"}]}}]}'
  

In sintesi

Sfruttando sia i controlli di integrità automatici sia i controlli manuali descritti in questa pagina, puoi mantenere un ambiente di addestramento altamente resiliente. La gestione proattiva dell'integrità del cluster eliminando i nodi difettosi o segnalando problemi hardware garantisce il massimo tempo di attività e il completamento dei job di addestramento. Per problemi persistenti o complessi, valuta sempre la possibilità di consultare il Google Cloud team di assistenza per una diagnostica e un'assistenza approfondite.

Passaggi successivi

La configurazione del cluster di addestramento per la tolleranza agli errori è un passaggio fondamentale per creare un flusso di lavoro MLOps completo e pronto per la produzione.

  • Monitorare ed eseguire il debug dei job di addestramento: monitora l'avanzamento, l'utilizzo delle risorse e l'integrità dei job di addestramento, inclusa la procedura per identificare quando un nodo è stato recuperato o un job è stato riavviato a causa di un errore.
  • Orchestrare i job resilienti con Vertex AI Pipelines: per gli ambienti di produzione, utilizza Vertex AI Pipelines per creare un workflow automatizzato e ripetibile che invii i job di addestramento resilienti al cluster.
  • Gestire ed eseguire il deployment del modello: una volta completato il job di addestramento resiliente, utilizza Vertex AI Model Registry per creare una versione dell'artefatto del modello prima di eseguire il deployment del modello su un endpoint per gestire le richieste di inferenza online.