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.

Logo SLURM

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.