Simple Linux Utility for Ressource Management (SLURM) est un système d’ordonnancement de tâches permettant d’organiser les ressources et le lancement de tâches sur un cluster de calcul. Un cluster SLURM est composé d’un ou plusieurs nœuds de calcul (Compute) sur lesquels les tâches sont exécutées, et d’un ou plusieurs nœuds contrôleur (Controller) dont le but est d’organiser les ressources du cluster et d’ordonnancer l’exécution des tâches.
Installation et configuration du cluster SLURM
La procédure d’installation de SLURM est similaire sur les nœuds contrôleurs
et sur les nœuds de calcul. La différence réside dans les services systemd
lancés ainsi que les permissions sur certains dossiers propres aux services
systemd en question. L’installation consiste à installer
munge, le service permettant d’authentifier les
nœuds qui le compose, créer l’utilisateur de service slurm
(avec le même UID
et GID pour tous les nœuds du cluster), et installer les paquets SLURM à partir
du code source téléchargé depuis le site officiel.
Cette procédure a été testée sur Rocky linux version 8.6.
Sur tous les nœuds composant le cluster
dnf install -y munge
create-munge-key # copier la clé sur les autres nœuds
export SLURMUSER=1003
groupadd -g $SLURMUSER slurm
useradd -m -c "SLURM workload manager" -d /var/lib/slurm -u $SLURMUSER -g slurm -s /bin/bash slurm
curl -O https://download.schedmd.com/slurm/slurm-24.11.1.tar.bz2
dnf config-manager --set-enabled powertools
dnf install -y rpm-build perl python3 readline-devel pam-devel mariadb-devel munge-devel autoconf automake gcc vim tmux
rpmbuild -ta slurm-24.11.1.tar.bz2
dnf install rpmbuild/RPMS/x86_64/slurm-*
Créer un fichier de configuration /etc/slurm/slurm.conf
commun à tous les
nœuds du cluster en utilisant l’outil
officiel et renseigner le nom de
tous les nœuds du cluster.
Sur les nœuds contrôlleurs
Utilisation du service slurmctl
.
mkdir /var/spool/slurmctld
chown slurm:slurm /var/spool/slurmctld
chmod 755 /var/spool/slurmctld
mkdir /var/log/slurm
touch /var/log/slurm/slurmctld.log
touch /var/log/slurm/slurm_jobacct.log /var/log/slurm/slurm_jobcomp.log
chown -R slurm:slurm /var/log/slurm/
systemctl enable --now slurmctld
Sur les nœuds de calcul
Utilisation du service slurmd
.
mkdir /var/spool/slurmd
chown slurm: /var/spool/slurmd
chmod 755 /var/spool/slurmd
mkdir /var/log/slurm/
touch /var/log/slurm/slurmd.log
chown -R slurm:slurm /var/log/slurm/slurmd.log
systemctl enable --now slurmd
Vérification du bon fonctionnement
Lancer la commande scontrol show node
pour voir les nœuds de calcul du
cluster.
[root@slurm1 ~]# scontrol show node
NodeName=slurm2 Arch=x86_64 CoresPerSocket=1
CPUAlloc=0 CPUEfctv=1 CPUTot=1 CPULoad=0.00
AvailableFeatures=(null)
ActiveFeatures=(null)
Gres=(null)
NodeAddr=192.168.0.67 NodeHostName=slurm2 Version=24.11.1
OS=Linux 4.18.0-553.40.1.el8_10.x86_64 #1 SMP Thu Feb 13 13:28:49 UTC 2025
RealMemory=1 AllocMem=0 FreeMem=378 Sockets=1 Boards=1
State=IDLE ThreadsPerCore=1 TmpDisk=0 Weight=1 Owner=N/A MCS_label=N/A
Partitions=debug
BootTime=2025-02-14T10:17:37 SlurmdStartTime=2025-02-14T13:31:16
LastBusyTime=2025-02-14T13:31:31 ResumeAfterTime=None
CfgTRES=cpu=1,mem=1M,billing=1
AllocTRES=
CurrentWatts=0 AveWatts=0
Partitions
Afin de mieux prioriser l’exécution des tâches en fonction des besoins des
utilisateurs, il est possible de créer des partitions. Lors de la soumission
de tâches, les utilisateurs peuvent cibler des partitions en fonction de leurs
besoin en terme de mémoire vive, nombre de processeurs, de cartes graphiques ou
de temps de calcul par exemple. Les partitions sont configurées par les
directives PartitionName
dans le fichier de configuration slurm.conf
et
gres
et permettent de cibler des nœuds
selon leurs caractéristiques et d’établir les politiques d’exécutions des
tâches.
Lancer la commande sinfo
pour visualiser les partitions disponibles et les
nœuds affectés.
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
debug* up infinite 1 idle slurm2
Journalisation
Les options de journalisation permettent de déterminer la façon dont sont
stockées les informations sur les tâches exécutées. Le journal des tâches
exécutées peut être stocké en texte brute ou sur base de données. Dans le fichier
de configuration slurm.conf
, utiliser l’option JobCompType
pour choisir le
type de journalisation, et les options JobComp*
pour les détails propres aux
types de journalisation.
En sélectionnant JobCompType=jobcomp/filetxt
et
JobCompLoc=/var/log/slurm/slurm_jobcomp.log
, on obtient des informations sur
les tâches au format suivant :
JobId=3 UserId=vinleq(1000) GroupId=vinleq(1001) Name=test JobState=COMPLETED Partition=debug TimeLimit=1 StartTime=2025-02-14T14:58:43 EndTime=2025-02-14T14:58:43 NodeList=slurm2 NodeCnt=1 ProcCnt=1 WorkDir=/home/vinleq ReservationName= Tres=cpu=1,mem=1M,node=1,billing=1 Account=vinleq QOS= WcKey= Cluster=unknown SubmitTime=2025-02-14T14:58:42 EligibleTime=2025-02-14T14:58:42 DerivedExitCode=0:0 ExitCode=0:0
Le site officiel de SLURM a une page dédiée aux options de journalisation.
Soumission de tâches
La soumission d’une tâche se fait par le biais d’un script bash
qui contient des
métadonnées sur la tâches telles que la partition souhaitée, ainsi que la tâche à
effectuer. Exemple de tâche :
#!/bin/bash
#SBATCH --job-name=test # Nom de la tâche
#SBATCH --partition=debug # Choix de la partition
#SBATCH --nodes=1 # Nombre de noeuds à utilier pour la tâche
#SBATCH --ntasks-per-node=1 # Nombre de tâche par noeuds
#SBATCH --cpus-per-task=1 # Nombre de CPU par tâche
#SBATCH --time=00:00:01 # Wall
#SBATCH --output=test-%j.out # Fichier de sortie
#SBATCH --error=test-%j.out # Fichier de sortie
echo "test"
Soumettre la tâche au cluster avec la commande sbatch <fichier>
sur une
machine disposant du fichier slurm.conf
du cluster. Au moment de l’exécution de
la tâche, SLURM va placer des variables d’environnement contextuelles telles que
le nom de tâche (SLURM_JOB_NAME
), le nom du nœud de calcul (SLURMD_NODENAME
)
sur lequel elle est lancée ou le nombre de cartes graphiques utilisables
(SLURM_JOB_GPUS
ou CUDA_VISIBLE_DEVICES
).
L’exécution de la tâche peut-être suivie dans le fichier test-<numero de la
tâche>.out
et au moyen de la commande squeue
. La référence sur la
configuration des tâches est disponible sur le site officiel de
SLURM.