Slurm Installation¶
Étendre le cluster avec un nouveau nœud¶
Cette section décrit la procédure pour ajouter un nœud de calcul au cluster.
Les commandes suivantes seront précédées de :
(front):
dans le cas où la commande doit être exécutée sur la frontale(node):
dans le cas où la commande doit être exécutée sur la machine à ajouter
1. Configurer NFS sur le nouveau nœud¶
Installer le client NFS.
Ajouter une ligne dans le fichier /etc/fstab
:
Puis monter le nouveau disque:
Warning
Avant de faire $sudo mount /nfs
, le fichier /etc/fstab
aura peut être
besoin d'être re-chargé avec la commande suivante :
$ sudo systemctl daemon-reload
.
Info
L'erreur mount.nfs: Protocol not supported
peut se produire lorsque les
modules noyaux nfs
, nfsd
et nfsv4
ne sont pas chargés.
Le chargement au démarrage se fait en les ajoutant au fichier
/etc/modules
.
2. Mettre à jour la configuration du cluster¶
Mettons à jour la configuration de Slurm sur la frontale :
Aller à la fin du fichier et rajouter la ligne suivante pour ajouter le nœud ainsi que la partition correspondante:
NodeName=XXX NodeAddr=XXX.mono.proj.lip6.fr CPUs=YY State=UNKNOWN
PartitionName=XXX Nodes=XXX Default=NO MaxTime=INFINITE State=UP
Remplacer XXX par le nom du nœud à ajouter et YY par son nombre de coeurs.
Info
Une partition pour slurm est un ensemble de nœuds de calculs capables de se répartir l'exécution d'une tâche. Dans notre cas nous assignons une partition à un unique nœud : une partition = une machine.
Info
Pour notre utilisation, nous souhaitons que chaque nœud de calcul dispose d'une partition. Mais il est possible (et d'ailleurs courant) de créer une partition avec plusieurs nœuds.
Redémarrer Slurm control deamon :
3. Installer Munge sur le nouveau nœud¶
Munge gère l'authentifications des utilisateurs Slurm sur le nœud de calcul.
Configurons les permissions relatives à Munge :
(node): export MUNGEUSER=1101
(node): sudo groupadd -g $MUNGEUSER munge
(node): sudo useradd -m -c "MUNGE Uid 'N' Gid Emporium" -d /var/lib/munge -u $MUNGEUSER -g munge -s /sbin/nologin munge
Installer Munge.
Puis copier la clé d'authentification Munge :
(front): sudo cp /nfs/slurm/munge.key /nfs/slurm/munge_tmp.key
(front): sudo chmod +r /nfs/slurm/munge_tmp.key
(node): sudo cp /nfs/slurm/munge_tmp.key /etc/munge/munge.key
(front): sudo rm /nfs/slurm/munge_tmp.key
(node): sudo chown munge:munge /etc/munge/munge.key
(node): sudo chmod 400 /etc/munge/munge.key
Et enfin démarrer le service :
4. Installer Slurm sur le nouveau nœud (depuis les sources)¶
Sur le cluster, Slurm 19.05 est installée. Il est possible que certaines
distributions Linux ne proposent pas exactement cette même version et donc le
client Slurm (slurmd
) ne pourra pas fonctionner correctement avec la frontale
(slurmctld
). Dans ce cas il est nécessaire de compiler Slurm depuis les
sources.
Configuration des permissions relatives à Slurm :
(node): export SLURMUSER=1102
(node): sudo groupadd -g $SLURMUSER slurm
(node): sudo useradd -m -c "SLURM workload manager" -d /var/lib/slurm -u $SLURMUSER -g slurm -s /bin/bash slurm
Récupérer la bonne version de Slurm depuis le dépôt GitHub, compiler et installer :
(node): mkdir $HOME/softwares
(node): cd $HOME/softwares/
(node): git clone --branch slurm-19.05 https://github.com/SchedMD/slurm.git
(node): cd slurm
(node): ./configure --prefix /opt/slurm-19.05
(node): make -j4
(node): sudo make install
(node): sudo ln -s /opt/slurm-19.05/ /opt/slurm
(node): sudo ldconfig -n /opt/slurm/lib/
(node): sudo mkdir /opt/slurm-19.05/etc/
(node): sudo ln -s /nfs/slurm/slurm.conf /opt/slurm-19.05/etc/slurm.conf
(node): echo "CgroupMountpoint=/sys/fs/cgroup" | sudo tee --append /opt/slurm-19.05/etc/cgroup.conf
Danger
Avant de compiler Slurm il est très important d'avoir installé Munge et en
particulier libmunge-dev
/munge-devel
. En effet, le ./configure
de
Slurm ne compilera pas l'extension "Slurm-Munge" si
libmunge-dev
/munge-devel
n'est pas installé sur la machine.
Warning
Sur Fedora (M1 Ultra) et sur Ubuntu 23.10 la dernière commande
($ echo "CgroupMountpoint=/sys/fs/cgroup" | sudo tee --append /opt/slurm-19.05/etc/cgroup.conf
)
n'est pas suffisante. Il faut ouvrir le fichier
/opt/slurm-19.05/etc/cgroup.conf
en RW et remplacer son contenu par :
Warning
On Ubuntu 23.10 and 24.04 you may encounter the following error:
make[3]: Entering directory '/home/cassagnea/softwares/slurm/doc/html'
`dirname accounting.shtml`/shtml2html.py 19.05 accounting.shtml
/usr/bin/env: ‘python’: No such file or directory
doc/html/shtml2html.py
file and
replace the first line as follow:
Copier le script de démarrage systemd
:
On active et on lance le service slurmd
:
(node): sudo systemctl daemon-reload
(node): sudo systemctl enable slurmd
(node): sudo systemctl start slurmd
(node): sudo systemctl status slurmd
Tips
Si la dernière commande montre que slurmd
n'a pas réussi à se lancer, cela
vaut le coup d'aller regarder le fichier de log... :
Il faut redémarrer munge
après slumrd
...
Enfin, si vous le souhaitez, cela peut être une bonne idée d'ajouter Slurm au PATH :
Warning
On Linux Fedora Asahi rel. 39 OS (M1 Ultra) there is a firewall blocking the Slurm traffic on the network. To disable the firewall you can do:
5. Propagate the NFS Users on the New Node¶
For this you can simply call the upusers-nfs
script:
6. Tester le cluster¶
Pour contrôler l'état du démon slurm sur le nouveau nœud :
Pour tester si le nouveau nœud peut communiquer avec le nœud de contrôle :
Pour tester si la frontale reconnaît le nouveau nœud :
Des exemples de tâches simples à tester :
# affiche le nom de la machine où est éxécutée la tache
(front): srun -p [partName] hostname
# lance un shell interactif
(front): srun -p [partName] --pty bash -i
# permet de voir les tâches en cours sur le cluster
(front): squeue
Debug¶
Commandes utiles pour debug :
Tester le fonctionnement de Munge:
En cas de redémarrage d'un nœud il peut être utile de mettre à jour son état vis-à-vis de Slurm :
Warning
En cas de comportement étrange après un reboot de la frontale, éxécuter
systemctl status slurmctld
pour vérifier si le service slurmctld
s'est
lancé.
Dans le cas où le service slurmctld
est lancé mais ne détecte pas que ses
nœuds sont actifs, il est nécessaire de mettre à jour leurs états:
Dans le cas où le service ne s'est pas lancé, il peut être nécéssaire de recréer
un dossier slurm dans /run
:
Bon à savoir¶
Quand on redémarre la frontale, on redémarre le serveur NFS et cela a pour
conséquence de planter les NFS client sur tous les nœuds... Il faut ensuite
remonter /nfs
sur les nœuds pour que le NFS fonctionne de nouveau :
Si on veut arrêter slurmd
, munge
et nfs
sur un nœud (par exemple pour
éviter que cela n'impacte les mesures) :
Et pour les relancer :
sudo mount /nfs
sudo systemctl start munge.service
sudo systemctl enable slurmd.service
sudo systemctl start slurmd.service
sudo scontrol ping
Warning
L'ordre d’exécution des commandes précédentes est important. L'horloge du node doit être synchronisée avec celle du front pour permettre l'authentification.