-
NAMD
NAMD
NAMD on rinnakkainen molekyylidynamiikkaohjelmisto, joka on suunniteltu suurten biomolekulaaristen järjestelmien tehokkaaseen simulointiin. Ohjelmistoa kehittää ja jakelee Illinoisin yliopiston Beckman-instituutin Theoretical and Computational Biophysics Group.
Saatavuus
Seuraavat versiot ovat saatavilla:
- Roihu-CPU: 3.0.2
- Puhti: 2.14, 2.14-cuda, 3.0, 3.0-cuda
- Mahti: 2.14, 3.0, 3.0-cuda
- LUMI: 3.0.2-cpu, 3.0.2-gpu
Lisenssi
CSC on hankkinut laskentakeskuslisenssin license, joka sallii käytön ei-kaupalliseen tutkimukseen. Kaupallista käyttöä varten ota yhteyttä osoitteeseen namd@ks.uiuc.edu. Katso myös käytön mainitseminen alla.
Käyttö
NAMD:tä voidaan ajaa joko CPU:illa tai GPU:illa yhdessä CPU:iden kanssa. GPU-versiot tukevat vain yhden solmun ajoja.
Roihussa NAMD:tä tuetaan tällä hetkellä vain Roihu-CPU:ssa.
Katso järjestelmässäsi saatavilla olevat NAMD-versiot komennolla:
Ja lataa haluamasi versio (esim. Roihu-CPU:ssa):
Suorituskykyyn liittyvät huomiot
Testit osoittavat, että yhden ytimen jättäminen viestintään kullekin tehtävälle on hyödyllistä, kun ajetaan usealla CPU-solmulla:
Tätä suositellaan myös NAMD-käsikirjassa. Testaa kuitenkin omalla syötteelläsi.
Varmista, että --ntasks-per-node kerrottuna arvolla --cpus-per-task on 384 (Roihu-CPU), 40 (Puhti)
tai 128 (Mahti), eli kaikki solmun ytimet ovat käytössä. Kokeile eri suhteita ja valitse optimaalinen.
Alla oleva data näyttää ApoA1-benchmarkin (92k atomia, 2 fs aikasteppi) Mahdissa, missä ns/päivä esitetään varattujen solmujen funktiona ja namd_threads-arvoa vaihdellaan kuten alla olevassa Mahti-skriptissä.
Data osoittaa myös seuraavat asiat:
- Optimaaliset asetukset riippuvat järjestelmän ja ajoparametrien lisäksi resurssien määrästä. Tässä järjestelmässä resurssien määrän kasvaessa optimaalinen suorituskyky siirtyy useammista säikeistä per tehtävä (15) kohti pienempää säiemäärää per tehtävä (3).
- 1 täysi Roihu-solmu antaa samanlaisen suorituskyvyn kuin kolme tai neljä täyttä Mahti-solmua. Jokaisessa Roihu-solmussa on täsmälleen kolme kertaa enemmän ytimiä kuin yhdessä Mahti-solmussa.
- Muista, että useampien resurssien käyttö tulosten saamiseksi nopeammin on myös kalliimpaa kulutettujen laskutusyksiköiden (BUs) kannalta. Jotta resursseja ei menisi hukkaan, varmista, että työsi todella hyötyy ytimien määrän kasvattamisesta. Nopeutuksen tulisi olla vähintään 1,5-kertainen, kun resurssien määrä kaksinkertaistetaan.
- Testataksesi omaa järjestelmääsi aja esimerkiksi 10 000 dynamiikka-askelta ja etsi tulosteesta rivi
Benchmark time:.
NAMD 3.0
NAMD3 tarjoaa GPU:illa 2–3 kertaa paremman suorituskyvyn kuin NAMD2, esimerkiksi 160 ns/päivä verrattuna 55 ns/päivään ApoA1-järjestelmällä Puhdissa. Harkitse NAMD3:n käyttöä, jos aiot ajaa GPU:illa. LUMI-G:tä suositellaan laajamittaisiin simulointeihin, koska GPU:ita on siellä paremmin saatavilla kuin Puhdissa ja Mahdissa.
Moni-GPU-suorituskyky
Warning-label
GPU:iden niukkuuden vuoksi Puhdissa ja Mahdissa sekä koska NAMD ei ole saatavilla Roihu-GPU:ssa, suosittelemme tällä hetkellä ajamaan moni-GPU-NAMD-simulaatiot LUMI-G:llä.
Alla oleva kuvaaja näyttää NAMD 3.0:n skaalautuvuuden Puhdissa, Mahdissa ja LUMI-G:llä. Jotta ajo usealla GPU:lla olisi tehokasta, tarvitset tyypillisesti melko suuren järjestelmän, jossa on vähintään useita satoja tuhansia atomeja, kuten alla oleva STMV-tapaus. Tarkista tilanne omalla järjestelmälläsi ja katso
NAMD-verkkosivustolta
saatavilla olevat ominaisuudet, joiden avulla voit maksimoida
moni-GPU-ajojen suorituskyvyn. Erityisen hyödyllistä on ottaa käyttöön GPU-resident-tila asetustiedoston valinnalla GPUresident on.
Eräajokomentosarjojen esimerkkejä
NAMD2:n ja NAMD3:n suoritustiedostojen nimet ovat erilaiset, namd2 ja
namd3. Jos aiot käyttää NAMD2:ta, muokkaa alla olevia eräajokomentosarjaesimerkkejä
vastaavasti.
Alla oleva skripti pyytää tehtävää per solmu ja 8 säiettä per tehtävä kahdella täydellä Puhti-solmulla (80 ydintä). Yksi säie per tehtävä varataan viestintään.
#!/bin/bash
#SBATCH --job-name=apoa1-namd
#SBATCH --account=project_2001659
#SBATCH --partition=medium
#SBATCH --time=00:20:00
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=24
#SBATCH --cpus-per-task=16
module purge
module load namd/3.0.2
# leave one core per process for communication
(( namd_threads = SLURM_CPUS_PER_TASK - 1 ))
srun namd3 +ppn ${namd_threads} apoa1.namd > apoa1.out
# while NAMD suggests using 1 thread per task for communication
# (as above), all cores for computing can be tested with:
# srun namd3 +ppn ${SLURM_CPUS_PER_TASK} apoa1.namd > apoa1.out
Alla oleva skripti pyytää 5 tehtävää per solmu ja 8 säiettä per tehtävä kahdella täydellä Puhti-solmulla (80 ydintä). Yksi säie per tehtävä varataan viestintään.
#!/bin/bash
#SBATCH --account=<project>
#SBATCH --partition=test
#SBATCH --time=0:10:00
#SBATCH --nodes=2
#SBATCH --ntasks-per-node=4 # test to find the optimum number
#SBATCH --cpus-per-task=10 # 40/(ntasks-per-node)
module purge
module load gcc/11.3.0
module load openmpi/4.1.4
module load namd/3.0
# leave one core per process for communication
(( namd_threads = SLURM_CPUS_PER_TASK - 1 ))
srun namd3 +ppn ${namd_threads} apoa1.namd > apoa1.out
# while NAMD suggests using 1 thread per task for communication
# (as above), all cores for computing can be tested with:
# srun namd3 +ppn ${SLURM_CPUS_PER_TASK} apoa1.namd > apoa1.out
Huomaa, että NAMD3 toimii tehokkaasti GPU:illa, ja tämä on yleensä kustannustehokkaampaa kuin ajo usealla pelkkiä CPU:ita käyttävällä solmulla.
#!/bin/bash
#SBATCH --account=<project>
#SBATCH --partition=gputest
#SBATCH --time=0:10:00
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=10 # use at most 10 CPU cores per GPU
#SBATCH --gres=gpu:v100:1
module load namd/3.0-cuda
srun namd3 +p ${SLURM_CPUS_PER_TASK} +setcpuaffinity +devices 0 apoa1.namd > apoa1.out
Alla oleva skripti pyytää 8 tehtävää per solmu ja 16 säiettä per tehtävä kahdella täydellä Mahti-solmulla (256 ydintä). Yksi säie per tehtävä varataan viestintään.
#!/bin/bash
#SBATCH --account=<project>
#SBATCH --partition=test
#SBATCH --time=0:10:00
#SBATCH --nodes=2
#SBATCH --ntasks-per-node=8 # test to find the optimum number
#SBATCH --cpus-per-task=16 # 128/(ntasks-per-node)
module purge
module load gcc/11.2.0
module load openmpi/4.1.2
module load namd/3.0
# leave one core per process for communication
(( namd_threads = SLURM_CPUS_PER_TASK - 1))
srun namd3 +ppn ${namd_threads} apoa1.namd > apoa1.out
Alla oleva skripti pyytää 1 GCD:n ja 7 CPU-ydintä. Huomaa, että jokainen GPU-solmu LUMIssa sisältää 4 GPU:ta, jotka puolestaan koostuvat 2 GCD:stä (graphics compute dies), jotka Slurm tunnistaa yksittäisiksi GPU-laitteiksi. Lisäksi solmua kohden on käytettävissä 56 CPU-ydintä, joten käytä enintään 7 ydintä varattua GCD:tä kohden.
#!/bin/bash
#SBATCH --partition=small-g
#SBATCH --account=<project>
#SBATCH --time=00:15:00
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=7
#SBATCH --gpus-per-node=1
module use /appl/local/csc/modulefiles
module load namd/3.0.2-gpu
srun namd3 +p ${SLURM_CPUS_PER_TASK} +setcpuaffinity +devices 0 stmv.namd > stmv.out
Alla oleva skripti pyytää 8 GCD:tä ja 50 CPU-ydintä. PME:stä johtuvan
kuormitusepätasapainon lieventämiseksi vähemmän CPU-ytimiä osoitetaan sille yhdelle GPU-laitteelle,
joka suorittaa PME-työn, käyttäen +pmepes-valintaa. STMV-tapauksessa
käytettäessä 8 GCD:tä paras suorituskyky saavutetaan osoittamalla 7 ydintä kullekin
ei-PME-laitteelle ja vain 1 ydin PME-laitteelle. Huomaa, että +p asetetaan
CPU-ytimien kokonaismäärään eli 7*7 + 1 = 50. Testaa eri
vaihtoehtoja omalla järjestelmälläsi.
#!/bin/bash
#SBATCH --partition=standard-g
#SBATCH --account=<project>
#SBATCH --time=00:15:00
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=50
#SBATCH --gpus-per-node=8
module use /appl/local/csc/modulefiles
module load namd/3.0.2-gpu
srun namd3 +p ${SLURM_CPUS_PER_TASK} +pmepes 1 +setcpuaffinity +devices 0,1,2,3,4,5,6,7 stmv.namd > stmv.out
Lähetä eräajot komennolla:
Viitteet
NAMD-lisenssisopimuksessa määritellään, että kaikissa NAMD:llä saaduissa raporteissa tai julkaistuissa tuloksissa tulee mainita sen käyttö ja antaa tunnustus kehittäjille seuraavasti:
NAMD was developed by the Theoretical and Computational Biophysics Group in the Beckman Institute for Advanced Science and Technology at the University of Illinois at Urbana-Champaign.
Lisäksi kaikissa julkaistuissa töissä, joissa käytetään NAMD:tä, tulee olla seuraava viite:
James C. Phillips, David J. Hardy, Julio D. C. Maia, John E. Stone, Joao V. Ribeiro, Rafael C. Bernardi, Ronak Buch, Giacomo Fiorin, Jerome Henin, Wei Jiang, Ryan McGreevy, Marcelo C. R. Melo, Brian K. Radak, Robert D. Skeel, Abhishek Singharoy, Yi Wang, Benoit Roux, Aleksei Aksimentiev, Zaida Luthey-Schulten, Laxmikant V. Kale, Klaus Schulten, Christophe Chipot, and Emad Tajkhorshid. Scalable molecular dynamics on CPU and GPU architectures with NAMD. Journal of Chemical Physics, 153:044130, 2020. https://doi.org/10.1063/5.0014475
Lisäksi sähköisten dokumenttien tulee sisältää suora linkki viralliselle NAMD-sivulle.