Jean Zay : exécution d'un code parallèle MPI en batch
Les travaux sont gérés sur l'ensemble des nœuds par le logiciel Slurm .
Pour soumettre un travail MPI en batch sur Jean Zay, il faut :
- Créer un script de soumission : voici un exemple, enregistré dans le fichier
intel_mpi.slurm
:- intel_mpi.slurm
#!/bin/bash #SBATCH --job-name=TravailMPI # nom du job #SBATCH --ntasks=80 # Nombre total de processus MPI #SBATCH --ntasks-per-node=40 # Nombre de processus MPI par noeud # /!\ Attention, la ligne suivante est trompeuse mais dans le vocabulaire # de Slurm "multithread" fait bien référence à l'hyperthreading. #SBATCH --hint=nomultithread # 1 processus MPI par coeur physique (pas d'hyperthreading) #SBATCH --time=00:10:00 # Temps d’exécution maximum demande (HH:MM:SS) #SBATCH --output=TravailMPI%j.out # Nom du fichier de sortie #SBATCH --error=TravailMPI%j.out # Nom du fichier d'erreur (ici commun avec la sortie) # on se place dans le répertoire de soumission cd ${SLURM_SUBMIT_DIR} # nettoyage des modules charges en interactif et herites par defaut module purge # chargement des modules module load intel-all/19.0.4 # echo des commandes lancées set -x # exécution du code srun ./exec_mpi
- Soumettre ce script via la commande
sbatch
:$ sbatch intel_mpi.slurm
Attention : La configuration actuelle de la machine ne permet pas d'utiliser l'hyperthreading (exécution de 80 processus mpi sur les 40 cœurs d'un nœud de calcul) avec un code purement mpi.
Remarques :
- Nous vous recommandons de compiler et d'exécuter vos codes sous le même environnement Intel : utilisez exactement la même commande
module load intel…
à l'exécution qu'à la compilation. - Dans cet exemple, on suppose que l'exécutable
exec_mpi
se situe dans le répertoire de soumission, c'est-à-dire le répertoire dans lequel on entre la commandesbatch
: la variableSLURM_SUBMIT_DIR
est automatiquement valorisée par Slurm. - Le fichier de sortie du calcul
TravailMPI_numero_job.out
se trouve également dans le répertoire de soumission. Il est créé dès le début de l'exécution du travail; l'éditer ou le modifier pendant le déroulement du travail peut perturber celui-ci. - Le
module purge
est rendu indispensable par le comportement par défaut de Slurm : les modules que vous avez chargés dans votre environnement au moment où vous lancezsbatch
sont pris en compte dans le job soumis. - Pour éviter les erreurs de distribution automatique de tâches, nous vous recommandons d'utiliser
srun
pour exécuter votre code au lieu dempirun
, ce qui permet de garantir une distribution conforme aux spécifications de ressources demandées dans votre fichier de soumission Slurm. - Les jobs ont tous des ressources définies dans Slurm par une partition et une “Qualité de Service” QoS (Quality of Service) par défaut. Vous pouvez en modifier les limites en spécifiant une autre partition et/ou une QoS comme indiqué dans notre documentation détaillant les partitions et les Qos.
- Pour les comptes multi-projets ainsi que ceux ayant des heures CPU et GPU, il est indispensable de spécifier l'attribution d'heures sur laquelle décompter les heures de calcul du job comme indiqué dans notre documentation détaillant la gestion des heures de calcul.
- Nous vous recommandons fortement de consulter notre documentation détaillant la gestion des heures de calcul sur Jean Zay pour vous assurer que les heures consommées par vos travaux soient décomptées de la bonne attribution.