Hyppää sisältöön

Welcome to our weekly research support coffee hour on Zoom! Click here for more information.

Warning!

Puhti scratch disk is becoming very full (80+ % ) resulting in performance degradation. Everybody is advised to only keep actively processed data on scratch, all other data should be deleted, transferred to host institute or stored in Lumi-O. No new quota will be granted. Click here for a tool for examining your disk usage.

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.

Simuloitujen replikoiden neliöllisten keskipoikkeamien keskiarvot

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 run1run64, 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.

GCD-jakaminen LUMI-G:llä multidir-toiminnolla

Lisätietoja

Suomenkielinen tekoälykäännös

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

Klikkaa tästä antaaksesi palautetta