Installer et exploiter Slurm : ressources et ordonnancement d’un cluster HPC Linux
EdwardMoon
Le déploiement de Slurm ne s’arrête pas à l’installation des paquets. Il faut harmoniser l’heure et les UID/GID sur tous les nœuds, établir le domaine de confiance MUNGE, puis configurer dans l’ordre le contrôleur slurmctld, les nœuds de calcul slurmd et, si nécessaire, le service slurmdbd de stockage de l’historique des tâches et de l’utilisation des ressources.
Ce guide relie la séparation des rôles, la création des paquets, slurm.conf, l’isolation des ressources par cgroup, l’enregistrement de l’historique des tâches et de l’utilisation des ressources, la soumission et la validation, le drainage des nœuds et les sauvegardes. Remplacez impérativement les noms de nœuds et les ressources des exemples par les valeurs réelles de slurmd -C.

Terminologie : dans Slurm, Accounting désigne la collecte, le stockage et la consultation de l’historique d’exécution des tâches et des ressources allouées ou utilisées. Ce guide parle d’enregistrement de l’historique des tâches et de l’utilisation des ressources.
Déployer Slurm : rôles et périmètres de panne
| Composant | Rôle | Point clé d’exploitation |
|---|---|---|
| slurmctld | Ordonnancement et état du cluster. | Protection de StateSaveLocation et conception de la haute disponibilité. |
| slurmd | Exécution des tâches sur les nœuds de calcul. | Spool local et isolation cgroup. |
| MUNGE | Identifiants d’authentification entre nœuds. | Clé commune, heure exacte et permissions strictes. |
| slurmdbd | Intermédiaire pour le stockage et la consultation de l’historique des tâches et de l’utilisation des ressources en base. | Protection des secrets de la base, sauvegardes et gestion séparée des pannes. |
| slurmrestd | API REST facultative. | Aucune exposition directe à Internet ; authentification et proxy dédiés. |
Déployer Slurm : prérequis des nœuds, de l’heure et des UID/GID
La résolution directe et inverse des noms, les identifiants numériques des utilisateurs et la synchronisation NTP doivent être cohérents pour garantir le bon fonctionnement de MUNGE et la propriété des tâches. Sans annuaire central tel que LDAP, fixez les identifiants numériques dans la procédure de provisionnement des comptes.
hostnamectl --static
getent hosts ctrl01
getent hosts node01
id slurm
id hpcuser
timedatectl status
chronyc tracking
chronyc sources -v
Comptes de service et répertoires
sudo groupadd --system slurm
sudo useradd --system --gid slurm --home-dir /var/lib/slurm --shell /sbin/nologin slurm
sudo install -d -o slurm -g slurm -m 0750 /var/lib/slurm/controller
sudo install -d -o root -g root -m 0755 /var/lib/slurm
sudo install -d -o root -g root -m 0755 /var/lib/slurm/slurmd
sudo install -d -o slurm -g slurm -m 0750 /var/log/slurm
Créer manuellement les comptes sur plusieurs nœuds peut produire des UID/GID différents. Fixez les identifiants numériques selon la norme de l’organisation ou fournissez-les par un annuaire central.
SlurmdSpoolDir est une zone d’administration réservée à root sur les nœuds de calcul, mais les utilisateurs des tâches doivent pouvoir traverser son chemin pour exécuter les scripts. Créez-la donc avec root:root et le mode 0755, sans la confondre avec le répertoire d’état du contrôleur, en slurm:slurm et 0750. Vérifiez aussi que le répertoire parent /var/lib/slurm est en 0755.
Préparer des paquets Slurm reproductibles
En production, privilégiez la construction de paquets RPM ou DEB à partir de l’archive tarball officielle, puis leur conservation dans un dépôt interne signé, plutôt que des make install répétés depuis les sources. Gérez de manière cohérente les versions majeures et mineures de Slurm ainsi que les options de compilation des plugins sur les contrôleurs, les nœuds de connexion et les nœuds de calcul.
sha256sum "${SLURM_TARBALL}"
rpmbuild -ta "${SLURM_TARBALL}"
rpm -qp --queryformat '%{NAME} %{VERSION}-%{RELEASE}
' ~/rpmbuild/RPMS/*/slurm-*.rpm
Déterminez les dépendances de compilation nécessaires à la distribution, à la base de données, à PMIx, à hwloc et aux cgroups à partir de la documentation officielle et de la matrice de compatibilité interne. N’installez pas les paquets d’un dépôt Internet choisi au hasard sur un seul contrôleur.
Installer les paquets construits selon chaque rôle
rpmbuild n’effectue pas l’installation. Avant la compilation, préparez les dépendances des plugins : bibliothèques de développement MUNGE, hwloc, libbpf et D-Bus pour cgroup v2, ainsi que les bibliothèques de développement MySQL/MariaDB pour le stockage de l’historique et de l’utilisation des ressources. Publiez les RPM de la même version dans le dépôt interne, puis installez les paquets suivants selon chaque rôle. Le dépôt doit contenir la compilation que vous avez validée ; vérifiez d’abord la version proposée à l’installation.
# Vérifier les versions candidates et leur origine dans le dépôt interne
dnf info slurm slurm-perlapi slurm-slurmctld slurm-slurmd slurm-slurmdbd
# ctrl01
sudo dnf install slurm slurm-perlapi slurm-slurmctld
# Sur chaque nœud de calcul, de node01 à node04
sudo dnf install slurm slurm-perlapi slurm-slurmd
# Nœud de connexion
sudo dnf install slurm slurm-perlapi
# acct01 : si le stockage de l’historique des tâches et de l’utilisation des ressources est activé
sudo dnf install slurm slurm-slurmdbd
Déployer Slurm : créer le domaine de confiance MUNGE
Distribuez la même clé MUNGE à tous les nœuds d’un cluster. Transmettez-la par un canal sûr de gestion de configuration et limitez sa lecture à l’utilisateur munge. MUNGE doit démarrer avant Slurm.
sudo /usr/sbin/mungekey --create
sudo chown munge:munge /etc/munge/munge.key
sudo chmod 0400 /etc/munge/munge.key
sudo systemctl enable --now munge
munge -n | unmunge
Après avoir distribué de façon sûre la clé créée sur le contrôleur, comparez son propriétaire et son hachage sur chaque nœud. N’affichez pas le contenu de la clé dans la ligne de commande ou dans les journaux ordinaires.
sudo stat -c '%U:%G %a %n' /etc/munge/munge.key
sudo sha256sum /etc/munge/munge.key
remunge
Déployer Slurm : générer slurm.conf à partir du matériel réel
Ne devinez pas le nombre de CPU, de sockets, de cœurs ou la mémoire. Exécutez slurmd -C sur chaque nœud de calcul et créez les définitions NodeName par groupes de modèles identiques.
slurmd -C
lscpu
free -m
lsblk -o NAME,SIZE,TYPE,MOUNTPOINTS
ClusterName=hpc-prod
SlurmctldHost=ctrl01
SlurmUser=slurm
StateSaveLocation=/var/lib/slurm/controller
SlurmdSpoolDir=/var/lib/slurm/slurmd
SlurmctldLogFile=/var/log/slurm/slurmctld.log
SlurmdLogFile=/var/log/slurm/slurmd.log
AuthType=auth/munge
SelectType=select/cons_tres
SelectTypeParameters=CR_Core_Memory
SchedulerType=sched/backfill
ProctrackType=proctrack/cgroup
TaskPlugin=task/cgroup
AccountingStorageType=accounting_storage/slurmdbd
AccountingStorageHost=acct01
JobAcctGatherType=jobacct_gather/cgroup
NodeName=node[01-04] CPUs=32 RealMemory=125000 State=UNKNOWN
PartitionName=compute Nodes=node[01-04] Default=YES MaxTime=2-00:00:00 State=UP
Les valeurs CPUs et RealMemory de NodeName sont des exemples. Réservez de la mémoire au système d’exploitation en définissant une valeur légèrement inférieure à celle indiquée par slurmd -C. En présence de GPU, validez séparément GRES et les paramètres cgroup des périphériques.
Isolation des ressources avec cgroup v2
Enregistrez le contenu ci-dessous dans cgroup.conf, dans le même répertoire de configuration que slurm.conf. Distribuez le fichier slurm.conf précédent de manière cohérente à tous les nœuds participants. Si le stockage de l’historique des tâches et de l’utilisation des ressources n’est pas encore prêt, omettez ou commentez les deux lignes AccountingStorageType et AccountingStorageHost. Les versions actuelles de Slurm désactivent ce stockage persistant en laissant AccountingStorageType non défini ; n’indiquez pas l’ancien nom de plugin accounting_storage/none, qui a été supprimé. Dans ce cas, effectuez les étapes sacct et sacctmgr après avoir configuré slurmdbd et la base de données.
CgroupPlugin=autodetect
ConstrainCores=yes
ConstrainRAMSpace=yes
ConstrainDevices=yes
stat -fc %T /sys/fs/cgroup
scontrol show config | grep -E 'ProctrackType|TaskPlugin|SelectType'
systemd-cgls --no-pager
slurmdbd : stocker l’historique des tâches et l’utilisation des ressources
Pour conserver durablement l’historique des tâches, l’utilisation par compte Slurm et les QoS, configurez slurmdbd et une base SQL prise en charge. Selon l’échelle de l’installation, placez le serveur SQL sur un hôte distinct.
L’exemple suivant réunit slurmdbd et un serveur MariaDB/MySQL compatible sur acct01. Préparez d’abord l’installation de la base, la prise en charge d’InnoDB et la politique de sauvegarde. Dans une session d’administration de la base, créez slurm_acct_db et le compte slurm, puis accordez-lui des droits uniquement sur cette base. Ne placez pas le véritable mot de passe dans les arguments de commandes shell ou dans les fichiers d’historique : saisissez-le selon la procédure d’administration. Si vous séparez le serveur SQL dans un environnement plus vaste, modifiez aussi StorageHost et l’hôte de connexion autorisé pour le compte de base de données.
-- Exemple SQL à exécuter dans une session d’administration de la base
CREATE DATABASE slurm_acct_db;
CREATE USER 'slurm'@'localhost' IDENTIFIED BY 'REPLACE_WITH_UNIQUE_SECRET';
GRANT ALL ON slurm_acct_db.* TO 'slurm'@'localhost';
SHOW ENGINES;
Enregistrez les paramètres ci-dessous dans /etc/slurm/slurmdbd.conf et remplacez StoragePass par le véritable mot de passe du compte de base de données. L’utilisateur SQL et l’utilisateur slurm du système d’exploitation sont deux comptes distincts. Ne démarrez pas le service avec une configuration vide ou avec le mot de passe de l’exemple.
AuthType=auth/munge
DbdHost=acct01
DbdPort=6819
SlurmUser=slurm
StorageType=accounting_storage/mysql
StorageHost=localhost
StorageUser=slurm
StoragePass=REPLACE_WITH_UNIQUE_SECRET
StorageLoc=slurm_acct_db
LogFile=/var/log/slurm/slurmdbd.log
PidFile=/var/run/slurmdbd.pid
Conservez les identifiants de la base dans slurmdbd.conf avec les permissions 0600 ou dans un système de gestion des secrets, sans les publier dans un document ni dans Git.
# Sauvegarder d’abord tout fichier existant. Ne pas le remplacer par un fichier vide.
sudo install -d -m 0755 /etc/slurm
sudo touch /etc/slurm/slurmdbd.conf
sudo chown slurm:slurm /etc/slurm/slurmdbd.conf
sudo chmod 0600 /etc/slurm/slurmdbd.conf
sudoedit /etc/slurm/slurmdbd.conf
sudo systemctl enable --now slurmdbd
sudo journalctl -u slurmdbd -b --no-pager
Enregistrez le cluster et créez les associations entre comptes Slurm et utilisateurs selon la procédure de gestion des changements. Un compte Slurm (account) organise l’utilisation des ressources par projet ou par organisation ; il est distinct d’un compte de connexion au système d’exploitation. Une association relie un cluster, un compte Slurm, un utilisateur et éventuellement une partition. Conservez les sorties de sacctmgr et une sauvegarde de la base. Avant toute commande de suppression, identifiez précisément les cibles par des requêtes de consultation tenant lieu de vérification à blanc.
sudo sacctmgr add cluster hpc-prod
sudo sacctmgr add account research Description='Research'
sudo sacctmgr add user hpcuser Account=research
sacctmgr show cluster
sacctmgr show association tree
Déployer Slurm : ordre de démarrage et vérification de l’état
- Vérifiez l’heure, les noms et les UID/GID sur tous les nœuds.
- Démarrez MUNGE et testez les identifiants localement et à distance.
- Si vous utilisez le stockage de l’historique et de l’utilisation des ressources, vérifiez d’abord slurmdbd et sa connexion à la base.
- Démarrez slurmctld sur le contrôleur.
- Démarrez slurmd sur les nœuds de calcul.
- Vérifiez la configuration et l’état des nœuds avec scontrol et sinfo.
# Exécuter uniquement sur le contrôleur ctrl01
sudo systemctl enable --now slurmctld
# Exécuter la commande suivante sur chaque nœud de calcul
sudo systemctl enable --now slurmd
systemctl --no-pager --full status slurmctld
systemctl --no-pager --full status slurmd
scontrol ping
sinfo --long
scontrol show nodes
Valider Slurm avec des tâches interactives et batch
srun --partition=compute --nodes=1 --ntasks=1 hostname
srun --partition=compute --nodes=2 --ntasks-per-node=2 /bin/hostname
#!/usr/bin/env bash
#SBATCH --job-name=smoke-test
#SBATCH --partition=compute
#SBATCH --nodes=2
#SBATCH --ntasks-per-node=2
#SBATCH --time=00:05:00
#SBATCH --output=slurm-%j.out
set -euo pipefail
hostname
srun --label /bin/hostname
JOB_ID=$(sbatch --parsable smoke-test.sbatch)
squeue --job "$JOB_ID"
sacct --jobs "$JOB_ID" --format=JobID,State,Elapsed,AllocCPUS,MaxRSS,ExitCode
scontrol show job "$JOB_ID"
Drainer les nœuds, les rétablir et exploiter le cluster en sécurité
sudo scontrol update NodeName=node03 State=DRAIN Reason='planned maintenance'
scontrol show node node03
squeue --nodelist=node03
sudo scontrol update NodeName=node03 State=RESUME
sinfo --nodes=node03 --long
Ne passez pas systématiquement un nœud DOWN ou DRAIN à RESUME. Vérifiez d’abord Reason, les journaux slurmd, les événements matériels et l’état des systèmes de fichiers. Pour les nœuds exécutant des tâches, décidez selon la politique applicable s’il faut laisser les tâches se terminer, les remettre en file ou les annuler.
sudo journalctl -u slurmd --since '-30 minutes' --no-pager
sudo journalctl -u slurmctld --since '-30 minutes' --no-pager
scontrol show node node03
sdiag
Sauvegardes et récupération après incident
- Gérez les versions de slurm.conf, cgroup.conf, gres.conf et des sources de l’automatisation du déploiement.
- Sauvegardez StateSaveLocation en tenant compte de la cohérence du service et en préservant les permissions.
- Sauvegardez la base slurmdbd avec une méthode garantissant la cohérence transactionnelle, puis testez sa restauration.
- Conservez séparément la clé MUNGE dans un coffre de secrets chiffré et auditez les accès.
- Configurez le contrôleur de secours selon la méthode officielle de haute disponibilité et laissez son démon slurmctld en fonctionnement. Un seul ordonnanceur doit être actif ; Slurm doit coordonner la promotion et le retour au rôle de secours. Ne faites pas écrire deux contrôleurs principaux indépendants dans le même état.
Documentation officielle et guides associés
- SchedMD : permissions de SlurmdSpoolDir et slurm.conf
- SchedMD : base de données de l’historique des tâches et de l’utilisation des ressources
- SchedMD : paramètres requis de slurmdbd.conf
- SchedMD : démarrage rapide pour les administrateurs Slurm
- SchedMD : outil de configuration de slurm.conf
- SchedMD : guide cgroup v2
- Installer Rocky Linux et sécuriser la configuration initiale
- Authentification par clé SSH et sécurité des comptes d’administration
Un déploiement Slurm est validé lorsque tous les tests réussissent : authentification MUNGE, isolation des ressources, tâches sur plusieurs nœuds, enregistrement de l’historique des tâches et de l’utilisation des ressources, drain et resume, sauvegarde et restauration. Le seul état active des démons ne suffit pas. Conservez ces critères sous forme de contrôles automatiques à répéter lors de l’ajout de nœuds et des mises à niveau.