Cas d'utilisation Slurm

  1. 1er cas d'utilisation
  2. 2ème cas d'utilisation

1er cas d'utilisation :

Le Traitement est "arbitrairement" découpé en sections logiques (Steps) exécutées successivement pour les raisons suivantes :

- suivre l'avancement Step-by-Step du Job pendant son exécution,

et/ou

- analyser l'utilisation des ressources de chaque Step (CPU, RAM, Disque...) post-exécution. Une seule Task est exécutée à la fois.

#SBATCH --job-name=SlurmJob-%j 
#SBATCH --output=SlurmJob-%j.out 

#SBATCH --ntasks=1 
#SBATCH --cpus-per-task=4 

echo "Job START - $(date)" >"SlurmJob-$SLURM_JOB_ID.log"

Dans le cas d'une seule task, il n'est pas nécessaire de préciser -n/-N, la valeur par défaut étant le nombre total de Tasks, à savoir 1 !

srun job-step-1.sh 'param1' 'param2' 
srun job-step-2.sh 'param' 
srun job-step-3.sh 

echo "Job END - $(date)" >>"SlurmJob-$SLURM_JOB_ID.log" 

2ème cas d'utilisation :

Effectuer un traitement identique ou similaire sur un grand nombre de fichiers en parallèle.

Le nombre total de Tasks (--ntasks) est le nombre de fichiers à traiter.

Ces fichiers sont ici stockés dans un répertoire donné.

SBATCH --job-name=SlurmJob-%j 
#SBATCH --output=SlurmJob-%j.out 

#SBATCH --ntasks=10 
#SBATCH --cpus-per-task=4 

# Paramètres: 
# Dossier des fichiers source à traiter 
path='~/path/to/files'
 
# Script exécuté pour chaque Task 
script='slurm-task.sh' 


# Prologue 
echo "Job START - $(date)" >"SlurmJob-$SLURM_JOB_ID.log" 

# Traitement: 

while read f; do 
    # Pour chaque fichier, exécution d'un Step dans un 
    # processus  enfant avec une allocation d'une Task
    # et donc un seul noeud). Le nombre de CPUs par Task est 
    # ici passé en paramètre du script, ce qui permet un nombre
    # de threads non statique de ce traitement.

    srun -n1 -N1 "$script" "$f" $SLURM_CPUS_PER_TASK 'param1' 'param2' & 

    # => Slurm allouera ici 4 CPUs pour l'exécution de: 
    #     slurm-task.sh  4 'param1' 'param2' 

done < <(ls "$path") 

# Attendre la fin de l'exécution des processus enfants ! 
wait 

# Epilogue 
echo "Job END - $(date)" >>"SlurmJob-$SLURM_JOB_ID.log"