MPI

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.