Descrivere i concetti dell'utilità di pianificazione del cluster
Al termine di questa unità, si sarà in grado di descrivere le funzioni di pianificatori di processi, gestione risorse, High Performance Computing e High Throughput Computing.
Pianificatori di processi
Un pianificatore di processi per il cluster computing è un componente software che gestisce e assegna le risorse di elaborazione (ad esempio CPU, memoria e dischi) ai processi inviati al cluster. I pianificatori di processi stabiliscono i nodi del cluster più appropriati per l'esecuzione di un determinato processo in base alla disponibilità di risorse, alla priorità del processo e ad altri fattori. I pianificatori di processi assicurano che più processi in esecuzione in parallelo non interferiscano tra loro. I pianificatori di processi includono code in cui contenere i processi in sospeso e un criterio per pianificarli.
Gli obiettivi principali di un pianificatore di processi sono:
- Ridurre al minimo il tempo che intercorre tra la presentazione del lavoro e il suo completamento.
- Ottimizzare l'utilizzo della CPU.
- Ottimizzare la velocità effettiva del processo.
Gli utenti inviano i processi batch non interattivi al pianificatore. L'utilità di pianificazione archivia i processi batch, valuta le priorità e i requisiti in termini di risorse, quindi distribuisce i processi ai nodi di calcolo appropriati.
Lo script di processo inviato tramite l'utilità di pianificazione aggiunge il processo a una coda di processi. In base alle risorse disponibili tra quelle necessarie per il processo, l'utilità di pianificazione stabilisce quando il processo deve lasciare la coda e in quali nodi di back-end sarà eseguito.
Esistono diverse strategie di base seguite dai pianificatori per determinare il processo successivo da eseguire:
First Come, First Serve: I processi vengono eseguiti nello stesso ordine in cui vengono inseriti nella coda. Il vantaggio è che ogni processo verrà sicuramente eseguito; tuttavia, un piccolo set di processi potrebbe attendere per un tempo inadeguatamente lungo rispetto al tempo di esecuzione effettivo.
Shortest Job First: Il pianificatore stima il tempo di esecuzione di un processo in base al tempo dichiarato nel relativo script. I processi vengono classificati in ordine crescente in base al tempo di esecuzione. Anche se i processi brevi verranno avviati dopo un breve periodo di attesa, i processi a esecuzione prolungata, o dichiarati come tali, potrebbero non essere mai avviati.
Backfilling: L'utilità di pianificazione mantiene il concetto di First Come, First Serve senza impedire l'esecuzione dei processi a esecuzione prolungata. Il pianificatore esegue il processo solo quando è possibile eseguire il primo processo nella coda. In caso contrario, esamina il resto della coda per verificare se è possibile eseguire un altro processo senza estendere il tempo di attesa del primo processo in coda. Se lo trova un processo che risponde a queste caratteristiche, l'utilità di pianificazione lo esegue. I processi di piccole dimensioni hanno in genere tempi di attesa in coda brevi.
Resource Manager
Lo strumento di gestione risorse di un cluster computing alloca le risorse all'interno di un cluster di elaborazione. Gli strumenti di gestione risorse sono responsabili dell'allocazione di memoria, CPU, archiviazione e larghezza di banda ai processi in esecuzione nel cluster. Questo componente monitora l'utilizzo delle risorse all'interno del cluster, rileva eventuali risorse inattive o sottoutilizzate e le rialloca ad altri processi o attività che le richiedono.
Panoramica di Slurm
Slurm è un pianificatore di processi open source e uno strumento di gestione risorse per l'esecuzione di carichi di lavoro nei cluster Linux. Slurm offre un framework estendibile per la gestione di risorse e la pianificazione di processi in un ambiente cluster Linux. Supporta un'ampia gamma di tipi di processi, inclusi processi in parallelo, batch e interattivi. Slurm consente agli utenti di inviare processi tramite un'ampia varietà di interfacce, tra cui un'interfaccia da riga di comando, un'interfaccia basata sul Web e un'API. Slurm è una soluzione ampiamente diffusa di cui molti supercomputer e cluster di elaborazione più potenti fanno uso ed è disponibile come opzione per l'uso di High Performance Computing (HPC) in Microsoft Azure.
Slurm consente di abbinare le risorse di calcolo più appropriate in base a criteri come CPU, GPU e memoria.
Il pianificatore di processi di Slurm esegue le funzioni importanti seguenti:
- Alloca l'accesso ai nodi di calcolo agli utenti nei cluster HPC per consentire l'esecuzione delle attività
- Fornisce un framework per l'avvio, l'esecuzione e il monitoraggio del lavoro su un set di nodi allocati
- Arbitra le contese per le risorse gestendo una coda di processi in sospeso
Processi di Slurm
Quando si usa Slurm per eseguire un processo in un cluster HPC Linux, vengono completati i passaggi generali seguenti:
- Invio di processi: Il primo passaggio consiste nell'invio di un processo al pianificatore di processi di Slurm tramite la creazione di uno script di processo che include i requisiti di risorse e il set di comandi che il processo richiede.
- Allocazione di processi: La fase successiva riguarda il pianificatore di Slurm che esamina i requisiti di risorse del processo, ad esempio il numero necessario di nodi, CPU e memoria, oltre ad altri vincoli come i limiti di partizioni e di tempo. In base a questi requisiti, il pianificatore determina le risorse migliori disponibili da allocare per il processo, considerando l'utilizzo corrente del cluster e gli altri processi in sospeso.
- Accodamento di processi: Il pianificatore determina se le risorse richieste sono disponibili. Se le risorse sono immediatamente disponibili, il processo viene eseguito. Se le risorse richieste non sono immediatamente disponibili, il processo viene inserito in una coda. Il pianificatore valuta continuamente i processi in coda e le relative priorità per allocare le risorse non appena diventano disponibili.
- Esecuzione di processi: Dopo l'allocazione delle risorse necessarie, viene avviata l'esecuzione del processo di Slurm nei nodi assegnati. Le attività specificate nello script vengono eseguite nei nodi.
- Completamento di processi: Il passaggio finale consiste nel completamento del processo, in cui le risorse di calcolo vengono rilasciate nuovamente al cluster e il pianificatore aggiorna lo stato del processo in completato. L'output del processo e gli eventuali messaggi di errore potenzialmente generati durante l'esecuzione del processo vengono salvati nei file di output designati.
- Accounting e report relativi ai processi: Slurm genera dati di accounting sui processi completati, inclusi l'utilizzo delle risorse e il tempo di esecuzione.
Comandi Slurm
Per eseguire azioni in un cluster di elaborazione gestito tramite Slurm si usa un set di utilità da riga di comando. Ecco alcuni comandi comuni dell'utente Slurm:
Comando | Funzione |
---|---|
sacct |
Questo comando comunica informazioni di accounting sui passaggi e sui processi attivi o completati. |
salloc |
Usare questo comando al fine di allocare risorse per un processo in tempo reale. Consente di generare una shell e di eseguire comandi srun per avviare attività in parallelo. |
sattach |
Questo comando collega le funzionalità di standard input, output e segnali di errore a un processo o a un passaggio di processo attualmente in esecuzione. |
sbatch |
Usare questo comando per inviare uno script di processo per un'esecuzione successiva. Questi script includono in genere uno o più comandi srun per avviare attività in parallelo. |
scancel |
Usare questo comando per trasferire un file nei nodi necessari. |
scontrol |
Si tratta di uno strumento di amministrazione di Slurm che consente di visualizzare e modificare lo stato di Slurm. La maggior parte dei comandi scontrol richiede privilegi radice. |
sinfo |
Questo comando visualizza informazioni sulle partizioni e sui nodi che Slurm gestisce. |
sprio |
Usare questo comando per visualizzare informazioni sui componenti che influiscono sulla priorità di un processo. |
squeue |
Usare questo comando per visualizzare lo stato dei processi o dei passaggi del processo. |
srun |
Usare questo comando per inviare un processo per l'esecuzione o per attivare i passaggi del processo in tempo reale. È possibile usare srun per specificare i requisiti delle risorse, ad esempio il numero minimo e massimo di nodi, il numero di processori e le caratteristiche dei nodi. |
sstat |
Usare questo comando per visualizzare informazioni sulle risorse utilizzate eseguendo processi o passaggi di processi. |
strigger |
Usare questo comando per configurare o visualizzare trigger di eventi, ad esempio cosa fare in caso di errori di un nodo o se un processo si avvicina a un limite di tempo. |
sview |
Usare questo comando per visualizzare informazioni sullo stato di processi, partizioni e nodi che Slurm gestisce. |
Per altre informazioni sui comandi Slurm, vedere la Guida introduttiva a Slurm.