MPI ALELEON Supercomputer: Perbedaan antara revisi

Dari ALELEON by EFISON
(Menulis section job MPI versi mudah secara otomatis)
Baris 2: Baris 2:


== '''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:  
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''' ''<proram-MPI>''
mpirun -np $SLURM_NTASKS --mca pml ucx --mca osc ucx <program-MPI>
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.
Baris 18: Baris 18:
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.
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.


== '''Memilih Jumlah Alokasi Komputasi (ntasks, mem, nodes) SLURM untuk Job MPI''' ==
== '''(Versi Mudah) Memilih Jumlah Alokasi Komputasi SLURM untuk Job MPI''' ==
Bagian ini menjelaskan karakteristik SLURM ALELEON Supercomputer menjalankan alokasi komputasi SBATCH ntasks (CPU), mem (RAM), dan nodes (jumlah compute node) 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 .


=== Menjalankan MPI pada Core Fisik ===
=== Menjalankan job MPI satu node dan multi-node secara otomatis ===
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:
SLURM ALELEON '''secara otomatis''' dapat menjalankan job MPI baik secara satu node atau multi-node berdasarkan jumlah ntasks dengan pembagian berikut:
#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!'''
=='''MPI Satu Node vs Multi Node'''==
Kemampuan utama program MPI adalah melakukan komputasi paralel atau dapat berjalan pada lebih dari 1 node (multi-node) atau lebih dari 128 core thread pada ALELEON Supercomputer. Terdapat beberapa hal yang harus diketahui oleh user:
 
---
===ntasks 1 - 64: Gunakan 1 node===
Untuk jumlah proses mpirun dibawah 65 (1 - 64) gunakan 1 node.
#SBATCH --nodes=1
---
===ntasks >64: Kapan Bisa Multi-node?===
Salah satu hal yang membuat unik (dan sulit) pemograman MPI adalah membutuhkan memori cache CPU sebagai ''buffer'' untuk menampung alur komunikasi paralel.
 
Apa artinya pada ALELEON Supercomputer untuk ntasks diatas 64?
*'''Skenario pertama:''' Menjalankan program MPI yang '''tidak efisien''' dalam mengatur alokasi cache CPU, user harus menambah 1 node setiap kelipatan 64 ntasks.
*'''Skenario kedua:''' Menjalankan program MPI yang '''efisien''' dalam mengatur alokasi cache CPU, user dapat menambah 1 node setiap kelipatan 128 ntasks.
{| class="wikitable"
{| class="wikitable"
!Jumlah Node
! rowspan="2" |Jumlah ntasks
!Skenario 1
! colspan="2" |Jumlah node (nodes) yang dipilih SLURM secara otomatis
Jumlah ntasks:
|-
!Skenario 2
!epyc (CPU)
Jumlah ntasks:
<nowiki>*</nowiki>''jumlah node naik setiap kelipatan 128''
!ampere (GPU)
<nowiki>*</nowiki>''maks 32 core''
|-
|-
|1 - 32
|1
|1
|1
|1-64
|1-128
|-
|-
|33 - 128
|1
|X
|-
|129 - 256
|2
|2
|65-128
|X
|129-256
|-
|-
|257 - 384
|3
|3
|129-192
|X
|257-384
|}
|}'''Bagaimana User Memilih Jenis Skenario MPI Multi-Node?''' Terdapat beberapa rekomendasi dari admin EFISON:
Sehingga secara mudahnya, user cukup mendefinisikan jumlah ntasks tanpa perlu mengatur jumlah nodes.<syntaxhighlight lang="bash">
*''Rule of thumb'': selalu memilih '''skenario 1'''. Apabila user '''membutuhkan jumlah ntasks lebih dari 192, gunakan skenario 2'''.
#SBATCH --ntasks=
*User dan admin EFISON dapat melakukan kolaborasi untuk melakukan tes benchmark menentukan tipe skenario multi-node program MPI yang dijalankan.
#SBATCH --mem=
 
# dan parameter SBATCH lainnya ...
# alur jalannya program ...
 
mpirun -np $SLURM_NTASKS --mca pml ucx --mca osc ucx <program-MPI>
</syntaxhighlight>---
 
=== 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.
<syntaxhighlight lang="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
 
</syntaxhighlight>Job MPI mempunyai kapasitas mem maksimal:
 
* Compute Node CPU (epyc): '''240GB''' (per node).
* Compute Node GPU (ampere): '''120GB'''
 
---
---
===Bagaimana User Menjalankan MPI Multi-Node===
Ketika user mengalokasikan jumlah nodes lebih dari satu pada SBATCH maka SLURM secara otomatis akan menyebarkan proses MPI ke jumlah node yang didefinisikan. Contoh: user mengalokasikan 2 node untuk menjalankan 192 proses MPI:
#SBATCH --nodes=2
#SBATCH --ntasks=192
#SBATCH --mem=128GB


SLURM secara otomatis akan menyebar 192 proses MPI ke 2 node. SLURM sekaligus melakukan optimasi komputasi multi-node berdasarkan protokol network RDMA / UCX dan grouping CCX dan CCD terdekat antar CPU.
=== Menjalankan Job Hybrid MPI / OpenMP ===
''coming soon''


---
== '''(Versi ''Advanced'') Memilih Jumlah Alokasi Komputasi SLURM untuk Job MPI''' ==
===Mengalokasikan Memori RAM untuk MPI Multi-Node===
''coming soon''
Bagaimana user mengalokasikan memori RAM (SBATCH mem) untuk komputasi MPI multi-node?
*SBATCH mem secara otomatis mengalokasikan memori RAM '''per node'''. Pada contoh diatas, user mengalokasikan RAM 128GB per node sehingga total menggunakan 256GB untuk 2 node.
*Jumlah basis RAM disarankan '''1GB per (ntasks / nodes).'''


*
=== Menjalankan MPI pada Core Fisik ===
---
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:
===Alternatif MPI Multi-node: SBATCH ntasks-per-node===
  #SBATCH --ntasks=64
SLURM menyediakan opsi alternatif untuk menjalankan MPI multi-node yaitu ntasks-per-node di mana menggantikan ntasks. Sesuai namanya, ntasks-per-node mendefinisikan '''jumlah ntasks per node'''.
  mpirun -np '''32''' --mca pml ucx --mca osc ucx ////
  '''#SBATCH --ntasks-per-node='''////
Contoh user menjalankan program MPI pada 2 node dengan 48 core per node:
'''#''' '''Peringatan: sistem akan tetap menghitung 64 core thread''' '''sebagai penghitungan CPU Core Hour!'''
  '''#SBATCH --nodes=2'''
#SBATCH --ntasks-per-node=48
mpirun -np $SLURM_NTASKS --mca pml ucx --mca osc ucx ////
*Total jumlah MPI adalah '''nodes * ntasks-per-node''', pada contoh di atas adalah 2*48 = 96 proses MPI. Variabel $SLURM_NTASKS menangkap total proses MPI ini.
*SLURM akan menyebar rata 48 proses MPI ke semua node.

Revisi per 11 Oktober 2023 09.56

Halaman 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 SLURM ALELEON Supercomputer secara otomatis menjalankan alokasi komputasi core CPU, memori RAM, dan GPU untuk job MPI .

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:

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

*jumlah node naik setiap kelipatan 128

ampere (GPU)

*maks 32 core

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

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

#SBATCH --ntasks=
#SBATCH --mem=

# dan parameter SBATCH lainnya ...
# 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.
#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

coming soon

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

coming soon

Menjalankan MPI pada Core Fisik

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!