Le gestionnaire de travaux : Slurm

Les calculs sur le cluster s'effectuent par l'intermédiaire du gestionnaire de travaux Slurm.
Ce dernier gère une file d'attente et lance les travaux soumis sur les serveurs dédiés au calcul lorsque les ressources demandées sont disponibles.
Rappel : il est strictement interdit de calculer directement sur la frontale (zeus) !
Au lieu d'exécuter directement son programme, l'utilisateur soumet donc des scripts à Slurm. Ces scripts spécifient les ressources demandées - quel(s) machine(s) pour combien de temps? etc - et les commandes à exécuter sur les machines allouées.
Il est donc très important que les ressources demandées soient adéquates pour le code à executer. Tant que les ressources demandées ne sont pas disponibles, le script ne démarrera pas (demander trop est donc inutile, en plus d'être peu respectueux des autres utilisateurs) - et si les ressources sont insuffisantes, alors le code ne pourra pas s'exécuter correctement.
Ce document fournit les éléments nécessaires pour écrire et soumettre des scripts Slurm adaptés à vos besoins.
Walltime maximum
Attention, le walltime maximum dépend du nombre de cœurs demandés:
- En dessous de 48 cœurs, la limite est de 384 heures (16 jours) et ne dépend pas du nombre de cœurs.
- Au-délà, le walltime maximal decroît proportionellement au nombre de cœurs demandés.
Les ressources allouées à un seul job ne peuvent pas dépasser 48 x 384 cœur-heures. Le tableau ci-dessous vous présente quelques exemples, la variation est linéaire.
| Nombre de cœurs | Walltime max (heures) | Walltime max (jours) |
|---|---|---|
| <=48 | 384 | 16 |
| 64 | 288 | 12 |
| 96 | 192 | 8 |
| 128 | 144 | 6 |
| 192 | 96 | 4 |
| 256 | 72 | 3 |
| 384 | 48 | 2 |
| 512 | 36 | 1.5 |
| 768 | 24 | 1 |
Jobs interactifs
Pour effectuer des tests de courte durée, vous pouvez utiliser les machines interactives suivantes :
| Nom | Type | CPU | Memoire |
|---|---|---|---|
| interactive-1 | CPU | 2x10 cœurs @2.20GHz, Intel Xeon Silver 4114 | 192 Go |
| interactive-2 | CPU | 2x10 cœurs @2.20GHz, Intel Xeon Silver 4114 | 192 Go |
A partir de zeus, ces machines sont accessibles par ssh.
Utilisez la commande
ssh interactive
pour vous connecter à une des machines interactive-[1,2].
Comme la frontale, ces nœuds sont partagé entre les utilisateurs.
Il faut donc éviter d'y lancer des calculs de longue durée et d'en tenir compte dans lors de toute mesure de performance effectuée sur cette machine. Il n'y a malheureusement pas de machine interactive avec GPU.
Pour les tests longs, vous devez soumettre un job via le gestionnaire de travaux.
Soumission de travaux (sbatch)
La soumission d'un job se fait avec la commande
sbatch job.slurm
où job.slurm est un fichier de script dans lequel sont contenues des instructions pour Slurm ainsi que des instructions pour le lancement de votre programme. Cette commande retourne un numéro de job (JOBID).
Par exemple, le script suivant décrit un job qui reserve un nœud (--nodes=1) pour une durée d'au plus 10 minutes et exécute la commande hostname suivi de la commande sleep 60.
#!/bin/bash
#SBATCH --nodes=1
#SBATCH --time=00:10:00
hostname
sleep 60
Les instructions pour Slurm se trouvent dans l'en-tête dans les lignes commençant par #SBATCH.
Ci-dessous vous trouvez les options les plus importantes.
Des exemples de scripts de soumission pour certains codes fréquemment utilisés sont disponibles dans le répertoire /share/doc/submission/.
Si un exemple de script vous semble manquant ou erroné, faites le nous savoir (hpc@univ-lille.fr).
Des exemples plus génériques sont également disponibles ici.
--time, -t
Le temps (maximal) demandé. Au-délà de cette limite le job est terminé par le système.
Exemples de format valides :
#SBATCH --time 24:00:00→ 24 heures, valeur par défaut#SBATCH --time 2-12→ 2 jours et 12 heures#SBATCH --time 30→ 30 minutes#SBATCH --time 30:00→ 30 minutes aussi
L'option courte est -t 24:00:00.
Un job qui demande plus de ressources que le walltime maximal autorisé reste indéfiniment dans la file d'attente.
--nodes, -N
Le nombre de nœuds demandés. Par exemple, pour demander 1 nœud (valeur par défaut)
#SBATCH --nodes=1
Pour demander au moins 2 et au plus 4 nœuds
#SBATCH --nodes=2-4
--ntasks-per-node
Le nombre de cœurs demandés par nœud (ici 1 cœur, valeur par défaut).
L'option est à utiliser en combinaison avec --nodes
#SBATCH --ntasks-per-node=1
--job_name, -J
Le nom du job tel qu'il apparaît dans les différentes commandes de Slurm
#SBATCH --job-name=my_job
--mem
La taille mémoire maximum demandé par nœud (ici 1024 Mo ou 1 Go, valeur par défaut).
#SBATCH --mem=1024M
Slurm accepte d'autres formats que M (défaut), par exemple G. Les deux options suivantes sont équivalentes
SBATCH --mem=2048→ 2048 MoSBATCH --mem=2G→ 2 Go → 2048 Mo
à la différence entre --mem=128G et --mem=128000! Un job qui demande --mem=128G (131072 Mo) ne pourra pas utiliser les nœuds avec 128 Go de mémoire (voir ici), ces derniers étant configurés avec MEMORY=128000 dans Slurm.
Voir ceci pour plus d'informations pour bien choisir cette valeur.
--mail_user
Pour recevoir un email à la fin du job (ou en cas d'erreur)
#SBATCH --mail-type=ALL
#SBATCH --mail-user=you@univ-lille.fr
--gres
gres signifie consumable generic resources. Le plus souvent gres est utilisé pour réserver des GPUs (voir ici pour plus d'informations). Par exemple,
#SBATCH --gres=gpu:2
demande une réservation de 2 GPUs par nœud (sans spécifier le type de GPU)
La commande sbatch --gres=help permet de lister les gres disponibles.
--output,--error
permettent de spécifier le nom des fichiers de sortie.
Par défaut, pour chaque job les sorties stdout et stderr sont redirigés vers un fichier slurm-%j.out (où %j est le SLURM_JOB_ID) localisé dans le dossier de lancement.
Il est possible de créer des fichiers de sortie par tâche ou par nœud, par exemple. La documentation de Slurm explique comment créer des noms de fichiers de sortie à partir des paramètres d'un job.