Optimasi Performa ALELEON Supercomputer

Dari ALELEON by EFISON

Revisi sejak 5 Februari 2022 05.11 oleh WilsonLisan (bicara | kontrib) (menulis MPI hingga pembagian core fisik dan thread)

Halaman ini memandu user dalam basis mengalokasikan resources komputasi (node, CPU, RAM, GPU) secara benar berdasarkan hardware yang digunakan oleh ALELEON Supercomputer.

Dasar Memilih Jumlah Node, Core CPU, dan RAM

Berikut adalah beberapa dasar untuk mengalokasikan jumlah node, core thread CPU, dan RAM di ALELEON Supercomputer.

Menentukan Jumlah Node: Program MPI vs Non-MPI

Terdapat dua kategori besar pada program komputasi yang dijalankan pada superkomputer yaitu program MPI dan non-MPI:

  • Program MPI adalah program yang ditulis berdasarkan pemodelan MPI (Message Parallel Interface) di mana dapat berjalan secara paralel atau lebih dari satu node (multi-node). Berjalan multi-node artinya dapat memanfaatkan lebih dari 128 core thread CPU pada ALELEON Supercomputer.
  • Program non-MPI adalah program yang tidak ditulis dengan pemodelan MPI atau paralel sehingga hanya dapat berjalan pada 1 node.
Jenis Program Jumlah Node
Non-MPI 1
MPI atau paralel 1 atau lebih

Apabila user menjalankan program komputasi yang tersedia di ALELEON Supercomputer, user dapat mengetahui bahwa program tersebut adalah MPI atau tidak dengan memperhatikan kolom "Dukungan MPI" di tabel daftar software komputasi ALELEON Supercomputer

---

Jumlah Core Thread CPU: Kelipatan 4

Berdasarkan arsiktektur CPU AMD yang digunakan oleh ALELEON Supercomputer, user direkomendasikan untuk memilih jumlah core thread CPU (ntasks) berdasarkan kelipatan 4, dimulai dari 1,2,4, kemudian naik kelipatan 4 menjadi 8, 12, 16, 20, 24, 28, 32, 36, 40, dan seterusnya.

---

Semakin Besar Jumlah Core CPU = Komputasi Semakin Cepat?

Bisa iya bisa tidak. Besar jumlah core CPU yang dibutuhkan bergantung pada:

  • Apabila menjalankan program CPU: bergantung pada besarnya skala input komputasi user. Admin ALELEON Supercomputer sepenuhnya menyerahkan tanggung jawab kepada user untuk mengetahui sendiri apakah input komputasi yang dijalankan adalah skala kecil atau besar.
    • Input komputasi skala kecil cukup membutuhkan jumlah core kecil (rekomendasi dibawah 16) dan bisa jadi lambat apabila dijalankan dengan jumlah core besar.
    • Input komputasi skala besar dapat menggunakan jumlah core CPU yang besar seperti 32, 64, 128, atau diatasnya.
  • Apabila menjalankan program GPU: kebanyakan membutuhkan jumlah core kecil karena pada dasarnya semua komputasi dikerjakan oleh GPU. Cukup jarang ada program GPU yang membutuhkan jumlah core CPU besar.

---

Memperkirakan Kapasitas RAM yang Digunakan

Apakah program user membutuhkan banyak RAM atau tidak? Tidak ada aturan baku untuk mengetahui hal ini karena bergantung dengan jenis software dan besarnya skala input yang dijalankan user. Admin EFISON dapat memberikan saran untuk menggunakan jumlah RAM 1GB per ntasks sebagai basis. Contoh:

  • ntasks=8, alokasikan mem 8GB.
  • ntasks=32, alokasikan mem 32GB.

User dapat menggunakan kapasitas RAM yang lebih besar (contoh 2GB atau 4GB per ntasks) apabila user mengetahui bahwa program yang dijalankan membutuhkan kapasitas RAM besar atau program gagal berjalan dengan alokasi RAM 1GB per ntasks.

Menjalankan Program non-MPI: multi-core atau cuma 1 core?

Terdapat beberapa hal yang perlu diperhatikan oleh user ketika menjalanan program non-MPI:

  • Program komputasi non-MPI dapat berjalan secara multi-core (lebih dari 1 core) atau hanya bisa berjalan dengan 1 core tergantung oleh jenis software dan pemrogramannya.
  • Program komputasi non-MPI yang hanya berjalan 1 core sering terjadi pada program yang ditulis sendiri oleh user atau framework komputasi yang menggunakan standar pemrograman serial.
  • Bagi user yang tidak ingin programnya berjalan di ALELEON Supercomputer hanya dengan 1 core, Admin EFISON menyarankan untuk menguji terlebih dahulu dengan menjalankannya pada perangkat komputer pribadi dan lihat status penggunaan CPU-nya.
    • User dapat mengganti coding apabila terjadi pada program yang ditulis sendiri.
    • Apabila menggunakan software komputasi maka user harus mencari alternatif software yang dapat berjalan multi-core.

Menjalankan Program MPI: Optimasi mpirun dan nodes - ntasks

MPI pada ALELEON Supercompter menggunakan OpenMPI yang telah dioptimasi secara khusus berdasarkan arsitektur AMD Zen2 yang digunakan oleh AMD EPYC 7702P dan Threadripper 3990X.

---

Modul OpenMPI

User dapat memuat modul OpenMPI default pada SLURM Script atau terminal dengan perintah:

module load openmpi

Admin EFISON selalu menjadikan OpenMPI versi terbaru sebagai default. User dapat melihat ketersediaan OpenMPI lainnya pada tabel daftar compiler ALELEON Supercomputer atau melalui perintah module av pada terminal:

$ module av openmpi

---

Menulis Perintah OpenMPI di ALELEON Supercomputer

Berikut adalah format untuk menjalankan program MPI di ALELEON Supercomputer di SLURM Script:

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

Keterangan:

  • Tetap menggunakan perintah mpirun, bukan srun yang biasa digunakan pada SLURM.
  • 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 dan OpenMPI 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.

AMD Zen2 mengelompokkan 4 core fisik / 8 core thread kedalam satu grup yang disebut CCX. Setiap CCX mempunyai L3 cache yang digunakan untuk "meja kerja" antar core. Kemudian 2 CCX dikelompokkan menjadi 1 CCD dan berkomunikasi dengan CCD lainnya (total 8 CCD - menjadi 64 core fisik / 128 core thread). OpenMPI 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. 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 <program-user>

# Peringatan: sistem akan tetap menghitung 64 core thread 
# sebagai penghitungan CPU Core Hour!

---

Satu Node atau Multi Node?

Paralelisasi Thread per Core (cpus-per-tasks)