I cluster di addestramento 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 eseguito un processo automatizzato
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 ti consente di eliminare manualmente un nodo difettoso specifico o di segnalare un sospetto
guasto hardware sull'host sottostante.
Esegui un workload di test per verificare la funzionalità della GPU
Passaggio 1: connettiti ai nodi del cluster utilizzando SSH
Da Cloud Shell o dalla console Google Cloud , 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: esegui 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]
Successivamente, invia un job batch.
~$ sbatch --qos normal --wrap "echo start! && sleep 10s && echo done!"
Dovresti vedere che nella tua directory home è stato creato un file slurm-job-id.out.
Passaggio 3: esegui un carico di lavoro 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 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 test riuscito fornisce due serie di risultati:
- Output riepilogativo: 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 automatizzati. I cluster di addestramento eseguono controlli di integrità durante il prologo di Slurm (prima dell'inizio di un job) e l'epilogo (dopo il completamento di un job).
Suite di controlli di integrità
- Integrità GPU: esegue una diagnostica dettagliata e individuale della GPU, incluso il monitoraggio dei codici
nvidia-smi,dcgmiexid. - Utilizzo del disco: verifica l'utilizzo elevato del disco sulle partizioni critiche
(
/,/mnt/localssd,/mnt/localdisk) per evitare l'interruzione dei job per mancanza di spazio. - Stato della rete: verifica che le interfacce di rete principali abbiano un indirizzo IPv4. Se viene rilevato un problema, il sistema tenta di risolverlo reimpostando l'interfaccia.
- Carico 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 Vertex AI avviano automaticamente un processo di recupero in caso di errore. La procedura standard prevede lo svuotamento dei nodi difettosi, la rimessa in coda del job Slurm interessato e poi l'eliminazione e la ricreazione dei nodi svuotati per ripristinarli in uno stato integro.
Questo recupero automatico è soggetto alle seguenti condizioni:
Limite di riavvio: il processo di recupero viene ignorato se il job Slurm interessato è già stato riavviato un determinato numero di volte.
Utilizzo GPU: l'eliminazione e la ricreazione del nodo vengono saltate 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.
Gestione manuale dei nodi di computing difettosi
I cluster di addestramento forniscono API per segnalare e gestire manualmente i nodi di calcolo difettosi, il che è particolarmente utile se i controlli di integrità automatizzati non risolvono un problema. Puoi eseguire queste operazioni su un solo nodo alla volta.
| Azione | Descrizione | Ideali per |
|---|---|---|
| Elimina nodo | Rimuove un nodo difettoso specificato dal cluster. Questa è l'azione predefinita. | Errori generali o quando un nodo non risponde e deve essere riciclato. |
| Segnala 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: elimina 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 conteggio minimo di nodi del pool di nodi, viene ricreato un nuovo nodo di computing 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 conveniente
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. 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"}]}'
Controlla lo stato dell'operazione
Puoi monitorare il risultato dell'azionereportFaultyNodes controllando lo stato dell'operazione.
gcurl https://REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID
Azione 2: segnala 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
RUNNINGprima di chiamare l'API. Passerà aREPAIRINGin caso di chiamata riuscita e tornerà aRUNNINGdopo che l'host sarà stato riparato o il nodo sarà stato ricreato su un nuovo host. Questa è un'operazione "best effort".
Prerequisito: concedi 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 osservati e descrizioni 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 nel 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. Ciò può essere dovuto a problemi come difetti della vCPU, bug del software o problemi del kernel. |
UNRECOVERABLE_GPU_ERROR |
Hai identificato un errore GPU irreversibile con un XID. |
BEHAVIOR_UNSPECIFIED |
Non sai qual è il problema della tua VM. |
Ecco un esempio di 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à automatizzati 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 i problemi hardware garantisce il massimo tempo di attività e il completamento corretto dei job di addestramento. Per problemi persistenti o complessi, valuta sempre di consultare il Google Cloud team di assistenza per una diagnostica approfondita e assistenza.
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.
- Monitora ed esegui il debug dei job di addestramento: monitora l'avanzamento, l'utilizzo delle risorse e l'integrità dei job di addestramento, incluso come identificare quando un nodo è stato recuperato o un job è stato riavviato a causa di un errore.
- Orchestra i tuoi job resilienti con Vertex AI Pipelines: per gli ambienti di produzione, utilizza Vertex AI Pipelines per creare un flusso di lavoro automatizzato e ripetibile che invii i job di addestramento resilienti al cluster.
- Gestisci ed esegui il deployment del modello: una volta completato il job di addestramento resiliente, utilizza Vertex AI Model Registry per controllare la versione dell'artefatto del modello prima di eseguire il deployment del modello in un endpoint per gestire le richieste di inferenza online.