Cet article est une introduction à slurm, l'ordonnanceur de travaux (jobs) sur CALI. Vous trouverez les recettes pratiques pour commencer à travailler sur CALI :
Sur un cluster de calcul, vous ne travaillez pas comme sur votre PC personnel. Vous ne pouvez pas lancer un programme inter-actif qui utiliserait immédiatement les ressources du cluster.
Pour exécuter un programme, vous devez le soumettre à l’ordonnanceur (scheduler). Le logiciel utilisé comme ordonnanceur sur notre cluster est slurm. Il exécutera votre programme (job) en différé, quand les ressources (CPU, mémoire) nécessaires à votre travail seront disponibles “quelque part” dans le cluster, sur un des nœuds dédiés aux calculs.
Nous créons un fichier texte mon_programme.batch
(n'importe quel nom est admissible) :
#!/bin/bash #SBATCH --partition=rapide #SBATCH --ntasks=1 #SBATCH --mem-per-cpu=100 #SBATCH --time=00:30:00 ./mon_programme
Ensuite, on indique à slurm que l'on veut lancer ce job :
sbatch mon_programme.batch
Et voilà, votre code mon_programme
sera exécuté dès que le cluster aura des ressources disponibles ! Nous allons maintenant détailler le contenu du fichier batch et comment slurm travaille..
Le fichier texte mon_programme.sbatch
est de type shell script.
Mais il possèdes des commentaires spéciaux, commençant par #SBATCH
, placés en première partie du fichier. Ces directives destinées à slurm indiquent :
Dans notre exemple :
--partition=rapide
sélectionne la partition nommée rapide
--ntasks=1
donne le nombre de processus qui sera exécuté dans le batch – En général, on met “1” pour un programme séquentiel ou multi-threadé, une valeur > 1 seulement pour les programmes MPI--mem-per-cpu=100
donne la quantité de mémoire en Mo pour chaque CPU. Le job sera tué si la quantité consommée excède la valeur demandée --time=00:30:00
donne la durée maximale du job, au format JOUR-HH:MM:SS . Le job sera tué si la quantité consommée excède la valeur demandée Dans sa seconde partie, le fichier contient la ou les commandes à exécuter.
La commande sbatch
permet de soumettre le fichier batch, autrement dit de créer un job slurm qui sera exécuté dès que les ressources demandées seront disponibles. sbatch
a affiché le Job ID, un numéro unique associé au job soumis.
Toutes les directives (#SBATCH …
) sont en pratique des options de la commande sbatch
. Il est simplement plus facile de les inscrire dans le fichier batch que de les taper sur la ligne de commande.
Une fois votre job soumis, vous pouvez examiner la queue, c'est-à-dire la liste des travaux en attente ou en cours d'éxécution.
Pour voir tous les jobs dans la file :
squeue -l
Les job ont un état associé – Les 2 principaux sont :
PENDING
: en attenteRUNNING
: en cours d'exécutionVous pouvez stopper un job en cours avec :
scancel <JOB_ID>
Pour plus d'informations, consultez le contenu de la rubrique dédiée à slurm
Slurm exécute le job depuis le dossier où vous étiez quand vous avez soumis le job.
Par défaut, les sorties standards et d'erreur (qui s'affichent sur le terminal) sont redirigées vers le fichier slurm-<JOB_ID>.out
Un élément est primordial quand vous soumettez un job : la partition
Vous pourrez par la suite consulter la liste complète des partitions utilisables, ou la page utilisation des noeuds GPU. Nous présentons ci-après les choix les plus usuels.
Utilisez partition=rapide
Utilisez partition=normal