-
Suurteholaskenta GROMACSilla
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.
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.
