Contents
Starting NAMD-Jobs on GPUs
NAMD allows the combination of OpenMPI and CUDA to start a job on several GPUs on several nodes.
NAMD
Loead required modules
module add namd/2.12-ibverbs-smp-cuda module add openmpi/latest
NAMD works best with one thread per GPU. Using 2 or more GPUs on a node requires the combination of shared memory (thread based) and OpenMPI parallelisation, so called hybrid parallelisation. A threads can not saturate a GPU and therefore it is best to use all cores of a node.
GPU usage and hybrid parallelisation complicates job submission and prevents a formulation on a single line but requires scripting. Below you find a sample script called namd_skript.
To use 2 nodes with 16 cores and 2 GPUs of type V100 each, the script looks like:
#!/bin/bash # required in first line
#SBATCH -t 60 # time limit set to 60 minutes
#SBATCH -p your_project # select a project or insert # in first column
#SBATCH --mail-type=END # want a mail notification at end of job
#SBATCH -J jobname # name of the job
#SBATCH -o jobname.%j.out # Output: %j expands to jobid
#SBATCH -e jobname.%j.err # Error: %j expands to jobid
#SBATCH -L ompi # request a license for openmpi
#SBATCH --nodes=2 # requesting 2 nodes (identical -N 2)
#SBATCH --ntasks-per-node=1 # 1 MPI task will be started per node
#SBATCH --cpus-per-task=16 # each MPI task starts 16 threads
#SBATCH --gres=gpu:v100:2 # use 2 GPUs of type V100 on each node
if [[ $# -eq 0 ]]; then
echo "Aufruf: namd_skript <Eingabe Datei>"
exit
fi
DEVICES=2
#Überschreibe das von LSF geschriebene Hostfile
chmod u+w $LSB_DJOB_HOSTFILE
echo "" > $LSB_DJOB_HOSTFILE
i=1
for v in $LSB_MCPU_HOSTS; do
if [ $i -eq 1 ]; then
NODE=$v
i=0
else
for j in `seq 1 $(($v/$DEVICES))`; do
echo $NODE >> $LSB_DJOB_HOSTFILE
done
i=1
fi
done
# Bestimme die Zahl der zu startenden SMP-Tasks
let LSB=$LSB_DJOB_NUMPROC/$DEVICES
# Starte den Job mit Eingabedatei als 1. Aufrufparameter
charmrun ++mpiexec ++remote-shell mpiexec $NAMD +p$LSB +devices 0,1 +idlepoll $1
This has not been tested. If something doesn't work - please inform us.

