Hyppää sisältöön

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

Warning!

Puhti and Mahti will be decommissioned after Roihu becomes available. Users should clean up unnecessary files and move any required data by the end of August 2026. See the Roihu data preparation instructions for details.

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

Suurteholaskenta GROMACSilla

Huomio

Suurtehosimulaatiot voivat helposti tuottaa paljon dataa, joten suunnittele datanhallintasi (datavirta, tallennustarpeet) ja analyysiputkesi etukäteen. Älä epäröi ottaa yhteyttä CSC:n asiakastukeen, jos olet epävarma työnkulkusi mistä tahansa osa-alueesta.

GROMACS sisältää sisäänrakennetun multidir-toiminnallisuuden, 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 suuren läpimenon työnkulkuja tai tehostetun näytteistyksen töitä, kuten replica exchange- tai vapaaenergiasimulaatioita, joissa käytetään ensemble-pohjaisia etäisyys- tai orientaatiorajoitteita.

multidir-toiminnosta on hyötyä myös siinä, että sitä voidaan käyttää pienten järjestelmien rinnakkaistehokkuuden parantamiseen. Käynnistämällä useita trajektoreita per GPU (tai CPU-solmu) kunkin riippumattoman simulaation yhteenlaskettu läpimeno kasvaa paremman resurssien hyödyntämisen ansiosta. Tämä on erityisen hyödyllistä pienten järjestelmien suorituskyvyn maksimoimiseksi LUMI-G:llä sekä Mahdissa, jossa voidaan varata vain kokonaisia CPU-solmuja.

Esimerkkieräskripti Mahdille

Tässä esimerkissä mukautetaan lysozyme-opetusohjelman tuotanto-osuutta tarkastelemalla järjestelmästä 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 käyttäen yhtä kokonaista Mahti-solmua ilman hyperthreadingia siten, että kullekin järjestelmälle varataan 16 ydintä. Koska järjestelmät alustettiin eri nopeuksilla, saadaan 8 erillistä trajektoria ja parempi faasiavaruuden näytteistys (katso RMSD-analyysi alla). Tämä on erinomainen tapa nopeuttaa näytteistystä, jos järjestelmäsi ei skaalaudu koko Mahti-solmulle.

Simuloitujen replikoiden keskineliöpoikkeamat

Esimerkkieräskripti LUMIlle

Keskikokoiset ja suuret järjestelmät (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 järjestelmä on, sitä heikommin se pystyy hyödyntämään kiihdyttimen koko kapasiteettia.

multidir-ominaisuutta voidaan käyttää pienten järjestelmien GPU-käyttöasteen parantamiseen ajamalla useita trajektoreita per GCD. Alla on esimerkkieräskripti, 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:stä run64:ään, 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 alcohol dehydrogenase (ADH) -vertailutestin 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-käyttöasteen ansiosta. Koska kukin simulaatio on riippumaton, tämän käyttötapauksen voisi skaalata valtavaan määrään solmuja maksimaalisen läpimenon saavuttamiseksi.

GCD-jakaminen LUMI-G:llä multidirin avulla

Lisätietoja

Suomenkielinen tekoälykäännös

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

Klikkaa tästä antaaksesi palautetta