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,dcgmiexid. - 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'azionereportFaultyNodes 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
RUNNINGprima di chiamare l'API. Passerà aREPAIRINGin caso di chiamata riuscita e tornerà aRUNNINGdopo 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.