MPI ALELEON Supercomputer

Dari ALELEON by EFISON

Revisi sejak 21 Februari 2022 10.21 oleh WilsonLisan (bicara | kontrib) (paraphrasing)

Halaman ini menjelaskan teknis menjalankan program MPI beserta optimasinya di ALELEON Supercomputer.

Open MPI ALELEON Supercomputer

ALELEON Supercompter menggunakan Open MPI yang telah dioptimasi secara khusus berdasarkan arsitektur AMD Zen2.

Protokol UCX Open MPI di ALELEON Supercomputer

Berikut adalah format perintah yang digunakan oleh berbagai template program MPI untuk berjalan di ALELEON Supercomputer:

mpirun -np $SLURM_NTASKS --mca pml ucx --mca osc ucx ////

Keterangan:

  • Semua proses MPI akan dialokasikan ke core thread CPU sehingga jumlah proses MPI sama dengan jumlah ntasks pada SBATCH SLURM. Variabel $SLURM_NTASKS menangkap jumlah ntasks sehingga user tidak perlu memasukkan jumlah proses MPI secara manual.
  • Berlaku aturan kelipatan 4 untuk jumlah ntasks.
  • Flag --mca pml ucx --mca osc ucx menjalankan OpenMPI pada jaringan RDMA melalui protokol UCX (Unified Communication-X) untuk menghasilkan performa MPI terbaik.

Bagaimana SLURM ALELEON Membagi Core Fisik dan Thread

Proses MPI pada OpenMPI ALELEON Supercomputer yang dijalankan melalui SLURM telah dirancang untuk selalu mengisi penuh core thread per core fisik, artinya:

  • Contoh menjalankan 32 proses MPI, akan dijalankan oleh 16 core fisik / 32 core thread CPU.
  • Contoh menjalankan 64 proses MPI, akan dijalankan oleh 32 core fisik / 64 core thread CPU.
  • dst.

Pembagian ini didasarkan pada pengelompokan core pada CCX dan CCD di arsitektur AMD Zen2 supaya memastikan tidak ada penyebaran proses MPI yang berjalan antar grup CCX / CCD yang berjauhan di mana menyebabkan L3 cache miss dan menurunkan performa secara signifikan. Open MPI dan SLURM pada ALELEON Supercomputer memastikan penyebaran proses MPI selalu berdekatan antar grup CCX dan CCD (tightly coupled) untuk menghasilkan performa terbaik. Semua software komputasi ALELEON Supercomputer telah dioptimasi untuk berjalan dengan skema di atas.

---

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!

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.
Jumlah Node Skenario 1

Jumlah ntasks:

Skenario 2

Jumlah ntasks:

1 1-64 1-128
2 65-128 129-256
3 129-192 257-384

Bagaimana User Memilih Jenis Skenario MPI Multi-Node? Terdapat beberapa rekomendasi dari admin EFISON:

  • Rule of thumb: selalu memilih skenario 1. Apabila user membutuhkan jumlah ntasks lebih dari 192, gunakan skenario 2.
  • User dan admin EFISON dapat melakukan kolaborasi untuk melakukan tes benchmark menentukan tipe skenario multi-node program MPI yang dijalankan.

---

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.

---

Mengalokasikan Memori RAM untuk MPI Multi-Node

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).

---

Alternatif MPI Multi-node: SBATCH ntasks-per-node

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.

#SBATCH --ntasks-per-node=////

Contoh user menjalankan program MPI pada 2 node dengan 48 core per node:

#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.