Submit Script ALELEON Supercomputer

Dari ALELEON by EFISON

Salah satu seni dalam menggunakan superkomputer adalah user menentukan sendiri alokasi resources untuk menjalankan job seperti jumlah core CPU, RAM, GPU, walltime, file output, notifikasi email, threading CPU, dll. Analogikan seperti kita hendak pesan bungkus di warung makan nasi padang di mana kita menentukan sendiri berapa porsi yang mau dibungkus, jenis lauk, dan jumlahnya.

Resources ALELEON Supercomputer

Sebelum menentukan alokasi resource job, user harus mengetahui spesifikasi hardware dari ALELEON Supercomputer yang dijelaskan pada tabel dibawah ini.

Partisi Hardware dan Resources ALELEON Supercomputer
Partisi Keterangan Jumlah Node Jumlah Core Fisik CPU

per node

Jumlah Core Thread CPU

per node

Kapasitas RAM

per node

Jumlah GPU

per node

epyc (DEFAULT) compute node CPU 3 64 128 250GB 0
gpu_ampere compute node GPU 1 64 128 125GB 2

Keterangan:

  • Partisi adalah pengelompokan jenis Compute Node. Partisi epyc khusus untuk komputasi CPU sedangkan Partisi gpu_ampere mempunyai GPU.
  • Secara default, komputasi pada ALELEON Supercomputer diarahkan ke Partisi epyc. Gunakan parameter SBATCH partition untuk menggunakan Partisi gpu_ampere (penjelasan di bawah).
  • Istilah node digunakan sebagai satuan jumlah server. Contoh, Partisi epyc mempunyai 3 node yang artinya mempunyai 3 unit server.

Core Thread CPU pada ALELEON Supercomputer

EFISON menggunakan CPU AMD EPYC 7702P pada Partisi epyc dan AMD Threadripper 3990X pada Partisi gpu_ampere. EFISON mengaktifkan SMT (Simultaneous Multi-Threading) pada semua CPU AMD di ALELEON Supercomputer sehingga masing-masing CPU mempunyai 2 core thread per 1 core fisik.

Secara default, penggunaan CPU pada ALELEON Supercomputer didasarkan pada core thread, termasuk penghitungan penggunaan komputasi CPU Core Hour user.

Parameter Resources SBATCH Esensial

Terdapat ratusan jenis parameter SBATCH pada SLURM. Admin EFISON merangkum parameter esensial yang digunakan pada ALELEON Supercomputer.

Parameter esensial SBATCH SLURM untuk menjalankan job di partisi default yaitu epyc
Parameter Penjelasan
#SBATCH --nodes=   
  • Alokasi jumlah node yang digunakan.
  • Contoh mengalokasikan 1 node:
#SBATCH --nodes=1
#SBATCH --ntasks=     
  • Alokasi jumlah core thread CPU yang digunakan.
  • Setiap node menampung 128 core thread CPU.
  • Contoh mengalokasikan 32 core thread CPU:
#SBATCH --ntasks=32
Cara memilih alokasi nodes dan ntasks lihat bagian:
#SBATCH --mem=
  • Alokasi memori RAM per node yang akan digunakan.
  • User bisa menetapkan satuan KB, MB, atau GB.
  • Contoh mengalokasikan memori 32GB:
#SBATCH --mem=32GB
#SBATCH --time=
  • Waktu maksimal yang dialokasikan untuk job.
  • Format waktu <walltime> yang digunakan:
HH:MM:SS. Contoh alokasi 10 jam: #SBATCH --time=10:00:00
D-HH:MM:SS. Contoh alokasi 2 hari: #SBATCH --time=2-00:00:00
ALELEON Supercomputer mengizinkan walltime maksimal 14-00:00:00
#SBATCH --output=
  • Merekap output terminal program kedalam text file.
  • User memberikan nama file (bebas, satu kata tanpa spasi) dan format file.
  • Format file dibebaskan, misalnya format .txt atau .out
  • Terdapat penamaan pattern dari SLURM yaitu %j yang merekap JOB ID.

Contoh pengisian output:

#SBATCH --output=result-%j.txt

Ketika job berjalan dengan ID 2500, maka file output bernama result-2500.txt.

#SBATCH --error=
  • Merekap output verbose program (contoh: error log ketika program gagal selesai).
  • Admin EFISON menyarankan user untuk selalu menggunakan parameter ini.
  • Berguna untuk melakukan troubleshooting ketika program user gagal berjalan.

Contoh pengisian error output:

#SBATCH --error=error-%j.txt

Pengiriman Status Jalannya Job via E-mail

SLURM pada ALELEON Supercomputer dapat mengirim notifikasi email kepada user untuk mengabarkan apabila job user sudah berjalan atau selesai. SLURM ALELEON Supercomputer menggunakan alamat email jojo@efisonlt.com untuk mengirim notifikasi email.

Parameter Penjelasan
#SBATCH --mail-user=
Email user untuk menerima pesan dari SLURM
#SBATCH --mail-type=begin             
Mengirim pesan email bahwa job user sudah berjalan.
#SBATCH --mail-type=end
  • Mengirim pesan email bahwa job user sudah selesai.
  • Email ini sekaligus berisikan cuplikan 20 baris terakhir dari file output dan error SLURM.

Menggunakan Compute Node GPU

Berikut adalah dua parameter tambahan untuk menggunakan compute node GPU ALELEON Supercomputer atau Partisi gpu_ampere:

Parameter SBATCH tambahan untuk menjalankan job di compute node GPU
Paramater Penjelasan
#SBATCH --partition=gpu_ampere
Menjalankan job pada partisi compute node GPU
#SBATCH --gres=gpu:<jumlah-GPU>
  • Jumlah GPU yang digunakan.
  • Contoh menggunakan 1 GPU:
$SBATCH --gres=gpu:1

Menggunakan Paralelisasi Threading OpenMP atau BLAS

Berikut adalah parameter untuk mengalokasikan threading per core para program paralel yang menggunakan metode OpenMP (OMP), hybrid MPI/OMP, atau terintegrasi dengan BLAS:

Parameter SBATCH SLURM untuk menjalankan threading CPU
Parameter Penjelasan
#SBATCH --cpus-per-task=                      
  • Jumlah paralelisasi threading per core yang digunakan.
  • Contoh mengalokasikan paralelisasi 8 threading per core:
#SBATCH --cpus-per-task=8

User yang menjalankan program hybrid MPI/OMP atau terintegrasi dengan BLAS dapat mempelajari bagaimana threading bekerja di AMD EPYC ALELEON Supercomputer supaya menghasilkan performa yang optimal.

Menentukan Alokasi Jumlah nodes, ntasks, dan mem

Seni berikutnya dalam menggunakan superkomputer adalah kebebasan user dalam menentukan jumlah core prosesor, RAM, dan node yang akan digunakan. Apakah program user cukup menggunakan 8 core, atau butuh 32 core atau sekalian 64 core? Apakah program user hanya dapat berjalan pada 1 node atau bisa lebih? Apakah RAM 16GB sudah cukup atau butuh lebih? Admin EFISON merangkum beberapa rule of thumb bagi user untuk mengalokasikan jumlah resources komputasi utama ini pada ALELEON Supercomputer.

|

Jumlah Core CPU: Kelipatan 4

Berdasarkan arsiktektur CPU AMD yang digunakan oleh ALELEON Supercomputer, user direkomendasikan untuk memilih jumlah core 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.
    • Apabila user yakin bahwa input yang dijalankan adalah skala besar maka gunakan jumlah core CPU yang besar seperti 32, 64, 128, atau diatasnya.
  • Apabila menjalankan program GPU: kebanyakan membutuhkan jumlah core kecil (dibawah 16) 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.

|

Menentukan Jumlah Node: Program MPI versus 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 pemrograman 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 sehingga hanya dapat berjalan pada 1 node.

|

Program Non-MPI: Hanya Dapat Menggunakan 1 Node

Program non-MPI hanya dapat berjalan pada 1 node sehingga menggunakan alokasi ntasks antara 1 hingga 128 core thread CPU.

#SBATCH --nodes=1
#SBATCH --ntasks=   #antara 1 - 128

User perlu mengetahui:

  • Program komputasi non-MPI dapat berjalan secara multi-core (lebih dari 1 core) atau hanya bisa berjalan dengan 1 core (ntasks=1) 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 ditulis dengan 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 pengganti.

Untuk program komputasi non-MPI yang memanfaatkan paralelisasi threading OpenMP dan membutuhkan parameter OMP_NUM_THREAD, gunakan kombinasi parameter berikut:

#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=   #antara 1 - 128

export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK

|

Program MPI: Menggunakan 1 Node atau Lebih

Ketika menjalankan program MPI di ALELEON Supercomputer, user dapat mengalokasikan resources:

  • Tetap menggunakan 1 node / 128 core.
  • Menggunakan lebih dari 1 node / lebih dari 128 core.

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.

|

Pembagian Proses MPI Pada Core CPU ALELEON Supercomputer

Terdapat tiga aturan pada perintah MPI (mpirun atau mpiexec) yang diberlakukan pada ALELEON Supercomputer yaitu:

  • Satu proses MPI mewakili satu core thread CPU atau satu ntasks. Artinya, jumlah proses MPI sama dengan jumlah ntasks.
  • Berlaku aturan kelipatan 4 pada jumlah ntasks.
  • Secara standar, total proses MPI akan selalu mengisi 2 core thread per core fisik. Artinya:
    • Contoh 32 proses MPI berjalan pada 16 core fisik / 32 core thread.
    • Contoh lain 128 proses MPI berjalan pada 64 core fisik / 128 core thread.

|

Efisiensi Menjalankan Program MPI dan Penggunaan Multi-Node di ALELEON Supercomputer

Terdapat hal teknis yang harus diketahui user untuk menjalankan program MPI dengan efisiensi performa yang baik pada sistem superkomputer apapun termasuk ALELEON Supercomputer seperti:

  • Efisiensi core thread versus core fisik pada program MPI.
  • Affinity mpirun (binding by core / thread / socket / dll).
  • Bagaimana cara menjalankan MPI pada multi-node dengan efisien.

Contoh SLURM Script

EFISON merangkum contoh SLURM script untuk penggunaan berbagai skenario komputasi pada laman Contoh SLURM Script.

Contoh SLURM Script Software Spesifik

EFISON juga merangkum contoh SLURM script untuk software komputasi saintifik pada laman Software di HPC Aleleon Mk.II.