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"
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"