Hyppää sisältöön

Puhdin ja Mahdin laskentapalvelut ovat poistuneet käytöstä. Puhdin ja Mahdin kirjautumisnoodit sekä tallennustila ovat saatavilla 15. lokakuuta 2026 asti, mutta ne eivät enää ole palvelusopimusten piirissä. Ryhdythän toimiin datan siirtämiseksi Roihuun välittömästi. Ohjeita löydät sivulta Roihun datan siirto-opas.

GROMACSin suurteholaskenta

Huomio

Suurtehosimulaatiot voivat helposti tuottaa paljon dataa, joten suunnittele tutkimusdatanhallinta (datan kulku, tallennustarpeet) ja analyysiputket etukäteen. Älä epäröi ottaa yhteyttä CSC:n asiakastukeen, jos olet epävarma työnvuosi jostakin osa-alueesta.

GROMACSissa on sisäänrakennettu multidir-toiminnallisuus, 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ä. Huomionarvoista on, että useita sbatch- tai srun-kutsuja ei tarvita, mikä vähentää kuormaa eräjonoihin. 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-toiminnallisuuden toinen hyöty on, että sitä voidaan käyttää pienten järjestelmien 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 järjestelmien suorituskyvyn maksimoimiseksi Roihu-GPU:ssa ja LUMI-G:ssä.

Esimerkkieräajokomennostot

Tässä esimerkissä mukautetaan tuotanto-osa lysozyme-opetusmateriaalista 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 --account=<project>
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=384

# this script runs a 384 core GROMACS multidir job
# (8 simulations, 48 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ä Roihu-CPU-solmulla ilman hyperthreadingia siten, että kullekin järjestelmälle varataan 48 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 Roihu-CPU-solmulle.

Simuloitujen replikoiden keskineliöpoikkeamat

Suuret järjestelmät (>1 miljoona atomia) pystyvät yleensä hyödyntämään useita GPU:ita tehokkaasti. Monet pienemmät käyttötapaukset voivat toimia hyvin myös yhdellä GPU:lla, 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äytön lisäämiseen ajamalla useita trajektoreita GPU:ta kohden. Alla on esimerkkieräajokomentosarja, joka käynnistää 8 trajektoria GPU:ta kohden täydellä Roihu-GPU-solmulla (4 GPU:ta). Kukin 32 .tpr-tiedostosta on nimetty samalla tavalla topol.tpr ja järjestetty erillisiin hakemistoihin run1–run32, samoin kuin Roihu-CPU-esimerkissä.

CUDA Multi-Process Service

CUDA Multi-Process Servicen (MPS) käyttö on pakollista, jotta useat CUDAa käyttävät MPI-prosessit voivat ajaa samanaikaisesti yhdellä GPU:lla Roihussa. Katso käyttöesimerkki alla olevasta eräajokomentosarjasta.

#!/bin/bash
#SBATCH --time=00:15:00
#SBATCH --partition=gpumedium
#SBATCH --account=<project>
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=32
#SBATCH --cpus-per-task=9
#SBATCH --gres=gpu:gh200:4

module purge
module load gromacs-env

export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK}
export GMX_ENABLE_DIRECT_GPU_COMM=1
export GMX_FORCE_GPU_AWARE_MPI=1

# NVIDIA CUDA Multi-Process Service (MPS) required to run multiple tasks per GPU
nvidia-cuda-mps-control -d

srun gmx_mpi mdrun -s topol -nb gpu -bonded gpu -pme gpu -update gpu -multidir run*

echo quit | nvidia-cuda-mps-control

Huomaa, että pyytämiesi MPI-tehtävien määrän on oltava riippumattomien syötteiden määrän monikerta, tässä tapauksessa 1 tehtävä syötettä kohden. Koska Roihu GPU:ta kohden on käytettävissä 72 CPU-ydintä, käytämme 9 säiettä tehtävää kohden.

Alla oleva kuvaaja näyttää kokonaisyhteenlasketun läpimenon, joka saadaan, kun 96k atomin alcohol dehydrogenase (ADH) -vertailutapauksen useita replikoita ajetaan täydellä Roihu-GPU-solmulla (2 fs aikasteppi). Kun trajektorien määrä GPU:ta kohden kasvatetaan yhdestä kahdeksaan, aggregoitu suorituskyky (kunkin riippumattoman trajektorin summa) kasvaa noin 34 % GPU:n paremman hyödyntämisen ansiosta. Koska kukin simulaatio on riippumaton, tämän käyttötapauksen voisi skaalata valtavaan määrään solmuja maksimaalisen läpimenon saavuttamiseksi.

ADH-vertailutapauksen replikoiden yhteenlaskettu läpimeno Roihu-GPU-solmulla

Alla oleva esimerkki käynnistää 7 trajektoria MI250X GCD:tä kohden täydellä LUMI-G-solmulla (8 GCD:tä). Kukin .tpr-tiedosto on järjestetty erillisiin hakemistoihin run1–run56, samoin kuin Roihu-GPU-esimerkissä.

#!/bin/bash
#SBATCH --time=01:00:00
#SBATCH --partition=standard-g
#SBATCH --account=<project>
#SBATCH --nodes=1
#SBATCH --gpus-per-node=8
#SBATCH --ntasks-per-node=56

module use /appl/local/csc/modulefiles
module load gromacs/2026.1-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 on oltava riippumattomien syötteiden määrän monikerta, tässä tapauksessa 1 tehtävä syötettä kohden. Koska LUMI-G-solmulla on käytettävissä vain 56 CPU-ydintä, käytämme yhtä säiettä tehtävää kohden.

CPU-GPU-sidonta LUMIssa

Lisätietoja CPU-GPU-sidonnasta on GROMACS-sovellussivulla, sekä LUMIn käyttöoppaassa.

Alla oleva kuvaaja näyttää kokonaisyhteenlasketun läpimenon, joka saadaan, kun 96k atomin alcohol dehydrogenase (ADH) -vertailutapauksen useita replikoita ajetaan yhdellä LUMI-G-solmulla (2 fs aikasteppi). Kun trajektorien määrä GCD:tä kohden kasvatetaan yhdestä seitsemään, aggregoitu suorituskyky (kunkin riippumattoman trajektorin summa) kasvaa noin 17 % GPU:n paremman hyödyntämisen ansiosta. Koska kukin simulaatio on riippumaton, tämän käyttötapauksen voisi skaalata valtavaan määrään solmuja maksimaalisen läpimenon saavuttamiseksi.

ADH-vertailutapauksen replikoiden yhteenlaskettu läpimeno LUMI-G-solmulla

Lisätietoja

Suomenkielinen tekoälykäännös

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

Klikkaa tästä antaaksesi palautetta