Exemple d'utilisation de slurm pour un job séquentiel (en lançant matlab)¶
Dans cet exemple, nous lançons un programme matlab, mais ce logiciel est pris à titre d'illustration.
Fichier Matlab¶
On prépare d'abord un fichier de commande Matlab (fichier helloWorld.m
) :
fprintf('Hello world.\n')
exit
Fichier BATCH¶
On prépare un fichier "batch" (fichier helloWorld.sbatch
)
#!/bin/bash
# Exemple de fichier batch pour soumettre un Job séquentiel sans GPU.
#
# Pour soumettre le job, lancer la commande (remplacer <CE_FICHIER> par le nom de ce fichier) :
# sbatch <CE_FICHIER>
#
# On spécifie d'abord la réservation pour Slurm.
# Ces paramètres peuvent aussi être donnés en ligne de commande
# quand on soumet le job (options à ajouter à la commande "sbatch").
#
# Les messages (sorties standard et d'erreur) seront écrits dans les
# fichiers "slurm-<JOBID>.out" et "slurm-<JOBID>.err"
#
# -- Partition demandée :
#SBATCH --partition=cpu
# -- Réservation CPU et mémoire :
# -- Séquentiel, avec 1 processus et 1 coeur, mémoire 4Go
# -- Attention, si la consommation mémoire excède la valeur, le job est tué
#SBATCH --tasks=1
#SBATCH --cpus-per-task=1
#SBATCH --mem=4G
# -- Temps d'exécution estimé 20 minutes
# -- Attention, le job sera tué à l'issue de ce délai, même s'il n'est pas terminé
#SBATCH --time=00:20:00
# -- Ce fichier est un shell script habituel, on peut donc
# -- utiliser des commandes usuelles :
echo "Host : $(hostname)"
echo "Début du job : $(date)"
# -- Si vous utilisez des "modules", chargez-les
# -- Ici, on prend un exemple de lancement de matlab en mode non-interactif, donc on charge le module matlab :
module load matlab/R2023b
# On vérifie que la commande matlab est bien accessible en affichant son chemin, si elle est trouvée
echo "Commande matlab : $(which matlab)"
# -- On lance matlab en mode non-interactif - Il faut bien entendu avoir préparé
# -- un fichier de commande Matlab au préalable (fichier "<MON_SCRIPT_M>.m")
matlab -nodisplay -nosplash -nodesktop -r helloWorld
Soumission¶
On peut maintenant demander à slurm de prendre en charge le travail - On lance la commande dans un terminal :
sbatch helloWorld.sbatch
La commande affiche un numéro, le jobid de slurm.
Ce qui s'affiche habituellement à l'écran (sorties standard et erreur, stdout et stderr) sera placé dans des fichiers nommés slurm-<JOBID>.out
et slurm-<JOBID>.err
Inter-agir avec slurm¶
On peut ensuite utiliser plusieurs commandes :
# Voir tous les jobs :
squeue
# Arrêter un job
scancel <JOBID>