OpenMPI
Si vous soumettez vos jobs avec sbatch et que votre job charge un module OpenMPI, vous pouvez lancer vos commandes mpirun sans option décrivant les ressources à utiliser (telles que -np, -H, -npersocket, etc.). OpenMPI a en effet été configuré pour récupérer ces informations directement auprès de Slurm.
Afin d’optimiser les performances de vos jobs, il est donc conseillé de bien paramétrer les options pour la réservation de ressources avec Slurm. Si vous ne donnez pas une définition assez précise des ressources réservées, vos tâches risquent d’être dispatchées sur différents nœuds (en passant par la file cpucourt et si le cluster est très utilisé) et donc vous allez perdre en performances. Il est donc recommandé d’utiliser des options qui précisent la réservation, comme :
--nodes=1
--ntasks=4
--ntasks-per-node=4
--ntasks-per-socket=4
Ici, on réserve 4 cœurs sur le même nœud et le même processeur. Pour information, les nœuds de calcul (files cpucourt et cpulong) sont équipés de 2 processeurs (socket), chacun ayant 20 cœurs.
Voici un exemple de déclaration de job avec Slurm où le code va tourner sur 2 noeuds (10 coeurs seront utilisés sur chacun des 2 processeurs d’un noeud) :
#!/bin/bash #SBATCH --job-name=check_mpi #SBATCH --output=check_mpi.txt #SBATCH --time=10:00 #SBATCH --account=project_name #SBATCH --ntasks=40 #SBATCH --ntasks-per-node=20 #SBATCH --nodes=2 #SBATCH --ntasks-per-socket=10 module purge module load openmpi/4.1.2 mpirun program.mpi
MVAPICH
Il est recommandé d’utiliser le module mvapich2/2.3.3-mlnx (après avoir chargé le module gnu7). Exemple de job :
#!/bin/bash
#SBATCH --job-name=myJob
#SBATCH --nodes=5
#SBATCH --ntasks=100
#SBATCH --ntasks-per-node=20
#SBATCH --account=my_account
#SBATCH --time=01:00:00
module purge
module load gnu7/7.3.0
module load mvapich2/2.3.3-mlnx
SLURM_HOSTLIST=$(scontrol show hostnames|paste -d, -s)
export MV2_ENABLE_AFFINITY=0
export MV2_CPU_BINDING_LEVEL=numanode
export MV2_SHOW_CPU_BINDING=1
export MV2_USE_SHARED_MEM=on
mpiexec.hydra -genvall -hosts ${SLURM_HOSTLIST} -n ${SLURM_NTASKS} -ppn ${SLURM_NTASKS_PER_NODE} /home/user/myExecutable
Intel MPI
Exemple de job :
#!/bin/bash #SBATCH --job-name=test_mpi #SBATCH --output=mpi.txt #SBATCH --ntasks=4 #SBATCH --time=10:00 #SBATCH --account=projectname #SBATCH --constraint=intel module purge module load intel mpirun -bootstrap slurm -n $SLURM_NTASKS /home/username/jobs/my_code.mpi
Cliquez ici pour consulter la documentation officielle Intel MPI.