I cluster di addestramento di Gemini Enterprise Agent Platform utilizzano Simple Linux Utility for Resource Management (Slurm) come orchestratore per gestire e pianificare i job sul cluster.
Slurm è un sistema di gestione dei cluster e pianificazione dei job open source ampiamente utilizzato, noto per la sua scalabilità e tolleranza agli errori.
Funzionalità chiave di Slurm
- Slurm alloca un insieme di nodi di calcolo per l'utilizzo esclusivo di un job specifico per un periodo definito. In questo modo, un job ha accesso dedicato alle risorse necessarie per essere eseguito senza interferenze.
- Slurm fornisce un framework per la gestione dell'intero ciclo di vita di un job, dall'invio all'esecuzione, fino al monitoraggio e al completamento. Questo sistema è progettato specificamente per gestire job paralleli eseguiti su un insieme di nodi allocati.
- Slurm gestisce una coda di job in attesa, utilizzando un sofisticato motore di prioritizzazione per arbitrare l'accesso alle risorse di calcolo. Tenendo conto di fattori come le dimensioni del job, la priorità dell'utente e il tempo di attesa, questo sistema garantisce un utilizzo equo ed efficiente delle risorse nel cluster.
Configurazione di base del cluster
Prima di poter eseguire i job, devi definire la struttura fondamentale del tuo cluster Slurm. Questa sezione descrive in dettaglio le impostazioni di configurazione essenziali, tra cui come organizzare i nodi di calcolo in partizioni, specificare un pool di nodi di accesso dedicato e configurare una home directory condivisa per gli utenti.
Partizioni
Le partizioni raggruppano i nodi in set logici, il che può essere utile per gestire
diversi tipi di macchine o livelli di accesso. Sono definiti come un elenco all'interno del campo
partizioni di slurm_spec.
Ogni oggetto partizione ha i seguenti campi obbligatori:
id: un identificatore univoco per la partizione.node_pool_ids: un elenco contenente gli ID di uno o più node pool che appartengono a questa partizione.
Ad esempio:
"partitions": [
{
"id": "a4",
"node_pool_ids": [ "a4" ]
}
]
I job inviati senza --partition vengono eseguiti sulla partizione predefinita. Per specificare
la partizione predefinita, imposta default_partition_id in slurm_spec su
id di una delle tue partizioni. Se non lo imposti, la prima partizione
dell'elenco è quella predefinita.
Nodi di accesso
Il pool di nodi di accesso fornisce nodi dedicati che fungono da punto di accesso principale per gli utenti per interagire con il cluster. Il campo login_node_pool_id
specifica l'identificatore univoco per questo pool.
Ad esempio:
"login_node_pool_id": "login"
Spazio di archiviazione della home directory
Il campo home_directory_storage specifica l'istanza Filestore da montare come directory /home su tutti i nodi del cluster. In questo modo
viene fornita una home directory condivisa e persistente per tutti gli utenti.
Devi fornire il nome completo della risorsa dell'istanza Filestore per questo valore.
Ad esempio:
"home_directory_storage": "projects/PROJECT_ID/locations/REGION-ZONE/instances/FILESTORE_INSTANCE_NAME"
Configurazione avanzata di Slurm
I cluster di addestramento di Gemini Enterprise Agent Platform ti consentono di impostare i parametri slurm.conf e modificarli
in un cluster in esecuzione. Vedi
Mappe di configurazione di Slurm.
Contabilità, preemption e priorità
La contabilità Slurm è abilitata su ogni cluster, quindi puoi monitorare l'utilizzo delle risorse per job, ad esempio il tempo di CPU e la memoria. Puoi anche applicare limiti di contabilità, ponderare la priorità dei job e abilitare la preemption tramite config, come nella
specifica del cluster di esempio. Per informazioni su come funzionano, consulta la
documentazione di Slurm su accounting,
sul plug-in di priorità multifattoriale
e sul prerilascio.
Script di prologo ed epilogo
Puoi configurare script Bash personalizzati da eseguire automaticamente all'inizio (prologo) e alla fine (epilogo) di ogni job utilizzando i seguenti campi:
prolog_bash_scripts: un elenco di stringhe, dove ogni stringa contiene l'intero contenuto di uno script Bash da eseguire prima dell'inizio del job.epilog_bash_scripts: un elenco di stringhe, dove ogni stringa contiene l'intero contenuto di uno script Bash da eseguire al termine del job.
Questa operazione è utile per configurare un ambiente di lavoro univoco o eseguire attività di pulizia automatizzate.
Esempio di specifica del cluster
L'esempio seguente mostra una configurazione JSON per la creazione di un cluster di addestramento. Puoi adattare questa specifica alle tue esigenze.
{ // ... other cluster configurations ... "orchestratorSpec": { "slurmSpec": { "partitions": [ { "id": "a4", "node_pool_ids": ["a4"] } ], "login_node_pool_id": "login", "home_directory_storage": "projects/PROJECT_ID/locations/REGION-ZONE/instances/FILESTORE_INSTANCE_ID", "config": { "AccountingStorageEnforce": "associations,limits,qos", "PriorityType": "priority/multifactor", "PriorityWeightAge": "1000", "PriorityWeightFairshare": "10000", "PreemptType": "preempt/partition_prio", "PreemptMode": "REQUEUE", "PreemptExemptTime": "00:10:00" }, "prolog_bash_scripts": [ "#!/bin/bash\necho 'First prolog script running'", "#!/bin/bash\necho 'Second prolog script running'" ], "epilog_bash_scripts": [ "#!/bin/bash\necho 'Epilog script running'" ] // ... other Slurm settings ... } } }
Gestione e operazioni del cluster
Gestire un cluster in esecuzione
Una volta creato il cluster con le impostazioni di contabilità e preemptive scelte, puoi utilizzare gli strumenti a riga di comando di Slurm per gestire gli account utente e monitorare la pianificazione dei job.
Gestione dell'account con sacctmgr
Il comando sacctmgr è lo strumento principale per la gestione delle informazioni
di utenti e account nel database Slurm. Ad esempio, per aggiungere un nuovo utente a un account
e concedergli l'accesso a una partizione, esegui questo comando:
sudo sacctmgr add User Accounts=<account> Partition=<partition> <user>
Per un elenco completo di tutte le opzioni sacctmgr, consulta la
documentazione ufficiale di Slurm Accounting.
Controllare la priorità del job
Per controllare i componenti di priorità di ogni job nella coda, utilizza l'utilità sprio. Ciò è utile per capire perché l'esecuzione di determinati job è pianificata
prima di altri.
Per informazioni dettagliate sull'utilizzo, consulta la documentazione dell'utilità sprio.
Esempi di preemption
La documentazione ufficiale di Slurm fornisce diversi esempi funzionanti di strategie di preemptive diverse. Puoi trovarli nella pagina Preemption di Slurm.
Passaggi successivi
Di seguito ci concentreremo sui passaggi finali del ciclo di vita del machine learning: gestione, deployment e monitoraggio dei modelli addestrati.
- Esegui il deployment del modello per l'inferenza: esegui il deployment del modello addestrato in un endpoint di Gemini Enterprise Agent Platform per gestire le richieste di inferenza online su larga scala.
- Gestisci il ciclo di vita del tuo modello: utilizza Model Registry di Gemini Enterprise Agent Platform per versionare, confrontare e gestire i tuoi modelli. Una pipeline può essere configurata per registrare automaticamente un nuovo modello dopo l'addestramento.
- Monitora le esecuzioni della pipeline e il rendimento del modello:
- Monitoraggio della pipeline: monitora il grafico di esecuzione, gli artefatti e il rendimento delle esecuzioni della pipeline per eseguire il debug dei problemi e ottimizzare l'orchestrazione.
- Monitoraggio del modello: dopo il deployment, configura il monitoraggio per rilevare la deriva e le anomalie nel rendimento delle previsioni del modello, in modo da mantenere l'accuratezza del modello nel tempo.
- Ottimizza i costi e gestisci il ciclo di vita del cluster: quando utilizzi pipeline automatizzate, gestisci il ciclo di vita del cluster tenendo conto della frequenza di esecuzione.
- Per le esecuzioni poco frequenti, aggiungi un passaggio finale della pipeline per eliminare il cluster per risparmiare sui costi. In genere, ciò comporta la creazione di un componente della pipeline personalizzato che chiama la funzione di eliminazione.
- Per le esecuzioni frequenti, lascia attivo il cluster per ridurre il tempo di avvio del job.