-
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:
- 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 laskentakeskus-lisenssin, 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 jäljempänä.
Käyttö
NAMD:a voidaan ajaa joko CPU:illa tai GPU:illa yhdessä CPU:iden kanssa. GPU-versiot tukevat vain yhden solmun töitä.
Suorituskykyyn liittyviä huomioita
Testit osoittavat, että useilla CPU-solmuilla ajettaessa on hyödyllistä jättää yksi ydin viestintään jokaista tehtävää kohden:
Tätä suositellaan myös NAMD-käyttöohjeessa. Testaa kuitenkin omalla syötteelläsi.
Varmista, että --ntasks-per-node kerrottuna arvolla --cpus-per-task on 40 (Puhdissa) tai 128 (Mahdissa), eli kaikki solmun ytimet. Kokeile eri suhteita ja valitse optimaalinen.
Alla oleva data näyttää ApoA1-vertailutestin (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ä on asetettu.
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ä tehtävää kohden (15) kohti pienempää säiemäärää tehtävää kohden (3).
- 1 GPU (+ 10 CPU-ydintä) Puhdissa antaa paremman suorituskyvyn kuin ajo neljällä täydellä Mahti-solmulla. Tämä saavutetaan käyttämällä GPU-resident-tilaa tavallisen GPU-offloadauksen sijaan. Katso lisätietoja NAMD-käyttöoppaasta.
- Muista, että useampien resurssien käyttö nopeampien tulosten saamiseksi on myös kalliimpaa kulutettujen laskutusyksiköiden (BUs) kannalta. Jotta resursseja ei kulu 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ä ApoA1-järjestelmällä Puhdissa. Harkitse NAMD3:n käyttöä, jos aiot ajaa GPU:illa. LUMI-G:tä suositellaan laajamittaisiin simulointeihin, koska GPU-resursseja on siellä paremmin saatavilla kuin Puhdissa ja Mahdissa.
Usean GPU:n suorituskyky
Warning-label
Koska GPU-resursseja on Puhdissa ja Mahdissa niukasti, suosittelemme vahvasti ajamaan usean GPU:n NAMD-simulaatiot LUMI-G:llä.
Alla oleva kuvaaja näyttää NAMD 3.0:n skaalautuvuuden Puhdissa, Mahdissa ja LUMI-G:llä. Jotta useilla GPU:illa ajaminen olisi tehokasta, tarvitset yleensä 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 usean GPU:n ajojen suorituskyvyn. Erityisen hyödyllistä on ottaa käyttöön GPU-resident-tila konfiguraatiotiedoston 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äajoesimerkkejä vastaavasti.
Alla oleva skripti pyytää 5 tehtävää solmua kohden ja 8 säiettä tehtävää kohden kahdella täydellä Puhti-solmulla (80 ydintä). Yksi säie tehtävää kohden 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 useilla pelkkiä CPU:ita käyttävillä solmuilla.
#!/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ää solmua kohden ja 16 säiettä tehtävää kohden kahdella täydellä Mahti-solmulla (256 ydintä). Yksi säie tehtävää kohden 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 LUMIn GPU-solmu sisältää 4 GPU:ta, jotka puolestaan koostuvat 2 GCD:stä (graphics compute die), 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 kuormituksen epätasapainon lieventämiseksi vähemmän CPU-ytimiä osoitetaan sille yksittäiselle GPU-laitteelle, joka suorittaa PME-työn, käyttäen +pmepes-valintaa. STMV-tapauksessa 8 GCD:tä käytettäessä paras suorituskyky saavutetaan osoittamalla 7 ydintä jokaiselle 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:lla saaduissa raporteissa tai julkaistuissa tuloksissa on mainittava sen käyttö ja annettava 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:a, tulee olla mukana 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.