Gromacs sur Jean Zay

Présentation

Gromacs est un logiciel de simulation atomistique qui réalise principalement des dynamiques moléculaires de systèmes d'intérêt biologique.

Liens utiles

Versions disponibles

Version Variantes
2022.3 tmpi-cuda-plumed, mpi-cuda-plumed, mpi-double-cp2k
2022.2 mpi-cuda
2021.5 mpi-cuda
2021.4 mpi-cuda
2021.2 tmpi-cuda
2020.4 tmpi-cuda, mpi-cuda-plumed
2020.3 tmpi
2020.2 mpi-cuda-plumed
2020.1 tmpi-cuda
2019.6 mpi-cuda
2019.4 mpi-cuda-plumed
2019.2 serial, mpi-cuda
2018.7 serial, mpi-cuda

Actuellement les meilleures performances sur GPU sont obtenues avec les versions thread-MPI à partir de 2020.

Message d'erreur OpenMPI

Les versions récentes de Gromacs ont été compilées avec OpenMPI CUDA-aware pour améliorer les performances sur GPU.

Si vous n'utilisez pas les GPU, un message d'avertissement apparait.

--------------------------------------------------------------------------
The library attempted to open the following supporting CUDA libraries,
but each of them failed.  CUDA-aware support is disabled.
libcuda.so.1: cannot open shared object file: No such file or directory
libcuda.dylib: cannot open shared object file: No such file or directory
/usr/lib64/libcuda.so.1: cannot open shared object file: No such file or directory
/usr/lib64/libcuda.dylib: cannot open shared object file: No such file or directory
If you are not interested in CUDA-aware support, then run with
--mca opal_warn_on_missing_libcuda 0 to suppress this message.  If you are interested
in CUDA-aware support, then try setting LD_LIBRARY_PATH to the location
of libcuda.so.1 to get passed this issue.
--------------------------------------------------------------------------

Ce message est sans conséquence pour le job. Si vous souhaitez le faire disparaitre vous pouvez ajouter les lignes suivantes dans votre script de soumission :

  export PSM2_CUDA=0
  export OMPI_MCA_opal_warn_on_missing_libcuda=0

Outils

Les outils de pré et post-traitement de Gromacs (ex : grompp) peuvent-être utilisés sur les frontales, à condition de choisir leur version séquentielle. Il faut, pour cela, charger une version de Gromacs sans MPI ni CUDA.

Options importantes de mdrun

Si vous constatez un fort déséquilibre de charge, il faudra faire varier les paramètres de mdrun. Par exemple les options suivantes vont avoir un rôle important :

  • -npme : nombre de tâches MPI dédiées au calcul de PME
  • -pme : où calculer PME (cpu, gpu)
  • -pmefft : où calculer la partie FFT de PME
  • -nb : où calculer les interactions non liées

N'hésitez pas à consulter la documentation de Gromacs (liens ci-dessus) pour les autres options.

Exemple d'utilisation sur la partition CPU

Script de soumission

gromacs_cpu.slurm
#!/bin/bash
#SBATCH --nodes=1               # 1 node is used
#SBATCH --ntasks-per-node=4     # 4 MPI tasks
#SBATCH --cpus-per-task=10      # Number of OpenMP threads per MPI task
#SBATCH --hint=nomultithread    # Disable hyperthreading
#SBATCH --job-name=gromacs      # Jobname
#SBATCH --output=GMX_GenMD.o%j  # Standard output file (%j is the job number)
#SBATCH --error=GMX_GenMD.o%j   # Standard error file
#SBATCH --time=10:00:00         # Expected runtime HH:MM:SS (max 100h)
##
## Please, refer to comments below for
## more information about these 4 last options.
##SBATCH --account=<account>@cpu  # To specify cpu accounting: <account> = echo $IDRPROJ
##SBATCH --partition=<partition>  # To specify partition (see IDRIS web site for more info)
##SBATCH --qos=qos_cpu-dev        # Uncomment for job requiring less than 2 hours
##SBATCH --qos=qos_cpu-t4         # Uncomment for job requiring more than 20h (up to 4 nodes)
 
# Cleans out the modules loaded in interactive and inherited by default
module purge
 
# Load needed modules
module load gromacs/2018.7-mpi-cuda
 
# Run : 4 MPI tasks (--ntasks-per-node=4) and 10 threads/task (--cpus-per-task=10)
# Be aware that Gromacs recommands 2 <= ntomp <= 6.
# Do your own tests
srun gmx_mpi mdrun -v -deffnm md_test -ntomp $SLURM_CPUS_PER_TASK

Exemple d'utilisation sur la partition GPU

La détection des GPU étant faite automatiquement par Gromacs, il n'y a pas de modification à faire dans la ligne de commande.

Par contre, vous devez réserver les GPUs dans votre fichier de soumission via la directive SLURM #SBATCH --gres=gpu:4.

Script de soumission

gromacs_gpu.slurm
#!/bin/bash
#SBATCH --nodes=1               # 1 node is used
#SBATCH --ntasks-per-node=4     # 4 MPI tasks
#SBATCH --cpus-per-task=10      # Number of OpenMP threads per MPI task
#SBATCH --gres=gpu:4            # Number of GPUs per node
#SBATCH --hint=nomultithread    # Disable hyperthreading
#SBATCH --job-name=gromacs      # Jobname
#SBATCH --output=GMX_GenMD.o%j  # Standard output file (%j is the job number)
#SBATCH --error=GMX_GenMD.o%j   # Standard error file
#SBATCH --time=10:00:00         # Expected runtime HH:MM:SS (max 100h for V100, 20h for A100)
##
## Please, refer to comments below for
## more information about these 4 last options.
##SBATCH --account=<account>@v100  # To specify gpu accounting: <account> = echo $IDRPROJ
##SBATCH --partition=<partition>   # To specify partition (see IDRIS web site for more info)
##SBATCH --qos=qos_gpu-dev         # Uncomment for job requiring less than 2 hours
##SBATCH --qos=qos_gpu-t4          # Uncomment for job requiring more than 20h (up to 16 GPU, V100 only)
 
# Cleans out the modules loaded in interactive and inherited by default
module purge
 
# Load needed modules
module load gromacs/2022.3-mpi-cuda-plumed
 
# Run : 4 MPI tasks (--ntasks-per-node=4) and 10 threads/task (--cpus-per-task=10)
# Be aware that Gromacs recommands 2 <= ntomp <= 6.
# Do your own tests
# and 4 GPUs (--gres=gpu:4) automatically detected.
srun gmx_mpi mdrun -v -deffnm md_test -ntomp $SLURM_CPUS_PER_TASK

Script de soumission sur la partition GPU avec la version thread-MPI (Derniers développements)

gromacs_gpu.slurm
#SBATCH --nodes=1               # 1 node is used
#SBATCH --ntasks-per-node=1     # 1 MPI tasks
#SBATCH --cpus-per-task=40      # Number of OpenMP threads per MPI task
#SBATCH --gres=gpu:4            # Number of GPUs per node
#SBATCH --hint=nomultithread    # Disable hyperthreading
#SBATCH --job-name=gromacs_tmpi # Jobname
#SBATCH --output=GMX_GenMD.o%j  # Standard output file (%j is the job number)
#SBATCH --error=GMX_GenMD.o%j   # Standard error file
#SBATCH --time=10:00:00         # Expected runtime HH:MM:SS (max 100h for V100, 20h for A100)
##
## Please, refer to comments below for
## more information about these 4 last options.
##SBATCH --account=<account>@v100  # To specify gpu accounting: <account> = echo $IDRPROJ
##SBATCH --partition=<partition>   # To specify partition (see IDRIS web site for more info)
##SBATCH --qos=qos_gpu-dev         # Uncomment for job requiring less than 2 hours
##SBATCH --qos=qos_gpu-t4          # Uncomment for job requiring more than 20h (up to 16 GPU, V100 only)
 
# Cleans out the modules loaded in interactive and inherited by default
module purge
 
# Load needed modules
module load gromacs/2022.3-cuda-plumed
 
# Activate latest GPU developments
export GMX_GPU_PME_PP_COMMS=true
export GMX_FORCE_UPDATE_DEFAULT_GPU=1
export GMX_GPU_DD_COMMS=true
 
# Run : 4 thread-MPI tasks and 10 threads/task 4 GPUs (--gres=gpu:4) automatically detected.
# Please read the documentation about thread-MPI and latest GPU development
# http://manual.gromacs.org/documentation/current/user-guide/mdrun-performance.html
gmx mdrun -ntmpi 4 -npme 1 -ntomp 10 \
          -update gpu -bonded gpu \
          -nb gpu -pme gpu -pmefft gpu \
          -deffnm 6vxx_nvt -v

Remarques

  • 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.