Hyppää sisältöön

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

Onko tämä sivu hyödyllinen?
Kiitos palautteestasi!
Kiitos! Arvostamme palautettasi.

Kerro meille miten voisimme parantaa tätä sivua ottamalla meihin yhteyttä .