Hyppää sisältöön

Docs CSC now features an automatic Finnish translation. Click here for more information.

Warning!

Puhti and Mahti are being decommissioned in stages, and their storage areas will become fully unavailable from 15 October 2026. Clean up unnecessary files and move any data you need to keep by 31 August 2026. See the Roihu data migration guide for instructions on transferring your data to Roihu.

Puhti scratch is very full: keep only active data there and move or delete everything else. No new Puhti scratch quota will be granted.

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:

module spider namd

Ja lataa haluamasi versio (esim. Roihu-CPU:ssa):

module load namd/3.0.2

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:

(( namd_threads = SLURM_CPUS_PER_TASK - 1 ))

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ä.

NAMD Scaling on Mahti

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.

NAMD Scaling on GPUs

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:

sbatch namd_job.bash

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.

Lisätietoja

Suomenkielinen tekoälykäännös

Sisällössä voi esiintyä virheellistä tietoa tekoälykäännöksestä johtuen.

Klikkaa tästä antaaksesi palautetta