GROMACS: Perbedaan antara revisi

Dari ALELEON by EFISON
(Change sub-heading)
(major paraphrasing)
Baris 6: Baris 6:
!Versi
!Versi
!Nama Modul
!Nama Modul
!Dukungan MPI
!Dukungan Hardware
!Dukungan Hardware
!Partisi
!Partisi
Baris 11: Baris 12:
|2021.1
|2021.1
|gromacs
|gromacs
|Hybrid MPI/OMP
|CPU-GPU, parallel multi-node
|CPU-GPU, parallel multi-node
|epyc, gpu_ampere
|epyc, gpu_ampere
Baris 16: Baris 18:


== '''Menjalankan Perintah GROMACS di Login Node''' ==
== '''Menjalankan Perintah GROMACS di Login Node''' ==
Beberapa perintah GROMACS bekerja secara interaktif dan membutuhkan input dari user (contoh: pdb2gmx, grompp) sehingga tidak mungkin dijalankan melalui scheduler SLURM. Beberapa perintah tersebut hanya membutuhkan resource yang kecil dan dapat dilakukan langsung di login node melalui terminal.
Beberapa perintah GROMACS bekerja secara interaktif dan membutuhkan input dari user (contoh: pdb2gmx, grompp) sehingga tidak dapat dijalankan melalui manajemen SLURM. Beberapa perintah tersebut hanya membutuhkan resource yang kecil dan dapat dilakukan langsung di login node melalui terminal.


Sebelum melakukan perintah-perintah interaktif GROMACS, load module GROMACS:
Sebelum melakukan perintah-perintah interaktif GROMACS, load module GROMACS:
Baris 22: Baris 24:
Lanjutkan dengan melakukan perintah interaktif GROMACS (contoh: pdb2gmx):
Lanjutkan dengan melakukan perintah interaktif GROMACS (contoh: pdb2gmx):
  $ gmx_mpi pdb2gmx <parameter_input_dan_output>
  $ gmx_mpi pdb2gmx <parameter_input_dan_output>
Perintah-perintah GROMACS yang membutuhkan resource komputasi berat (contoh: mdrun), harus dijalankan melalui SLURM.
Perintah-perintah GROMACS yang membutuhkan resource komputasi berat (contoh: mdrun), harus dijalankan melalui manajemen SLURM.


== '''SLURM Submission Script''' ==
== '''Contoh SLURM Script''' ==
User harus menggunakan Scheduler SLURM untuk menjalankan komputasi GROMACS di Compute Node. User dapat menjalankan GROMACS dengan satu node atau paralel (lebih dari satu node) untuk performa lebih kencang.
User harus menggunakan [[Manajemen SLURM Aleleon|'''manajemen SLURM''']] untuk menjalankan komputasi GROMACS di Compute Node. User dapat menjalankan GROMACS dengan satu node atau paralel (lebih dari satu node) untuk performa lebih kencang.


=== Satu Node ===
=== '''Satu Node CPU''' ===
Contoh menggunakan 64 core CPU dan RAM 128GB.
Contoh berikut untuk menjalankan GROMACS pada satu node CPU.
  #!/bin/bash
  #!/bin/bash
   
   
  #SBATCH --ntasks=64
  #SBATCH --ntasks=64               # Contoh menggunakan 64 core CPU
  #SBATCH --mem=128GB
  #SBATCH --mem=128GB              # Contoh menggunakan RAM 128GB
  #SBATCH --time=10:00:00
  #SBATCH --time=10:00:00           # Contoh menetapkan walltime maks 10 jam
  #SBATCH --output=result-%j.out
  #SBATCH --output=result-%j.out   # Output terminal program
  #SBATCH --error=result-%j.err
  #SBATCH --error=result-%j.err     # Output verbose program
   
   
  # MODULE
  # Memuat modul GROMACS
  module load gromacs
  module load gromacs
   
   
  # RUN COMMAND
  # RUN COMMAND
  # mpirun wajib menggunakan flag protokol UCX
  # mpirun wajib menggunakan flag protokol UCX
  mpirun -np 64 --mca pml ucx --mca osc ucx gmx_mpi mdrun <parameter_input_dan_output>
   
'''mpirun -np $SLURM_NTASKS --mca pml ucx --mca osc ucx gmx_mpi mdrun''' <parameter_input_dan_output>


=== Banyak Node ===
=== '''Multi Node CPU''' ===
Contoh menggunakan 2 node, masing-masing 64 core CPU dan RAM 128GB.
Contoh berikut untuk menjalankan GROMACS pada lebih dari satu node CPU.
  #!/bin/bash
  #!/bin/bash
   
   
  #SBATCH --nodes=2
  #SBATCH --nodes=2                 # Contoh menggunakan 2 node ...
  #SBATCH --ntasks-per-node=64
  #SBATCH --ntasks-per-node=64     # dengan 64 core per node.
  #SBATCH --mem=128GB
                                  # Maka dari itu total menggunakan 128 core CPU
  #SBATCH --time=10:00:00
  #SBATCH --mem=128GB               # Contoh menggunakan RAM 128GB per node
  #SBATCH --output=result-%j.out
  #SBATCH --time=10:00:00           # Contoh menggunakan walltime maks 10 jam
  #SBATCH --error=result-%j.err
  #SBATCH --output=result-%j.out   # Output terminal program
  #SBATCH --error=result-%j.err     # Output verbose program
   
   
  # MODULE
  # Memuat modul GROMACS
  module load gromacs
  module load gromacs
   
   
  # RUN COMMAND
  # RUN COMMAND
  # mpirun wajib menggunakan flag protokol UCX
  # mpirun wajib menggunakan flag protokol UCX
  # Total proses MPI = ntasks per node X nodes
  # SLURM_NTASKS menangkap total proses MPI (nodes * ntasks-per-node)
  mpirun -np 128 --mca pml ucx --mca osc ucx gmx_mpi mdrun <parameter_input_dan_output>
  '''mpirun -np $SLURM_NTASKS --mca pml ucx --mca osc ucx gmx_mpi mdrun''' <parameter_input_dan_output>


=== Akselerasi Satu GPU di GPU Node ===
=== '''Akselerasi Satu GPU di GPU Node''' ===
User juga dapat menjalankan pekerjaan di GPU node menggunakan resource GPU. Perlu diketahui '''tidak semua input dan parameter berjalan kencang dengan akselerasi GPU'''. Harap user dapat menguji terlebih dahulu mdrun-nya dengan nsteps kecil untuk mengetahui peningkatan performa yang bisa diperoleh melalui akselerasi GPU. Perlu diketahui pula akselerasi GPU umumnya hanya bisa berjalan dengan [[Scheduler SLURM Aleleon|paralelisme OpenMP]].
User juga dapat menjalankan pekerjaan di GPU node menggunakan resource GPU. Perlu diketahui '''tidak semua input dan parameter berjalan kencang dengan akselerasi GPU'''. Harap user dapat menguji terlebih dahulu mdrun-nya dengan nsteps kecil untuk mengetahui peningkatan performa yang bisa diperoleh melalui akselerasi GPU. Perlu diketahui pula akselerasi GPU umumnya hanya bisa berjalan dengan '''hybrid OpenMP'''.


Biasanya, GROMACS mdrun '''tidak memerlukan parameter tambahan''' untuk menjalankan akselerasi GPU. Namun dalam beberapa kasus, optimasi menggunakan parameter tambahan bisa berpengaruh positif ke kecepatan komputasi. Referensi mengenai parameter akselerasi GPU lanjutan (-nb, -bonded, -pme) dapat dibaca di laman [https://manual.gromacs.org/current/user-guide/mdrun-performance.html Getting good performance from mdrun — GROMACS 2021.1 documentation] dan [https://developer.nvidia.com/blog/creating-faster-molecular-dynamics-simulations-with-gromacs-2020 Creating Faster Molecular Dynamics Simulations with GROMACS 2020 | NVIDIA Developer Blog].
Biasanya, GROMACS mdrun '''tidak memerlukan parameter tambahan''' untuk menjalankan akselerasi GPU. Namun dalam beberapa kasus, optimasi menggunakan parameter tambahan bisa berpengaruh positif ke kecepatan komputasi. Referensi mengenai parameter akselerasi GPU lanjutan (-nb, -bonded, -pme) dapat dibaca di laman [https://manual.gromacs.org/current/user-guide/mdrun-performance.html '''Getting good performance from mdrun — GROMACS 2021.1 documentation'''] dan '''[https://developer.nvidia.com/blog/creating-faster-molecular-dynamics-simulations-with-gromacs-2020 Creating Faster Molecular Dynamics Simulations with GROMACS 2020 | NVIDIA Developer Blog].'''


Berikut adalah contoh SLURM script dengan penggunaan 1 GPU (32 proses OpenMP).
Berikut adalah contoh SLURM script dengan penggunaan 1 GPU.
  #!/bin/bash
  #!/bin/bash
   
   
  #SBATCH --partition=gpu_ampere
  #SBATCH --partition=gpu_ampere   # Menggunakan Compute Node GPU.
  #SBATCH --ntasks=32
  #SBATCH --ntasks=32               # Contoh menggunakan 32 core CPU ...
  #SBATCH --gres=gpu:1
  #SBATCH --gres=gpu:1             # dengan 1 GPU.
  #SBATCH --mem=48GB
  #SBATCH --mem=48GB               # Contoh menggunakan RAM 48GB.
  #SBATCH --time=10:00:00
  #SBATCH --time=10:00:00           # Contoh menetapkan walltime maks 10 jam.
  #SBATCH --output=result-%j.out
  #SBATCH --output=result-%j.out   # Output terminal program.
  #SBATCH --error=result-%j.err
  #SBATCH --error=result-%j.err     # Output verbose program.
   
   
  # MODULE
  # Memuat modul GROMACS
  module load gromacs
  module load gromacs
   
   
  # RUN COMMAND
  # RUN COMMAND
  # Definisikan jumlah thread OpenMP menyesuaikan ntasks
  '''# Definisikan jumlah thread OpenMP menyesuaikan ntasks'''
  export OMP_NUM_THREADS=32
  export OMP_NUM_THREADS=${SLURM_NTASKS}
  gmx_mpi mdrun <parameter_input_dan_output>
  gmx_mpi mdrun <parameter_input_dan_output>


=== Akselerasi Banyak GPU di GPU Node ===
=== '''Akselerasi Banyak GPU di GPU Node dan Hybrid MPI/OMP''' ===
User dapat menggunakan lebih dari satu GPU dengan [[Scheduler SLURM Aleleon|paralelisme MPI yang digabungkan dengan paralelisme OpenMP]]. Sangat dianjurkan untuk hanya menggunakan '''1 proses MPI per unit GPU''' untuk mencegah penurunan performa. Perlu diperhatikan bahwa GROMACS dengan gabungan paralelisme MPI dan OpenMP '''hanya bisa berjalan dengan maksimal 6 proses OpenMP'''.
User dapat menggunakan lebih dari satu GPU dengan paralelisme hybrid MPI dan OpenMP. Terdapat beberapa aturan mengenai hybrid MPI/OMP dari software GROMACS:
 
* '''Jumlah thread OMP maksimal adalah 6 thread OMP per MPI.'''
* Jumlah core CPU yang dipakai (ntasks) mengikuti perumusan:
 
'''ntasks''' = jumlah GPU yang dipakai * jumlah thread OMP per MPI yang dipilih user
Terdapat rekomendasi dari admin EFISON supaya dapat menghasilkan performa terbaik:
 
* Sangat dianjurkan untuk hanya menggunakan '''1 proses MPI per unit GPU''' untuk mencegah penurunan performa sehingga dapat dirumuskan:


Berikut adalah contoh SLURM script dengan penggunaan 2 GPU (2 proses MPI * 4 proses OpenMP).
'''Jumlah proses MPI''' = jumlah GPU yang digunakan
Berikut adalah contoh SLURM script dengan penggunaan 2 GPU dimana user memilih untuk menggunakan 4 thread OMP per MPI.
  #!/bin/bash
  #!/bin/bash
   
   
  #SBATCH --partition=gpu_ampere
  #SBATCH --partition=gpu_ampere   # Menggunakan Compute Node GPU.
  #SBATCH --ntasks=8
  #SBATCH --ntasks=8                # Pada contoh ini, user menggunakan 4 thread OMP per MPI ...
  #SBATCH --gres=gpu:2
                                  # sehingga ntasks = 2 GPU * 4 OMP = 8
  #SBATCH --mem=48GB
  #SBATCH --gres=gpu:2             # Menggunakan 2 GPU.
  #SBATCH --time=10:00:00
  #SBATCH --mem=48GB               # Contoh menggunakan RAM 48GB.
  #SBATCH --output=result-%j.out
  #SBATCH --time=10:00:00           # Contoh menetapkan walltime maks 10 jam.
  #SBATCH --error=result-%j.err
  #SBATCH --output=result-%j.out   # Output terminal program.
  #SBATCH --error=result-%j.err     # Output verbose program.
   
   
  # MODULE
  # Memuat modul GROMACS
  module load gromacs
  module load gromacs
   
   
  # PERINTAH SPESIFIK UNTUK OPENMPI DI PARTITION gpu_ampere
  # Set nilai OMP
  # Tanpa unset, proses MPI tidak akan berjalan di partition gpu_ampere
export OMP_NUM_THREADS=4
'''# PERINTAH SPESIFIK UNTUK OPENMPI DI PARTITION gpu_ampere
  # Tanpa unset, proses MPI tidak akan berjalan di partition gpu_ampere'''
  unset UCX_TLS
  unset UCX_TLS
  unset UCX_NET_DEVICES
  unset UCX_NET_DEVICES
   
   
  # RUN COMMAND
  # RUN COMMAND
  # Definisikan jumlah thread OpenMP
  '''# Jumlah mpirun = jumlah GPU yang dipakai'''
# Jumlah ntasks maksimal = proses MPI * proses OpenMP
   
  # Pada contoh ini digunakan 8 tasks = 2 proses MPI * 4 proses OpenMP
export OMP_NUM_THREADS=4
  mpirun -np 2 --mca pml ucx --mca osc ucx gmx_mpi mdrun <parameter_input_dan_output>
  mpirun -np 2 --mca pml ucx --mca osc ucx gmx_mpi mdrun <parameter_input_dan_output>

Revisi per 13 September 2021 08.24

Deskripsi

GROMACS adalah package berkecepatan tinggi untuk komputasi dinamika molekular baik untuk biokimia (seperti protein, lipids) maupun non-biokimia (seperti polimer).

Versi yang Tersedia

Versi Nama Modul Dukungan MPI Dukungan Hardware Partisi
2021.1 gromacs Hybrid MPI/OMP CPU-GPU, parallel multi-node epyc, gpu_ampere

Menjalankan Perintah GROMACS di Login Node

Beberapa perintah GROMACS bekerja secara interaktif dan membutuhkan input dari user (contoh: pdb2gmx, grompp) sehingga tidak dapat dijalankan melalui manajemen SLURM. Beberapa perintah tersebut hanya membutuhkan resource yang kecil dan dapat dilakukan langsung di login node melalui terminal.

Sebelum melakukan perintah-perintah interaktif GROMACS, load module GROMACS:

$ module load gromacs

Lanjutkan dengan melakukan perintah interaktif GROMACS (contoh: pdb2gmx):

$ gmx_mpi pdb2gmx <parameter_input_dan_output>

Perintah-perintah GROMACS yang membutuhkan resource komputasi berat (contoh: mdrun), harus dijalankan melalui manajemen SLURM.

Contoh SLURM Script

User harus menggunakan manajemen SLURM untuk menjalankan komputasi GROMACS di Compute Node. User dapat menjalankan GROMACS dengan satu node atau paralel (lebih dari satu node) untuk performa lebih kencang.

Satu Node CPU

Contoh berikut untuk menjalankan GROMACS pada satu node CPU.

#!/bin/bash

#SBATCH --ntasks=64               # Contoh menggunakan 64 core CPU
#SBATCH --mem=128GB               # Contoh menggunakan RAM 128GB
#SBATCH --time=10:00:00           # Contoh menetapkan walltime maks 10 jam
#SBATCH --output=result-%j.out    # Output terminal program
#SBATCH --error=result-%j.err     # Output verbose program

# Memuat modul GROMACS
module load gromacs

# RUN COMMAND
# mpirun wajib menggunakan flag protokol UCX

mpirun -np $SLURM_NTASKS --mca pml ucx --mca osc ucx gmx_mpi mdrun <parameter_input_dan_output>

Multi Node CPU

Contoh berikut untuk menjalankan GROMACS pada lebih dari satu node CPU.

#!/bin/bash

#SBATCH --nodes=2                 # Contoh menggunakan 2 node ...
#SBATCH --ntasks-per-node=64      # dengan 64 core per node.
                                  # Maka dari itu total menggunakan 128 core CPU
#SBATCH --mem=128GB               # Contoh menggunakan RAM 128GB per node
#SBATCH --time=10:00:00           # Contoh menggunakan walltime maks 10 jam
#SBATCH --output=result-%j.out    # Output terminal program
#SBATCH --error=result-%j.err     # Output verbose program

# Memuat modul GROMACS
module load gromacs

# RUN COMMAND
# mpirun wajib menggunakan flag protokol UCX
# SLURM_NTASKS menangkap total proses MPI (nodes * ntasks-per-node)

mpirun -np $SLURM_NTASKS --mca pml ucx --mca osc ucx gmx_mpi mdrun <parameter_input_dan_output>

Akselerasi Satu GPU di GPU Node

User juga dapat menjalankan pekerjaan di GPU node menggunakan resource GPU. Perlu diketahui tidak semua input dan parameter berjalan kencang dengan akselerasi GPU. Harap user dapat menguji terlebih dahulu mdrun-nya dengan nsteps kecil untuk mengetahui peningkatan performa yang bisa diperoleh melalui akselerasi GPU. Perlu diketahui pula akselerasi GPU umumnya hanya bisa berjalan dengan hybrid OpenMP.

Biasanya, GROMACS mdrun tidak memerlukan parameter tambahan untuk menjalankan akselerasi GPU. Namun dalam beberapa kasus, optimasi menggunakan parameter tambahan bisa berpengaruh positif ke kecepatan komputasi. Referensi mengenai parameter akselerasi GPU lanjutan (-nb, -bonded, -pme) dapat dibaca di laman Getting good performance from mdrun — GROMACS 2021.1 documentation dan Creating Faster Molecular Dynamics Simulations with GROMACS 2020 | NVIDIA Developer Blog.

Berikut adalah contoh SLURM script dengan penggunaan 1 GPU.

#!/bin/bash

#SBATCH --partition=gpu_ampere    # Menggunakan Compute Node GPU.
#SBATCH --ntasks=32               # Contoh menggunakan 32 core CPU ...
#SBATCH --gres=gpu:1              # dengan 1 GPU.
#SBATCH --mem=48GB                # Contoh menggunakan RAM 48GB.
#SBATCH --time=10:00:00           # Contoh menetapkan walltime maks 10 jam.
#SBATCH --output=result-%j.out    # Output terminal program.
#SBATCH --error=result-%j.err     # Output verbose program.

# Memuat modul GROMACS
module load gromacs

# RUN COMMAND
# Definisikan jumlah thread OpenMP menyesuaikan ntasks
export OMP_NUM_THREADS=${SLURM_NTASKS}

gmx_mpi mdrun <parameter_input_dan_output>

Akselerasi Banyak GPU di GPU Node dan Hybrid MPI/OMP

User dapat menggunakan lebih dari satu GPU dengan paralelisme hybrid MPI dan OpenMP. Terdapat beberapa aturan mengenai hybrid MPI/OMP dari software GROMACS:

  • Jumlah thread OMP maksimal adalah 6 thread OMP per MPI.
  • Jumlah core CPU yang dipakai (ntasks) mengikuti perumusan:
ntasks = jumlah GPU yang dipakai * jumlah thread OMP per MPI yang dipilih user

Terdapat rekomendasi dari admin EFISON supaya dapat menghasilkan performa terbaik:

  • Sangat dianjurkan untuk hanya menggunakan 1 proses MPI per unit GPU untuk mencegah penurunan performa sehingga dapat dirumuskan:
Jumlah proses MPI = jumlah GPU yang digunakan

Berikut adalah contoh SLURM script dengan penggunaan 2 GPU dimana user memilih untuk menggunakan 4 thread OMP per MPI.

#!/bin/bash

#SBATCH --partition=gpu_ampere    # Menggunakan Compute Node GPU.
#SBATCH --ntasks=8                # Pada contoh ini, user menggunakan 4 thread OMP per MPI ...
                                  # sehingga ntasks = 2 GPU * 4 OMP = 8
#SBATCH --gres=gpu:2              # Menggunakan 2 GPU.
#SBATCH --mem=48GB                # Contoh menggunakan RAM 48GB.
#SBATCH --time=10:00:00           # Contoh menetapkan walltime maks 10 jam.
#SBATCH --output=result-%j.out    # Output terminal program.
#SBATCH --error=result-%j.err     # Output verbose program.

# Memuat modul GROMACS
module load gromacs

# Set nilai OMP
export OMP_NUM_THREADS=4

# PERINTAH SPESIFIK UNTUK OPENMPI DI PARTITION gpu_ampere
# Tanpa unset, proses MPI tidak akan berjalan di partition gpu_ampere
unset UCX_TLS
unset UCX_NET_DEVICES

# RUN COMMAND
# Jumlah mpirun = jumlah GPU yang dipakai

mpirun -np 2 --mca pml ucx --mca osc ucx gmx_mpi mdrun <parameter_input_dan_output>