Exécution d'un travail hybride MPI/OpenMP en batch
Les travaux sont gérés sur l'ensemble des nœuds par le logiciel Slurm.
Pour soumettre un travail hybride MPI + OpenMP en batch sur Jean Zay, il faut :
- Créer un script de soumission :
intel_mpi_omp.slurm
#!/bin/bash
#SBATCH --job-name=Hybride # nom du job
#SBATCH --nodes=2 # Nombre de noeuds
#SBATCH --ntasks-per-node=4 # Nombre de processus MPI par noeud
#SBATCH --cpus-per-task=10 # nombre de threads OpenMP par tache MPI
# /!\ Attention, la ligne suivante est trompeuse mais dans le vocabulaire
# de Slurm "multithread" fait bien référence à l'hyperthreading.
#SBATCH --hint=nomultithread # 1 thread par coeur physique (pas d'hyperthreading)
#SBATCH --time=00:10:00 # Temps d’exécution maximum demandé (HH:MM:SS)
#SBATCH --output=Hybride%j.out # Nom du fichier de sortie (%j est remplacé par le numéro du travail)
#SBATCH --error=Hybride%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 ...
# echo des commandes lancées
set -x
# nombre de threads OpenMP
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK
# binding OpenMP
export OMP_PLACES=cores
# exécution du code
srun ./executable_mpi_omp
- Soumettre ce script via la commande
sbatch:
sbatch intel_mpi_omp.slurm
Remarques :
- Nous vous recommandons de compiler et d'exécuter votre code dans un même environnement logiciel en chargeant les mêmes modules.
- L'option
--hint=nomultithreadassure la réservation des cœurs physiques (pas d'hyperthreading). - La mémoire allouée pour le job est proportionnelle au nombre de cœurs CPU demandés. Par exemple, si vous demandez 1/4 des cœurs CPU physiques d'un nœud, vous aurez accès à 1/4 de sa mémoire RAM. Il est important d'être cohérent avec la configuration des nœuds utilisés pour éviter une surfacturation d'heures, tout en profitant de la mémoire à laquelle vous avez le droit. Vous pouvez consulter notre documentation à ce sujet : Allocation mémoire avec Slurm.
- Dans ces exemples, on suppose que l'exécutable
executable_mpi_ompse situe dans le répertoire de soumission, c'est-à-dire le répertoire dans lequel on se situe au moment d'utiliser la commandesbatch: la variable$SLURM_SUBMIT_DIRest automatiquement valorisée par Slurm. - Le fichier de sortie du calcul se trouvera é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 purgeest rendu indispensable par le comportement par défaut de Slurm : les modules que vous avez chargés dans votre environnement au moment où vous lancezsbatchsont pris en compte dans le job soumis. - L'usage de la commande
srunest indispensable lorsque vous demandez une exécution multi-tâches. Nous déconseillons l'usage dempirunsur Jean Zay, seulesrungarantit une distribution conforme aux spécifications de ressources demandées dans votre fichier de soumission. - Les travaux ont tous des ressources définies par une partition et une "Qualité de Service" QoS (Quality of Service) positionnées par défaut dans Slurm. Vous pouvez en modifier les limites en spécifiant une partition et/ou une QoS comme indiqué dans notre documentation détaillant les partitions et les Qos CPU.
- 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 travail comme indiqué dans notre documentation détaillant la gestion des heures de calcul pour vous assurer que les heures consommées par vos travaux soient décomptées de la bonne attribution.