-
GROMACSin suurteholaskenta
GROMACSin suurteholaskenta
Huomio
Suurtehosimulaatiot voivat helposti tuottaa paljon dataa, joten suunnittele tutkimusdatanhallinta (datan kulku, tallennustarpeet) ja analyysiputket etukäteen. Ota yhteyttä CSC:n asiakastukeen, jos olet epävarma työnkulkusi jostakin osa-alueesta.
GROMACSissa on sisäänrakennettu multidir-toiminto, jonka avulla käyttäjät voivat ajaa
useita samanaikaisia simulaatioita yhden Slurm-varauksen sisällä. Tämä on erinomainen
vaihtoehto suurtehokäyttötapauksiin, joissa tavoitteena on ajaa useita samankaltaisia mutta
toisistaan riippumattomia töitä. Erityisesti useita sbatch- tai srun-kutsuja ei tarvita,
mikä vähentää kuormaa eräjonoissa. Harkitse tätä vaihtoehtoa, jos ajat suurtehotyövuoita
tai tehostetun näytteistyksen töitä, kuten replica exchange - tai vapaaenergiasimulaatioita,
joissa käytetään ensemble-pohjaisia etäisyys- tai orientaatiorajoitteita.
multidir-toiminnon toinen hyöty on, että sitä voidaan käyttää pienten systeemien
rinnakkaistehokkuuden parantamiseen. Käynnistämällä useita trajektoreita GPU:ta (tai CPU-solmua)
kohden kunkin riippumattoman simulaation yhteenlaskettu läpimeno kasvaa resurssien paremman
hyödyntämisen ansiosta. Tämä on erityisen hyödyllistä pienten systeemien suorituskyvyn
maksimoimiseksi LUMI-G:llä sekä Mahdissa, jossa voidaan varata vain kokonaisia CPU-solmuja.
Esimerkkieräajokomentosarja Mahdille
Tässä esimerkissä mukautetaan lysozyme-opetusohjelman
tuotanto-osuutta tarkastelemalla systeemistä 8 samankaltaista kopiota, jotka on tasapainotettu eri
nopeusalkuarvoilla. Kutakin kopiota vastaavat syötteet on nimetty samalla tavalla md_0_1.tpr
ja sijoitettu alihakemistoihin run*, kuten alla oleva tree-komennon tuloste havainnollistaa.
$ tree
.
├── multidir.sh
├── run1
│ └── md_0_1.tpr
├── run2
│ └── md_0_1.tpr
├── run3
│ └── md_0_1.tpr
├── run4
│ └── md_0_1.tpr
├── run5
│ └── md_0_1.tpr
├── run6
│ └── md_0_1.tpr
├── run7
│ └── md_0_1.tpr
└── run8
└── md_0_1.tpr
#!/bin/bash
#SBATCH --time=00:30:00
#SBATCH --partition=medium
#SBATCH --ntasks-per-node=128
#SBATCH --nodes=1
#SBATCH --account=<project>
# this script runs a 128 core gromacs multidir job (8 simulations, 16 cores per simulation)
module purge
module load gromacs-env
export OMP_NUM_THREADS=1
srun gmx_mpi mdrun -multidir run* -s md_0_1.tpr -dlb yes
Kun ylähakemistossa suoritetaan sbatch multidir.sh, kaikki simulaatiot ajetaan samanaikaisesti
yhdellä täydellä Mahti-solmulla ilman hyperthreadingia siten, että kullekin systeemille varataan
16 ydintä. Koska systeemit alustettiin eri nopeuksilla, saadaan 8 erillistä trajektoria ja
parannettu faasiavaruuden näytteistys (katso RMSD-analyysi alla). Tämä on erinomainen tapa
nopeuttaa näytteistystä, jos systeemisi ei skaalaudu koko Mahti-solmulle.
Esimerkkieräajokomentosarja LUMIlle
Keskikokoiset ja suuret systeemit (muutamasta 100k atomista yli 1M atomiin) pystyvät yleensä hyödyntämään useita GPU:ita LUMIlla tehokkaasti. Monet pienemmät käyttötapaukset toimivat hyvin myös yhdellä GCD:llä (puoli GPU:ta), mutta mitä pienempi systeemi on, sitä heikommin se pystyy hyödyntämään kiihdyttimen koko kapasiteettia.
multidir-ominaisuutta voidaan käyttää pienten systeemien GPU-käytön parantamiseen ajamalla
useita trajektoreita per GCD. Alla on esimerkki eräajokomentosarjasta, joka käynnistää
4 trajektoria per GCD kahden GPU-solmun resurssivarauksessa (16 GCD:tä). Kukin 64:stä
.tpr-tiedostosta on järjestetty omaan hakemistoonsa run1–run64, samaan tapaan kuin
yllä olevassa Mahti-esimerkissä.
#!/bin/bash
#SBATCH --partition=standard-g
#SBATCH --account=<project>
#SBATCH --time=01:00:00
#SBATCH --nodes=2
#SBATCH --gpus-per-node=8
#SBATCH --ntasks-per-node=32
module use /appl/local/csc/modulefiles
module load gromacs/2025.4-gpu
export OMP_NUM_THREADS=1
export MPICH_GPU_SUPPORT_ENABLED=1
export GMX_ENABLE_DIRECT_GPU_COMM=1
export GMX_FORCE_GPU_AWARE_MPI=1
cat << EOF > select_gpu
#!/bin/bash
export ROCR_VISIBLE_DEVICES=\$((SLURM_LOCALID%SLURM_GPUS_PER_NODE))
exec \$*
EOF
chmod +x ./select_gpu
CPU_BIND="mask_cpu:fe000000000000,fe00000000000000"
CPU_BIND="${CPU_BIND},fe0000,fe000000"
CPU_BIND="${CPU_BIND},fe,fe00"
CPU_BIND="${CPU_BIND},fe00000000,fe0000000000"
srun --cpu-bind=${CPU_BIND} ./select_gpu gmx_mpi mdrun -s topol -nb gpu -bonded gpu -pme gpu -update gpu -multidir run*
Huomaa, että pyytämiesi MPI-tehtävien määrän tulee olla riippumattomien syötteiden määrän monikerta, tässä tapauksessa 1 tehtävä per syöte. Koska LUMI-G-solmua kohden on käytettävissä vain 56 CPU-ydintä, käytämme vain yhtä säiettä per tehtävä. Lisätietoja CPU-GPU-sidonnasta on GROMACS-sovellussivulla sekä LUMI Docsissa.
Alla oleva kuvaaja näyttää kokonaisläpimenon, joka saadaan ajettaessa useita 96k atomin alkoholidehydrogenaasi- (ADH-) vertailuajon replikoita kahdella LUMI-G-solmulla (2 fs aikasteppi). Kun trajektorien määrä per GCD kasvatetaan yhdestä neljään, kokonaissuorituskyky (kunkin riippumattoman trajektorin summa) kasvaa noin yhdellä mikrosekunnilla päivässä paremman GPU-hyödyntämisen ansiosta. Koska jokainen simulaatio on riippumaton, tämä käyttötapaus voidaan skaalata valtavaan määrään solmuja maksimaalisen läpimenon saavuttamiseksi.
