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
- Prenos programske opreme NAMD: http://www.ks.uiuc.edu/Development/Download/download.cgi?PackageName=NAMD
- NAMD Tutorials: http://www.ks.uiuc.edu/Training/Tutorials/
- NAMD User Guide: http://www.ks.uiuc.edu/Research/namd/2.14/ug/
- NAMD 2.14 Release notes: http://www.ks.uiuc.edu/Research/namd/2.14/notes.html