Projet

Général

Profil

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>