Stack MLperf: Slurm, Pyxis, Enroot

Il benchmark MLperf è considerato uno dei set di test benchmark che permette di giudicare accuratamente le prestazioni dei server con GPU e acceleratori IA. Sfortunatamente, non è il benchmark a cui tutti sono abituati, in cui basta eseguire un file eseguibile e ottenere il risultato finale dopo un po' di tempo. MLperf è un insieme di script che permette di effettuare test su vari dataset. I dataset stessi non sono inclusi nel kit benchmark. È necessario scaricarli separatamente e prepararli per il lavoro.
Nelle versioni moderne di MLperf, questo insieme di script non può essere eseguito su un sistema pulito. Per testare il benchmark in azione, è necessario preparare l'ambiente di conseguenza per la maggior parte dei test. Gli autori di MLperf hanno scelto Slurm Workload Manager come strumento di gestione dei job, che viene utilizzato nella maggior parte dei supercomputer nel mondo. Questa applicazione open-source permette una gestione flessibile dei carichi di lavoro distribuendo i compiti di calcolo tra tutti i membri del cluster.
Un cluster Slurm minimale consiste in un nodo di calcolo e un nodo di gestione. Idealmente, si tratta di due server diversi che comunicano tra loro utilizzando gli hostname, che nel caso di Linux, sono specificati nel file /etc/hosts. Oltre al cluster configurato, MLperf richiede due plugin: Pyxis ed Enroot. Il primo è un'estensione che permette a un utente non privilegiato di eseguire carichi di lavoro containerizzati. Il secondo rimuove la maggior parte dei meccanismi di isolamento dai container regolari, eliminando quasi tutti i costi di performance mantenendo la separazione del file system.
Passo 1. Preparare il sistema
Inizia aggiornando il repository cache dei pacchetti e i pacchetti installati:
sudo apt update && sudo apt -y upgrade
Non dimenticare di installare i driver NVIDIA® utilizzando il comando autoinstall o manualmente, utilizzando la nostra guida passo-passo:
sudo ubuntu-drivers autoinstall
Riavvia il server:
sudo shutdown -r now
Passo 2. Installare Slurm
Per queste istruzioni, Ubuntu 22.04 LTS è stato scelto come sistema operativo, quindi Slurm può essere installato direttamente dal repository standard. Il pacchetto slurm-wlm contiene sia slurmd per il nodo di calcolo sia slurmctld per il nodo di controllo. Installa il pacchetto:
sudo apt install slurm-wlm
Per impostazione predefinita, dopo l'installazione, nessuno dei daemon funzionerà perché manca il file di configurazione principale, slurm.conf. Gli sviluppatori hanno fatto uno sforzo per ridurre la barriera all'ingresso creando una pagina web con un configuratore. Qui, è possibile assemblare autonomamente il file di configurazione in parti, utilizzando i suggerimenti forniti per ogni elemento.
Si prega di notare che per un'installazione standard su Ubuntu 22.04 LTS, ha senso scegliere LinuxProc invece di Cgroup. Dopo aver cliccato sul pulsante Submit in fondo alla pagina, riceverai il testo definitivo del file di configurazione. Copialo negli appunti e lancia il seguente comando:
sudo nano /etc/slurm/slurm.conf
Incolla il contenuto degli appunti e salva il file. Ora, puoi avviare il daemon del nodo di calcolo:
sudo systemctl start slurmd.service
Puoi controllare lo stato del daemon usando il seguente comando:
sudo systemctl status slurmd.service
Passo 3. Configura il controller Slurm
Prima di poter avviare il daemon del controller, dovrai fare alcuni passaggi aggiuntivi. Prima di tutto, devi creare una directory dove il daemon può memorizzare informazioni di servizio sui job in esecuzione:
sudo mkdir -p /var/spool/slurmctld
La directory è stata creata con successo, ma attualmente, l'utente slurm, per conto del quale è in esecuzione il controller, non può scrivere nulla lì. Facciamo in modo che ne sia il proprietario della directory:
sudo chown slurm:slurm /var/spool/slurmctld
Ora, puoi avviare il daemon del controller:
sudo systemctl start slurmctld.service
Per controllare lo stato operativo del controller, puoi usare il comando standard:
sudo systemctl status slurmctld.service
Puoi anche visualizzare immediatamente lo stato attuale del sistema, in particolare quanti nodi di calcolo sono collegati al controller e determinare il loro stato attuale:
sinfo
PARTIZIONE DISPONIBILE TEMPO MASSIMO NODI STATO LISTA NODI debug* up infinite 1 idle gpuserver
Passo 4. Installare Pyxis
Slurm estende le sue capacità utilizzando il meccanismo SPANK (Slurm Plug-in Architecture for Node and Job [K]control). Non è necessario installarlo o configurarlo separatamente dall'applicazione principale. Tuttavia, è consigliabile fermare temporaneamente entrambi i daemon prima di qualsiasi installazione del plugin:
sudo systemctl stop slurmd.service && sudo systemctl stop slurmctld.service
Poiché il processo di installazione di Pyxis comporta la costruzione dal codice sorgente, devi prima installare un pacchetto contenente le librerie per sviluppatori:
sudo apt -y install libslurm-dev
Il processo di costruzione di Pyxis presuppone che l'applicazione sia installata dalla sorgente e cercherà alcuni file nel percorso assoluto /use/include/slurm. Nel nostro esempio, il pacchetto slurm-wlm li ha messi nella diversa directory /usr/include/slurm-wlm. Per risolvere questo problema, basta creare un link simbolico:
sudo ln -s /usr/include/slurm-wlm /usr/include/slurm
Clona il codice sorgente del plugin dal repository ufficiale Nvidia:
git clone https://github.com/NVIDIA/pyxis
Apri la directory scaricata:
cd pyxis
Avvia il processo di compilazione:
sudo make install
Una Volta™ completata la compilazione, dovrai creare un altro link simbolico:
sudo ln -s /usr/local/share/pyxis/pyxis.conf /etc/slurm/plugstack.conf.d/pyxis.conf
Ora, tutto è pronto per avviare entrambi i daemon:
sudo systemctl start slurmd.service && sudo systemctl start slurmctld.service
Se eseguito correttamente, quando esegui il seguente comando, vedrai nuove opzioni contrassegnate [pyxis]:
srun --help
Passo 5. Installare Enroot
Proprio come con il plugin precedente, ha senso fermare prima i daemon:
sudo systemctl stop slurmd.service && sudo systemctl stop slurmctld.service
Successivamente, utilizza la funzionalità del comando shell per salvare i dati dell'architettura CPU in una variabile separata. Questo è comodo per l'esecuzione di comandi successivi, in quanto sostituisce automaticamente il valore salvato, piuttosto che richiedere la modifica manuale:
arch=$(dpkg --print-architecture)
Scarica il pacchetto DEB:
curl -fSsL -O https://github.com/NVIDIA/enroot/releases/download/v3.4.1/enroot_3.4.1-1_${arch}.deb
Puoi installarlo usando l'utilità dpkg:
sudo dpkg -i enroot_3.4.1-1_${arch}.deb
Se il sistema segnala che mancano alcune dipendenze, è possibile installarle manualmente:
sudo apt-get -f install
Infine, avvia entrambi i daemon:
sudo systemctl start slurmd.service && sudo systemctl start slurmctld.service
Questo è il minimo insieme di passaggi necessari per implementare un semplice cluster Slurm con i plugin Pyxis e Enroot. Ulteriori informazioni possono essere trovate nella documentazione ufficiale sul sito del progetto.
Vedi anche:
Aggiornato: 28.03.2025
Pubblicato: 09.07.2024