Exécution de travaux multi-étapes
Utilisation de la notion d'étape avec Slurm
Certains utilisateurs ont développé des chaînes de traitement complexes (flux de données), qui consistent à enchaîner des travaux dont les caractéristiques peuvent être différentes (nombre de cœurs, temps de calcul et mémoire nécessaires). Les fichiers de sortie d'un travail sont souvent utilisés comme fichiers d'entrée du travail suivant, ce qui ajoute des relations d'interdépendance entre les travaux. Slurm permet de gérer cette problématique d'une façon simple et efficace : chaque étape est définie dans un fichier à exécuter auquel sont associées des ressources propres (nombre de cœurs, mémoire, temps). Un travail multi-étapes consistera à définir autant d'étapes que de travaux à exécuter, ainsi que les relations d'interdépendance entre ces étapes : de cette façon, à chaque étape, les ressources réservées correspondent exactement aux ressources utilisées.
Enchaînement des travaux
Pour soumettre un job multi-étape sur Jean Zay, il faut :
-
Créer un script bash qui soumet plusieurs travaux Slurm (un travail par étape) : à la soumission de chacune des étapes du calcul, on récupère le
JOB_IDcorrespondant pour le transmettre lors de la soumission de l'étape suivante : leJOB_IDdu travail est le quatrième champ dans le retour de la commandesbatch(d'où commandecut).Dans l'exemple suivant, quatre étapes sont soumises, chaque étape (sauf la première) dépend de l'étape précédente et ne s'exécutera que si celle-ci s'est bien terminée (
--dependency=afterok).multi_steps.bash#!/bin/bash
JID_JOB1=`sbatch job1.slurm | cut -d " " -f 4`
JID_JOB2=`sbatch --dependency=afterok:$JID_JOB1 job2.slurm | cut -d " " -f 4`
JID_JOB3=`sbatch --dependency=afterok:$JID_JOB2 job3.slurm | cut -d " " -f 4`
sbatch --dependency=afterok:$JID_JOB3 job4.slurmAttentionCe script n'est pas un travail Slurm !
C'est un script bash à lancer de la façon suivante :
# Ajout du droit Unix d'execution
chmod +x multi_steps.bash
# Execution du script
./multi_steps.bash -
Écrire toutes les étapes (
jobN.slurmavec N = 1, 2, 3) comme étant des travaux indépendants : chaque étape soumise via la commandesbatchest un travail Slurm classique, comme ceux décrits dans la documentation disponible dans les rubriques