Skoči na vsebino

Navodila za programsko opremo NAMD

NAMD je program za paralelno molekularno dinamiko, prilagojen za platforme UNIX. Razvila ga je skupina za teoretično biofiziko v Centru Beckman, na Univerzi v Illinois. Razvoj NAMD-a je prilagojen obstoječim paketom za molekularno dinamiko, predvsem paketoma X-PLOR in CHARMM, tako da za vhodne podatke sprejema oba tipa. NAMD je integiran s programom VMD za vizualizacijo in analizo.

Licenca

NAMD je licenčen program, ki ga lahko brezplačno prenesete ob predhodni registraciji.

Namestitev:

Na Sling gručah je NAMD dosegljiv bodisi kot modul ali prek vsebnika Singularity. Na Sling CVMFS je na voljo modul NAMD/2.14-foss-2020a-mpi. Lahko pa za zagon poslov, ki potrebujejo programsko opremo NAMD, uporabite tudi svoj vsebnik.

Primer izgradnje vsebnika za NAMD:

Za GPU

NVIDIA ponuja optimiziran vsebnik za NAMD GPU, ki ga lahko prevedete z ukazom:

singularity build namd-gpu.sif docker://nvcr.io/hpc/namd:<tag>

Če na sistemu nimate administratorskih pravic, uporabite za izgradnjo vsebnika stikalo --fakeroot. Možnost uporabe tega stikala mora nastaviti administrator sistema.

Primer izgradnje vsebnika za NAMD GPU:

singularity build --fakeroot namd-gpu.sif docker://nvcr.io/hpc/namd:2.13-singlenode

Za CPU

Spodaj je primer definicije vsebnika za namestitev NAMD z uporabo MPI in UCX:

Bootstrap: docker
From: centos:8.3.2011

%runscript
namd2 "$@"
charmrun "$@"

Maintainer barbara.krasovec@ijs.si

%runscript
namd2 "$@"
charmrun "$@"


%environment
export PATH=/opt/NAMD_2.14_Source/Linux-x86_64-g++:/opt/NAMD_2.14_Source/charm-6.10.2/ucx-linux-x86_64-ompipmix/bin:$PATH
export LD_LIBRARY_PATH=/opt/NAMD_2.14_Source/lib:/opt/NAMD_2.14_Source/charm-6.10.2/ucx-linux-x86_64-ompipmix/bin:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/opt/openmpi-4.0.3/build/lib:$LD_LIBRARY_PATH
export PATH=/opt/openmpi-4.0.3/build/bin:$LD_LIBRARY_PATH

%files
/ceph/hpc/software/containers/singularity/sw/NAMD_2.14_Source.tar.gz /opt/NAMD_2.14_Source.tar.gz

%post

dnf -y groupinstall "Development Tools"
dnf -y install epel-release
dnf -y install dnf-plugins-core
dnf config-manager --set-enabled powertools
dnf -y  install wget vim git csh openssl-devel hwloc-devel pmix-devel libevent-devel

git clone https://github.com/openucx/ucx.git
cd ucx
./autogen.sh
./contrib/configure-release --prefix=/opt/ucx/build
make -j16
make install

wget https://download.open-mpi.org/release/open-mpi/v4.0/openmpi-4.0.3.tar.gz
tar -xf openmpi-4.0.3.tar.gz
cd openmpi-4.0.3
./configure --enable-mca-no-build=btl-uct --with-slurm --with-pmix --prefix=/opt/openmpi-4.0.3/build
make -j16
make install
export PATH=/opt/openmpi-4.0.3/build/bin:$PATH
export LD_LIBRARY_PATH=/opt/openmpi-4.0.3/build/lib:$LD_LIBRARY_PATH

Definicijo shranimo kot namd-2.14.def in ga prevedemo z ukazom:

singularity build (--fakeroot) namd-2.14.sif namd-2.14.def

Primer naloge SLURM

Primer z uporabo CPU MPI UCX

OpenMPI z različico 4 uvaja UCX kot privzet način komunikacije med procesi. Pri skrbniku gruče preverite, kako je na gruči urejena povezava med vozlišči in temu prilagodite tudi zagon naloge. Prav tako mora biti NAMD preveden tako, da upošteva tip povezave med vozlišči (npr. OFI, VERBS, UCX ipd).

Ta primer ponazarja posel, ki bo zagnan na 32 vozliščih in 256 jedrih. Posel zahteva 2GB RAM-a na jedro, izvajal se bo 5 minut na particiji cpu. 1 jedro pri vsaki nalogi je rezervirano za komunikacijo, zato bo NAMD poročal, ko da je v rabi 224 jeder, ne 256.

#!/bin/bash
#
#SBATCH --ntasks 256            # stevilo jeder
#SBATCH --nodes=32              # stevilo vozlisc
#SBATCH --mem=2000MB            # memory per node
#SBATCH -o slurm.%N.%j.out      # STDOUT
#SBATCH -t 0:05:00              # cas izvajanja (D-HH:MM)
#SBATCH --partition=cpu         # ime particije

module purge
module load NAMD/2.14-foss-2020a-mpi
srun --mpi=pmix namd2 ./apoa1.namd

Primer z uporabo GPU

Ta primer zahteva 2 GPU kartici in 2 jedri na enem vozlišču. Za delovni direktorij je v rabi drug datotečni sistem (naloge ne izvajamo iz domačega direktorija).

#SBATCH -J NAMD_test
#SBATCH --time=01:00:00     # Čas trajanja
#SBATCH --nodes=1       # Število vozlišč   
#SBATCH --mem-per-cpu=2G    # RAM na jedro 
#SBATCH --cpus-per-task=2   # 2 OpenMP niti
#SBATCH --gres=gpu:2        # Število GPU kartic

module load NAMD/...
###  Določi delovni direktorij (SCRATCH)
cp -pr /d/hpc/home/user/apoa1 $SCRATCH_DIR
cd $SCRATCH_DIR
###  Zagon programa
export OMP_NUM_THREADS=1
srun namd2 apoa1.namd
###  Drug način:
#namd2 +p$SLURM_CPUS_PER_TASK +setcpuaffinity +idlepoll apoa1.namd
###  Prenos datotek v domači direktorij ($HOME)
cp -pr $SCRATCH_DIR $HOME/apoa1

Primer z uporabo vsebnika Singularity na CPU

Če želimo za zagon posla uporabiti več vozlišč in bo posel zagnan prek vsebnika (v katerem ni na voljo funkcionalnosti, ki jih ponuja Slurm), je potrebno pridobiti podatke o dodeljenih vozliščih in ustvariti seznam za Charm++ (nodelist). Zapis mora ustrezati naslednjemu:

host {hostname_1} ++cpu {cores_per_node}
host {hostname_2} ++cpu {cores_per_node}
...
host {hostname_n} ++cpu {cores_per_node}

Avtomatsko generiranje te datoteke, glede na dodeljena vozlišča v Slurmu, lahko ustvarimo tako:

NODELIST=$(pwd)/nodelist.${SLURM_JOBID}
for host in $(scontrol show hostnames); do
  echo "host ${host} ++cpus ${SLURM_CPUS_ON_NODE}" >> ${NODELIST}
done

Določimo tudi nastavitve SSH-povezave:

SSH="ssh -o PubkeyAcceptedKeyTypes=+ssh-dss -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=ERROR"

Nato za zagon navedemo:

singularity exec-B $(pwd):/host_pwd namd-2.14.sif charmrun ++remote-shell ${SSH} ++nodelist ${NODELIST} ++p X

Ali namd2 z uporabo charmrun:

singularity exec-B $(pwd):/host_pwd namd-2.14.sif namd2 +ppn <cores_per_node> charmrun ++remote-shell ${SSH} ++nodelist ${NODELIST} datoteka.namd 

Primer z uporabo vsebnika Singularity na GPU

export NAMD_EXE=namd2
singularity exec --nv -B $(pwd):/host_pwd namd-gpu.sif {$NAMD_EXE} ++ppn <nproc> +setcpuaffinity +idlepoll datoteka.namd

Primer pošiljanja z ARC

Najprej potrebujemo datoteko .xrsl, v kateri navedemo, kakšne vire potrebujemo za zagon posla.

&
(rsl_substitution=("JOBID" "test-namd-08"))
(count = 32)

(jobname = $(JOBID))
(inputfiles = 
  ($(JOBID).tar.gz "")
  ($(JOBID).sh "")
)
(executable = $(JOBID).sh)
(outputfiles = ($(JOBID).out.tar.bz2 ""))
(stdout=$(JOBID).log)
(join=yes)
(gmlog=log)
(count=256)
(countpernode=16)
(memory=2000)
(walltime="4 hours")

In izvršljiva datoteka:

JOBID="test-namd-08"

tar -xf ${JOBID}.tar.gz
cd ${JOBID}

${CHARMRUN} ${CHARMARGS} ${NAMD2} +idlepoll $PWD/${JOBID}.conf > ${JOBID}.log

echo Computing finished!
tar cvjf ../${JOBID}.out.tar.bz2 ${JOBID}.restart.{coor,vel,xsc} ${JOBID}.{dcd,coor,vel,xsc,log}

Citiranje NAMD v člankih

Navodila boste našli na:http://www.ks.uiuc.edu/Research/namd/papers.html

Dokumentacija