Risponderemo a tutte le tue domande!

Stack MLperf: Slurm, Pyxis, Enroot

Illustrazione principale dello stack MLPerf

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


Hai altre domande? Scrivici!

By clicking «I Accept» you confirm that you have read and accepted the website Terms and Conditions, Privacy Policy, and Moneyback Policy.