Exemple d'utilisation de slurm pour un job avec une GPU¶
Dans cet exemple, nous préparons un job qui demande une GPU.
Fichier BATCH¶
On prépare un fichier "batch" (fichier helloGPU.sbatch
)
#!/bin/bash
# Exemple de fichier batch pour soumettre un Job avec une 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 :
# -- Pour les GPU, le choix de la partition permet de sélectionner le type de GPU voulue
# -- Voir la liste des partitions sur le Wiki https://redmine.mcia.fr/projects/cluster-cali3/wiki/Slurm#Partitionnement-du-cluster-limites-GPU
#SBATCH --partition=gpu-l40
# -- Et il faut ensuite dire combien de GPU on souhaite
#SBATCH --gres gpu:1
# -- 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 avail nvidia/cuda/12.4
# -- On lance la commande "nvidia-smi", qui indique combien de GPU sont disponibles
# -- Au sein d'un job Slurm, on ne "voit" que les GPU allouées par slurm. Donc ici on devrait en voir une seule
nvidia-smi
Soumission¶
On peut maintenant demander à slurm de prendre en charge le travail - On lance la commande dans un terminal :
sbatch helloGPU.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>