MPI ALELEON Supercomputer: Perbedaan antara revisi

Dari ALELEON by EFISON
(Menulis section job MPI versi mudah secara otomatis)
(menyelesaikan job MPI versi mudah dan advanced)
Baris 1: Baris 1:
Halaman ini menjelaskan teknis menjalankan program MPI di ALELEON Supercomputer.
3Halaman ini menjelaskan teknis menjalankan program MPI di ALELEON Supercomputer.


== '''Open MPI UCX ALELEON Supercomputer''' ==
== '''Open MPI UCX ALELEON Supercomputer''' ==
ALELEON Supercompter menggunakan Open MPI yang telah dioptimasi untuk arsitektur AMD Zen2. Berikut adalah sintak standar menjalankan program MPI di ALELEON Supercomputer melalui SLURM: <syntaxhighlight lang="bash">
ALELEON Supercompter menggunakan Open MPI yang telah dioptimasi untuk arsitektur AMD Zen2. Berikut adalah sintak standar menjalankan program MPI di ALELEON Supercomputer melalui SLURM: <syntaxhighlight lang="bash">
mpirun -np $SLURM_NTASKS --mca pml ucx --mca osc ucx <program-MPI>
mpirun -np $SLURM_NTASKS --mca pml ucx --mca osc ucx <program-MPI>
</syntaxhighlight>Keterangan:
</syntaxhighlight>'''''Keterangan:'''''
*Variabel '''$SLURM_NTASKS''' menangkap jumlah ntasks (CPU) pada SLURM Submit Script sehingga user tidak perlu memasukkan jumlah proses MPI secara manual.
*Variabel '''SLURM_NTASKS''' menangkap jumlah ntasks (CPU) pada SLURM Submit Script sehingga user tidak perlu memasukkan jumlah proses MPI secara manual.
*Flag '''--mca pml ucx --mca osc ucx''' menjalankan Open MPI pada jaringan RDMA melalui protokol UCX (Unified Communication-X) untuk menghasilkan performa terbaik.
*Flag '''--mca pml ucx --mca osc ucx''' menjalankan Open MPI pada jaringan RDMA melalui protokol UCX (Unified Communication-X) untuk menghasilkan performa terbaik.
=='''Bagaimana SLURM ALELEON Membagi Core Fisik dan Thread'''==
=='''Bagaimana SLURM ALELEON Membagi Core Fisik dan Thread'''==
Baris 19: Baris 19:


== '''(Versi Mudah) Memilih Jumlah Alokasi Komputasi SLURM untuk Job MPI''' ==
== '''(Versi Mudah) Memilih Jumlah Alokasi Komputasi SLURM untuk Job MPI''' ==
Bagian ini menjelaskan bagaimana karakteristik SLURM ALELEON Supercomputer '''secara otomatis''' menjalankan alokasi komputasi core CPU, memori RAM, dan GPU untuk job MPI .
Bagian ini menjelaskan bagaimana karakteristik ''default'' SLURM ALELEON Supercomputer menjalankan alokasi komputasi untuk job MPI


=== Menjalankan job MPI satu node dan multi-node secara otomatis ===
=== Menjalankan job MPI satu node dan multi-node secara otomatis ===
SLURM ALELEON '''secara otomatis''' dapat menjalankan job MPI baik secara satu node atau multi-node berdasarkan jumlah ntasks dengan pembagian berikut:
SLURM ALELEON '''secara otomatis''' dapat menjalankan job MPI baik pada satu node atau multi-node berdasarkan jumlah ntasks dengan pembagian berikut:
{| class="wikitable"
{| class="wikitable"
! rowspan="2" |Jumlah ntasks
! rowspan="2" |Jumlah ntasks
! colspan="2" |Jumlah node (nodes) yang dipilih SLURM secara otomatis
! colspan="2" |Jumlah node (nodes) yang dipilih SLURM secara otomatis
|-
|-
!epyc (CPU)
!Partisi epyc (CPU)
<nowiki>*</nowiki>''jumlah node naik setiap kelipatan 128''
<nowiki>*</nowiki>''jumlah node naik setiap kelipatan 128''
!ampere (GPU)
!Partisi ampere (GPU)
<nowiki>*</nowiki>''maks 32 core''
<nowiki>*</nowiki>''maks 32 core''
|-
|-
Baris 48: Baris 48:
|X
|X
|}
|}
Sehingga secara mudahnya, user cukup mendefinisikan jumlah ntasks tanpa perlu mengatur jumlah nodes.<syntaxhighlight lang="bash">
Sehingga secara standar, user cukup mendefinisikan jumlah ntasks tanpa perlu mengatur jumlah nodes.<syntaxhighlight lang="bash" line="1">
#!/bin/bash
#SBATCH --ntasks=
#SBATCH --ntasks=
#SBATCH --mem=
#SBATCH --mem=


# dan parameter SBATCH lainnya ...
# Parameter SBATCH lainnya dan alur jalannya program ...
# alur jalannya program ...


mpirun -np $SLURM_NTASKS --mca pml ucx --mca osc ucx <program-MPI>
mpirun -np $SLURM_NTASKS --mca pml ucx --mca osc ucx <program-MPI>
Baris 62: Baris 62:


* Ambil contoh alokasi SBATCH berikut dimana menggunakan 2 node. SLURM akan memesan RAM 64GB per node sehingga total 128GB untuk 2 node.  
* Ambil contoh alokasi SBATCH berikut dimana menggunakan 2 node. SLURM akan memesan RAM 64GB per node sehingga total 128GB untuk 2 node.  
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash" line="1">
#!/bin/bash
#SBATCH --ntasks=192  
#SBATCH --ntasks=192  
#SBATCH --mem=64GB  
#SBATCH --mem=64GB  
Baris 68: Baris 69:
# ntasks 192 menggunakan 2 node secara otomatis
# ntasks 192 menggunakan 2 node secara otomatis
# Dengan alokasi RAM 64GB per node sehingga total 128GB untuk 2 node
# Dengan alokasi RAM 64GB per node sehingga total 128GB untuk 2 node
</syntaxhighlight>Job MPI mempunyai kapasitas mem maksimal:
</syntaxhighlight>Job MPI mempunyai kapasitas mem maksimal:


Baris 76: Baris 76:
---
---


=== Menjalankan Job Hybrid MPI / OpenMP ===
=== Menjalankan Job Hybrid MPI / OpenMP (OMP) ===
''coming soon''
SLURM dapat menjalankan job hybrid MPI / OMP dengan format berikut: <syntaxhighlight lang="bash" line="1">
#!/bin/bash
 
# ntasks mewakili proses MPI
#SBATCH --ntasks=
 
# cpus-per-task mewakili OMP
#SBATCH --cpus-per-task=
 
# Parameter SBATCH lainnya dan alur jalannya program ...
 
# Definisi threading OMP
export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK}
 
mpirun -np $SLURM_NTASKS --mca pml ucx --mca osc ucx <program-MPI>
</syntaxhighlight>'''''Keterangan:'''''
 
* Total core CPU yang digunakan adalah '''ntasks * cpus-per-task.'''
* Variabel SLURM_NTASKS menangkap total penghitungan core CPU diatas.


== '''(Versi ''Advanced'') Memilih Jumlah Alokasi Komputasi SLURM untuk Job MPI''' ==
== '''(Versi ''Advanced'') Memilih Jumlah Alokasi Komputasi SLURM untuk Job MPI''' ==
''coming soon''
Bagian ini menjelaskan bagaimana user secara manual dapat mengatur parameter SBATCH SLURM ALELEON Supercomputer menjalankan job MPI.
 
=== Acuan Spesifikasi Compute Node dengan SBATCH SLURM ===
User dapat mengacu spesifikasi berikut untuk mengatur besar parameter SBATCH secara manual.
{| class="wikitable"
|+Spesifikasi Compute Node berdasarkan SBATCH SLURM
! rowspan="2" |Parameter SBATCH
! rowspan="2" |Hardware
! colspan="2" |Spesifikasi
|-
!Partisi epyc (CPU)
!Partisi ampere (GPU)
|-
|nodes
|Jumlah node
|3
|1
|-
|ntasks
|Total core CPU
|384
|32
|-
|ntasks-per-node
|Total core CPU per node
|128
|32
|-
|mem
|Memori RAM per node
|240GB
|120GB
|-
|gpus
|Jumlah GPU
|0
|2
|}
---
 
=== SBATCH nodes dan ntasks-per-node ===
User dapat mengatur jumlah nodes dan ntasks per node secara manual dengan parameter SBATCH nodes dan ntasks-per-node: <syntaxhighlight lang="bash" line="1">
#!/bin/bash
 
# Jumlah node
#SBATCH --nodes=
 
# Jumlah ntasks per node
#SBATCH --ntasks-per-node=
 
# Parameter SBATCH lainnya dan alur jalannya program ...
 
mpirun -np $SLURM_NTASKS --mca pml ucx --mca osc ucx <program-MPI>
</syntaxhighlight>'''''Keterangan:'''''
 
* Total core CPU yang dipesan adalah '''nodes * ntasks-per-node'''
* Variabel SLURM_NTASKS menangkap total CPU diatas.
 
Hal ini dapat dilakukan untuk hybrid MPI / OMP sebagai berikut: <syntaxhighlight lang="bash" line="1">
#!/bin/bash
 
# Jumlah node
#SBATCH --nodes=
 
# Jumlah ntasks per node
#SBATCH --ntasks-per-node=
 
# Jumlah threading OMP per task MPI
#SBATCH --cpus-per-task=
 
# Parameter SBATCH lainnya dan alur jalannya program ...
 
# Definisi threading OMP
export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK}
 
mpirun -np $SLURM_NTASKS --mca pml ucx --mca osc ucx <program-MPI>
</syntaxhighlight>'''''Keterangan:'''''
 
* Total core CPU yang dipesan adalah '''nodes * ntasks-per-node * cpus-per-task'''
* Variabel SLURM_NTASKS menangkap total CPU diatas.
 
---
 
=== Menjalankan MPI pada Core Fisik saja ===
User dapat menjalankan program MPI sepenuhnya pada core fisik dengan mengalokasikan '''jumlah SBATCH ntasks 2 kali lipat dari proses MPI yang mau dijalankan'''. Contoh:<syntaxhighlight lang="bash" line="1">
#!/bin/bash
#SBATCH --ntasks=64
 
# Parameter SBATCH lainnya dan alur jalannya program
 
# Jumlah proses MPI setengah dari ntasks
mpirun -np 32 --mca pml ucx --mca osc ucx <program-MPI>
</syntaxhighlight>'''Keterangan:'''


=== Menjalankan MPI pada Core Fisik ===
* Sistem akan tetap menghitung besar CPU Core Hour berdasarkan jumlah '''ntasks'''.
Akan tetapi, apabila user tetap ingin menjalankan program MPI sepenuhnya pada core fisik (contoh ketika mengetahui bahwa file input nya berjalan optimal di core fisik) maka harus mengalokasikan '''jumlah SBATCH ntasks 2 kali lipat dari proses MPI yang mau dijalankan'''. Contoh:
#SBATCH --ntasks=64
mpirun -np '''32''' --mca pml ucx --mca osc ucx ////
'''#''' '''Peringatan: sistem akan tetap menghitung 64 core thread''' '''sebagai penghitungan CPU Core Hour!'''

Revisi per 12 Oktober 2023 08.18

3Halaman ini menjelaskan teknis menjalankan program MPI di ALELEON Supercomputer.

Open MPI UCX ALELEON Supercomputer

ALELEON Supercompter menggunakan Open MPI yang telah dioptimasi untuk arsitektur AMD Zen2. Berikut adalah sintak standar menjalankan program MPI di ALELEON Supercomputer melalui SLURM:

mpirun -np $SLURM_NTASKS --mca pml ucx --mca osc ucx <program-MPI>

Keterangan:

  • Variabel SLURM_NTASKS menangkap jumlah ntasks (CPU) pada SLURM Submit Script sehingga user tidak perlu memasukkan jumlah proses MPI secara manual.
  • Flag --mca pml ucx --mca osc ucx menjalankan Open MPI pada jaringan RDMA melalui protokol UCX (Unified Communication-X) untuk menghasilkan performa terbaik.

Bagaimana SLURM ALELEON Membagi Core Fisik dan Thread

SLURM ALELEON Supercomputer menjalankan proses Open MPI untuk selalu mengisi penuh core thread per core fisik, contoh:

  • 32 proses MPI dijalankan oleh 16 core fisik / 32 core thread CPU.
  • 64 proses MPI dijalankan oleh 32 core fisik / 64 core thread CPU.
  • dst ...

Pembagian ini didasarkan pada pengelompokan core CPU pada grup CCX dan CCD AMD Zen2 supaya memastikan penyebaran proses MPI selalu berdekatan antar grup CCX / CCD (tightly coupled) dan menghasilkan performa terbaik. Semua software komputasi ALELEON Supercomputer telah dioptimasi untuk berjalan dengan skema ini.

Skema grup CCX dan CCD pada CPU AMD yang digunakan oleh ALELEON Supercomputer

Kelipatan 2 atau 4 untuk Jumlah ntasks (Alokasi CPU)

Berdasarkan jumlah core dan grup pada gambar skema CPU diatas, kami menyarankan untuk memilih ntasks (alokasi CPU) dengan kelipatan 2 atau 4 untuk memastikan proses MPI mengisi grup CCX dan CCD yang berdekatan.

(Versi Mudah) Memilih Jumlah Alokasi Komputasi SLURM untuk Job MPI

Bagian ini menjelaskan bagaimana karakteristik default SLURM ALELEON Supercomputer menjalankan alokasi komputasi untuk job MPI

Menjalankan job MPI satu node dan multi-node secara otomatis

SLURM ALELEON secara otomatis dapat menjalankan job MPI baik pada satu node atau multi-node berdasarkan jumlah ntasks dengan pembagian berikut:

Jumlah ntasks Jumlah node (nodes) yang dipilih SLURM secara otomatis
Partisi epyc (CPU)

*jumlah node naik setiap kelipatan 128

Partisi ampere (GPU)

*maks 32 core

1 - 32 1 1
33 - 128 1 X
129 - 256 2 X
257 - 384 3 X

Sehingga secara standar, user cukup mendefinisikan jumlah ntasks tanpa perlu mengatur jumlah nodes.

#!/bin/bash
#SBATCH --ntasks=
#SBATCH --mem=

# Parameter SBATCH lainnya dan alur jalannya program ...

mpirun -np $SLURM_NTASKS --mca pml ucx --mca osc ucx <program-MPI>

---

SBATCH mem = alokasi RAM per node

Parameter SBATCH mem mengalokasikan jumlah RAM per node baik pada job MPI satu node dan multi-node.

  • Ambil contoh alokasi SBATCH berikut dimana menggunakan 2 node. SLURM akan memesan RAM 64GB per node sehingga total 128GB untuk 2 node.
#!/bin/bash
#SBATCH --ntasks=192 
#SBATCH --mem=64GB 

# ntasks 192 menggunakan 2 node secara otomatis
# Dengan alokasi RAM 64GB per node sehingga total 128GB untuk 2 node

Job MPI mempunyai kapasitas mem maksimal:

  • Compute Node CPU (epyc): 240GB (per node).
  • Compute Node GPU (ampere): 120GB

---

Menjalankan Job Hybrid MPI / OpenMP (OMP)

SLURM dapat menjalankan job hybrid MPI / OMP dengan format berikut:

#!/bin/bash

# ntasks mewakili proses MPI 
#SBATCH --ntasks=

# cpus-per-task mewakili OMP 
#SBATCH --cpus-per-task=

# Parameter SBATCH lainnya dan alur jalannya program ...

# Definisi threading OMP
export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK}

mpirun -np $SLURM_NTASKS --mca pml ucx --mca osc ucx <program-MPI>

Keterangan:

  • Total core CPU yang digunakan adalah ntasks * cpus-per-task.
  • Variabel SLURM_NTASKS menangkap total penghitungan core CPU diatas.

(Versi Advanced) Memilih Jumlah Alokasi Komputasi SLURM untuk Job MPI

Bagian ini menjelaskan bagaimana user secara manual dapat mengatur parameter SBATCH SLURM ALELEON Supercomputer menjalankan job MPI.

Acuan Spesifikasi Compute Node dengan SBATCH SLURM

User dapat mengacu spesifikasi berikut untuk mengatur besar parameter SBATCH secara manual.

Spesifikasi Compute Node berdasarkan SBATCH SLURM
Parameter SBATCH Hardware Spesifikasi
Partisi epyc (CPU) Partisi ampere (GPU)
nodes Jumlah node 3 1
ntasks Total core CPU 384 32
ntasks-per-node Total core CPU per node 128 32
mem Memori RAM per node 240GB 120GB
gpus Jumlah GPU 0 2

---

SBATCH nodes dan ntasks-per-node

User dapat mengatur jumlah nodes dan ntasks per node secara manual dengan parameter SBATCH nodes dan ntasks-per-node:

#!/bin/bash

# Jumlah node
#SBATCH --nodes=

# Jumlah ntasks per node
#SBATCH --ntasks-per-node=

# Parameter SBATCH lainnya dan alur jalannya program ...

mpirun -np $SLURM_NTASKS --mca pml ucx --mca osc ucx <program-MPI>

Keterangan:

  • Total core CPU yang dipesan adalah nodes * ntasks-per-node
  • Variabel SLURM_NTASKS menangkap total CPU diatas.

Hal ini dapat dilakukan untuk hybrid MPI / OMP sebagai berikut:

#!/bin/bash

# Jumlah node
#SBATCH --nodes=

# Jumlah ntasks per node
#SBATCH --ntasks-per-node=

# Jumlah threading OMP per task MPI
#SBATCH --cpus-per-task=

# Parameter SBATCH lainnya dan alur jalannya program ...

# Definisi threading OMP
export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK}

mpirun -np $SLURM_NTASKS --mca pml ucx --mca osc ucx <program-MPI>

Keterangan:

  • Total core CPU yang dipesan adalah nodes * ntasks-per-node * cpus-per-task
  • Variabel SLURM_NTASKS menangkap total CPU diatas.

---

Menjalankan MPI pada Core Fisik saja

User dapat menjalankan program MPI sepenuhnya pada core fisik dengan mengalokasikan jumlah SBATCH ntasks 2 kali lipat dari proses MPI yang mau dijalankan. Contoh:

#!/bin/bash
#SBATCH --ntasks=64 

# Parameter SBATCH lainnya dan alur jalannya program

# Jumlah proses MPI setengah dari ntasks 
mpirun -np 32 --mca pml ucx --mca osc ucx <program-MPI>

Keterangan:

  • Sistem akan tetap menghitung besar CPU Core Hour berdasarkan jumlah ntasks.