Submit Script ALELEON Supercomputer: Perbedaan antara revisi

Dari ALELEON by EFISON
(→‎Struktur Submit Script: menambah contoh script)
 
(44 revisi perantara oleh pengguna yang sama tidak ditampilkan)
Baris 1: Baris 1:
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. 
Halaman ini menjelaskan panduan memahami, membuat, dan mengisi '''SLURM Submit Script''' (atau disingkat Submit Script) yang merupakan 'formulir' untuk menjalankan komputasi ke Compute Node menggunakan sistem manajemen SLURM. 
=='''Resources ALELEON Supercomputer'''==
Sebelum menentukan alokasi resource job, user harus mengetahui spesifikasi hardware dari ALELEON Supercomputer yang dijelaskan pada tabel dibawah ini.
{| class="wikitable"
|+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.
=='''Struktur Submit Script'''==
* '''Secara default, komputasi pada ALELEON Supercomputer diarahkan ke Partisi epyc.''' Gunakan parameter SBATCH partition untuk menggunakan Partisi gpu_ampere (penjelasan di bawah).
Submit Script mempunyai 4 bagian utama:


* '''Istilah node digunakan sebagai satuan jumlah server'''. Contoh, Partisi epyc mempunyai 3 node yang artinya mempunyai 3 unit server.
#Header '''#!/bin/bash''' (karena script ini ditulis dengan bahasa bash)
#'''Parameter SBATCH''' untuk mengalokasikan resources job seperti CPU, RAM, GPU, time, dll.
#*''Pada penggunaan superkomputer, user menentukan sendiri jumlah alokasi komputasi (CPU, RAM, GPU, time limit) yang akan dipakai untuk menjalankan komputasi asalkan tidak melebihi kapasitas Compute Node ALELEON Supercomputer.''
# Apabila membutuhkan, memuat modul software tertentu untuk menjalankan komputasi user dengan '''[https://wiki.efisonlt.com/wiki/Module_Environment#Module_Environment_di_SLURM_Submit_Script Module Environment]'''
# Alur perintah menjalankan program user.


== '''Core Thread CPU pada ALELEON Supercomputer''' ==
[[Berkas:Slurmsubmitscript.png|al=|nir|jmpl|''Struktur dan contoh SLURM Submit Script'']]Berikut adalah beberapa contoh nyata Submit Script:  
EFISON menggunakan CPU [https://www.amd.com/en/products/cpu/amd-epyc-7702p '''AMD EPYC 7702P'''] pada Partisi epyc dan [https://www.amd.com/en/products/cpu/amd-ryzen-threadripper-3990x '''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 [[Core Hour|penghitungan penggunaan komputasi CPU Core Hour user]]'''.
* Template Submit Script untuk masing-masing software komputasi tersedia di laman [[Daftar Software Komputasi dan Tutorial Penggunaan|'''Daftar Software Komputasi dan Tutorial Penggunaan''']]


=='''Parameter Resources SBATCH Esensial'''==
{| class="wikitable mw-collapsible mw-collapsed"
Terdapat ratusan jenis parameter SBATCH pada SLURM. Admin EFISON merangkum parameter esensial yang digunakan pada ALELEON Supercomputer.
!Contoh Submit Script menjalankan software R
{| class="wikitable"
|+Parameter esensial SBATCH SLURM untuk menjalankan job di partisi default yaitu epyc
!Parameter
!Penjelasan
|-
|-
| rowspan="2" |
|<syntaxhighlight lang="bash" line="1">
'''#SBATCH --nodes=''' 
#!/bin/bash
|
* Alokasi jumlah node yang digunakan.


* Contoh mengalokasikan 1 node:
# -------------------------------------------------------------
|-
# | Template SLURM Submit Script
|'''#SBATCH --nodes=1'''
# | Software        : R
|-
# | Versi          : 4.3.0
| rowspan="2" |
# |
'''#SBATCH --ntasks='''   
# | NOTES:
|
# | 1. Isi bagian yang ditandai 4 garing (////).
* Alokasi jumlah core thread CPU yang digunakan.
# | 2. Template ini bersifat referensi.
* Setiap node menampung 128 core thread CPU.
# |   User dapat mengubah bagian yang sekiranya perlu diubah.
# -------------------------------------------------------------


* Contoh mengalokasikan 32 core thread CPU:
# --------------------------------------------------
|-
# Alokasi komputasi, modul software, dan file input
|'''<nowiki>#</nowiki>SBATCH --ntasks=32'''
# --------------------------------------------------
|-
| colspan="2" |Cara memilih alokasi nodes dan ntasks lihat bagian:
|-
| rowspan="2" |
'''#SBATCH --mem='''
|
* Alokasi memori RAM per node yang akan digunakan.


* User bisa menetapkan satuan KB, MB, atau GB.
# Alokasi jumlah core thread CPU
#SBATCH --ntasks=32


* Contoh mengalokasikan memori 32GB:
# Alokasi jumlah memori RAM (satuan GB)
|-
#SBATCH --mem=128GB
|'''<nowiki>#</nowiki>SBATCH --mem=32GB'''
|-
| rowspan="4" |
'''#SBATCH --time'''=
|
* Waktu maksimal yang dialokasikan untuk job.


* Format waktu <walltime> yang digunakan:
# Alokasi limit waktu menjalankan job.
|-
# Format HH:MM:SS atau D-HH:MM:SS
|'''HH:MM:SS'''. Contoh alokasi 10 jam: '''#SBATCH --time=10:00:00'''
#SBATCH --time=2-00: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
|-
| rowspan="2" |
'''#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:
# Definisi file untuk menampung output terminal
|-
#SBATCH --output=result-%j.txt
|'''<nowiki>#</nowiki>SBATCH --output=result-%j.txt'''
Ketika job berjalan dengan '''ID 2500''', maka file output bernama '''result-2500.txt'''.
|-
| rowspan="2" |
'''#SBATCH --error='''
|
* Merekap output verbose program (contoh: error log ketika program gagal selesai).


* Admin EFISON menyarankan user untuk selalu menggunakan parameter ini.
# Definisi file untuk menampung output error log   
#SBATCH --error=error-%j.txt


* Berguna untuk melakukan troubleshooting ketika program user gagal berjalan.
# Nama input file R dengan format file-nya
INPUT_FILE='dataumat.R'


Contoh pengisian error output:
# Memuat modul software R yang akan digunakan user
|-
module load R/4.3.0-GCC11.3-MKL
|'''<nowiki>#</nowiki>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.
# RUN SCRIPT
{| class="wikitable"
# -------------------------------------------------
!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.
# Perintah menjakankan R
Rscript ${INPUT_FILE}
</syntaxhighlight>
|}
|}
 
{| class="wikitable mw-collapsible mw-collapsed"
=== '''Menggunakan Compute Node GPU''' ===
!Contoh Submit Script menjalankan software LAMMPS
Berikut adalah dua parameter tambahan untuk menggunakan compute node GPU ALELEON Supercomputer atau Partisi gpu_ampere: 
{| class="wikitable"
|+Parameter SBATCH tambahan untuk menjalankan job di compute node GPU
!Paramater
!Penjelasan
|-
|
'''#SBATCH --partition=gpu_ampere'''
|Menjalankan job pada partisi compute node GPU
|-
|-
| rowspan="2" |
|<syntaxhighlight lang="bash" line="1">
'''#SBATCH --gres=gpu:<jumlah-GPU>'''
#!/bin/bash
|
 
* Jumlah GPU yang digunakan.
# ------------------------------------------------------------------------
# | Template SLURM Submit Script
# | Software        : LAMMPS
# | Versi          : 2022.06.23u4
# |
# | NOTES:  
# | 1. Isi bagian yang ditandai 4 garing (////).
# | 2. Template ini adalah referensi - user dapat mengubah bagian yang  
# |    sekiranya perlu diubah.
# ------------------------------------------------------------------------


* Contoh menggunakan 1 GPU:
# --------------------------------------------------
|-
# Alokasi komputasi, modul software, dan file input
|'''$SBATCH --gres=gpu:1'''
# --------------------------------------------------
|}


=== '''Menggunakan Paralelisasi Threading OpenMP atau BLAS''' ===
# Partisi compute node GPU
Berikut adalah parameter untuk mengalokasikan threading per core para program paralel yang menggunakan metode OpenMP (OMP), hybrid MPI/OMP, atau terintegrasi dengan BLAS:
#SBATCH --partition=ampere
{| class="wikitable"
|+Parameter SBATCH SLURM untuk menjalankan threading CPU
!Parameter
!Penjelasan
|-
| rowspan="2" |
'''#SBATCH --cpus-per-task='''                     
|
* Jumlah paralelisasi threading per core yang digunakan.


* Contoh mengalokasikan paralelisasi 8 threading per core:
# Alokasi jumlah GPU
|-
#SBATCH --gpus=1
|'''<nowiki>#</nowiki>SBATCH --cpus-per-task=8'''
|}
User yang menjalankan program hybrid MPI/OMP atau terintegrasi dengan BLAS dapat mempelajari bagaimana [https://wiki.efisonlt.com/wiki/Software_HPC_AMD#Threading_di_AMD_Zen2_dan_Contoh_SLURM_Script '''threading bekerja di AMD EPYC ALELEON Supercomputer'''] supaya menghasilkan performa yang optimal.


== '''Menentukan Alokasi Jumlah nodes, ntasks, dan mem'''  ==
# Alokasi jumlah core thread CPU
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.
#SBATCH --ntasks=16


|
# Rekomendasi 2 thread OMP secara umum
#SBATCH --cpus-per-task=2


=== Jumlah Core CPU: Kelipatan 4 ===
# Alokasi jumlah memori RAM (satuan GB)
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.
#SBATCH --mem=64GB


|
# Alokasi limit waktu menjalankan job
#SBATCH --time=10:00:00


=== Semakin Besar Jumlah Core CPU = Komputasi Semakin Cepat? ===
# Definisi file untuk menampung output terminal
Bisa iya bisa tidak. Besar jumlah core CPU yang dibutuhkan bergantung pada:
#SBATCH --output=result-%j.txt


* '''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.
# Definisi file untuk menampung output error log   
** Input komputasi skala kecil cukup membutuhkan jumlah core kecil (rekomendasi dibawah 16) dan bisa jadi lambat apabila dijalankan dengan jumlah core besar.
#SBATCH --error=error-%j.txt 
** 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.


|
# Nama input file LAMMPS dengan format file-nya
INPUT_FILE='zobarne.lammps'


=== Memperkirakan Kapasitas RAM yang Digunakan ===
# Memuat modul software LAMMPS versi GPU
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:
module load lammps/2022.06.23u4-GCC11.3-AOCL4.0-CUDA12.1


* ntasks=8, alokasikan mem 8GB.
# -------------------------------------------------
* ntasks=32, alokasikan mem 32GB.
# RUN SCRIPT
# -------------------------------------------------


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.
# Export threading OMP
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK


|
# Perintah menjalankan LAMMPS
mpirun --mca pml ucx --mca osc ucx --np $SLURM_NTASKS lmp -sf gpu -pk gpu $SLURM_GPUS -in $INPUT_FILE
</syntaxhighlight>
|}


=== Menentukan Jumlah Node: Program MPI versus Non-MPI ===
== '''Parameter SBATCH esensial'''  ==
Terdapat dua kategori besar pada program komputasi yang dijalankan pada superkomputer yaitu program MPI dan non-MPI:
Parameter SBATCH berfungsi untuk mengatur alokasi komputasi (CPU, RAM, GPU, time limit) dan output program. SLURM mempunyai ratusan opsi untuk parameter SBATCH dimana pada tutorial ini kami memberikan daftar SBATCH yang esensial untuk menjalankan komputasi di ALELEON Supercomputer.


* 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.
=== Format Penulisan SBATCH ===
* Program non-MPI adalah program yang tidak ditulis dengan pemodelan MPI sehingga '''hanya dapat berjalan pada 1 node.'''
SBATCH ditulis dengan format <code>'''#SBATCH --<nama-parameter>=<nilai>'''</code> sesuai contoh berikut:  <syntaxhighlight lang="bash">
# --- Contoh penulisan SBATCH yang benar
#SBATCH --ntasks=32
#SBATCH --mem=64GB
#SBATCH --time=01:00:00
#SBATCH --output=result-%j.txt
#SBATCH --error=error-%j.txt


|
# --- Contoh penulisan SBATCH yang salah
#SBATCH --ntasks = 32
#SBATCH --mem= 64GB
#SBATCH --mem = 64 GB
</syntaxhighlight>
=== #SBATCH --partition ===
Menentukan jenis partisi (Compute Node) untuk menjalankan job komputasi user. ALELEON Supercomputer mempunyai 2 partisi Compute Node:
{| class="wikitable"
!Partisi Compute Node
!Menulis SBATCH
|-
|'''epyc''' (Compute Node CPU)
|Merupakan partisi default


=== Program Non-MPI: Hanya Dapat Menggunakan 1 Node ===
* user tidak perlu menulis SBATCH parameter untuk epyc
Program non-MPI hanya dapat berjalan pada 1 node sehingga menggunakan alokasi ntasks antara '''1 hingga 128 core thread CPU'''.
|-
'''#SBATCH --nodes=1'''
|'''ampere''' (Compute Node GPU)
#SBATCH --ntasks=   #antara 1 - 128
|<code>#SBATCH --partition=ampere</code>
'''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.
=== #SBATCH --ntasks, --mem, dan --gpus ===
* 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.
ntasks, mem, dan gpus adalah parameter SBATCH utama untuk menentukan alokasi komputasi.  
* 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:
* '''ntasks''' -> alokasi jumlah '''core CPU.''' ALELEON Supercomputer mengaktifkan ''SMT (Simultaneous Multithreading)'' pada semua CPU sehingga ntasks mendefinisikan jumlah core thread CPU.
'''#SBATCH --nodes=1
* '''mem''' -> alokasi jumlah '''memori RAM'''. Ditulis dengan satuan memori GB (Gigabyte).
#SBATCH --ntasks=1'''
* '''gpus''' -> alokasi jumlah '''GPU'''.
#SBATCH --cpus-per-task=  #antara 1 - 128
export OMP_NUM_THREADS='''$SLURM_CPUS_PER_TASK'''
|


=== Program MPI: Menggunakan 1 Node atau Lebih ===
Berikut adalah panduan nilai maksimal masing-masing parameter untuk beberapa skenario penggunaan.
Ketika menjalankan program MPI di ALELEON Supercomputer, user dapat mengalokasikan resources:
{| class="wikitable"
 
! rowspan="2" |Skenario Penggunaan
* Tetap menggunakan 1 node / 128 core.
! colspan="3" |Nilai maksimal
* Menggunakan lebih dari 1 node / lebih dari 128 core.
|-
!ntasks (CPU)
!mem (RAM)
!gpus (GPU)
|-
|Akumulasi ''concurrent'' job fair policy usage<sup>''1''</sup>
|128
|128GB
|2
|-
|Job non-MPI di epyc (Compute Node CPU)''<sup>2</sup>''
|128
|240GB
|0
|-
|Job MPI di epyc (Compute Node CPU)<sup>''3''</sup>
|384
|240GB
|0
|-
|Semua jenis job di high-mem node epyc''<sup>4</sup>''
|128
|500GB
|0
|-
|Semua jenis job di ampere (Compute Node GPU)''<sup>5</sup>''
|32
|120GB
|2
|-
| colspan="4" |''Tim admin dapat membantu user untuk membedakan program MPI dan non-MPI.''
* ''Daftar [[Daftar Software Komputasi dan Tutorial Penggunaan|'''software komputasi ALELEON''']] memberikan indikator program MPI atau non-MPI.''
* ''Dapat pula menghubungi admin untuk diskusi melalui email '''support@efisonlt.com'''.''
|}
'''''Keterangan:'''''
# Limitasi '''fair policy usage''' untuk menjaga kualitas layanan ALELEON Supercomputer.
#* User dapat mengajukan permintaan membuka limitasi apabila job membutuhkan alokasi lebih.
#* Info lebih detail lihat laman [[Limitasi Fair Usage ALELEON Supercomputer|'''Limitasi Fair Usage ALELEON Supercomputer''']]
# Program non-MPI hanya dapat berjalan satu node (maks 128 core di epyc dan 32 core di ampere).
# Program MPI dapat berjalan ''multi-node (parallel computing)'' pada Partisi epyc yaitu lebih dari 128 core
#* Pada jumlah ntasks >128, SLURM otomatis menjalankan job secara multi-node.
#* Dalam kaitan ini, parameter mem adalah alokasi memori RAM per-node.
#* Info lebih detail lihat laman [[MPI ALELEON Supercomputer|'''MPI ALELEON Supercomputer''']].
#Partisi epyc mempunyai satu node dengan jumlah memori 500GB yaitu epyc001.
##Tambahkan parameter '''<code>#SBATCH --nodelist=epyc001</code>'''
#Jangan lupa untuk menggunakan compute node GPU, tambahkan parameter '''<code>#SBATCH --partition=ampere</code>'''
=== #SBATCH --time ===
Alokasi waktu maksimal untuk menjalankan job. Ditulis dengan format HH:MM:SS atau D-HH:MM:SS. ALELEON Supercomputer mengizinkan time maksimal 3 hari per job (72:00:00 atau 3-00:00:00).  


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 [https://wiki.efisonlt.com/wiki/Katalog_Software_ALELEON_Supercomputer#Daftar_Software_Komputasi_.28Global.29 '''tabel daftar software komputasi ALELEON Supercomputer'''].
* SLURM akan menghentikan job apabila berjalan melebihi time yang dialokasikan,
* SLURM juga dapat menghitung penggunaan Core Hour maksimal job berdasarkan time dan ntasks yang dialokasikan user. SLURM akan menahan job (status PENDING) apabila ntasks * time yang dialokasikan lebih besar dari sisa Core Hour user.  


|
=== #SBATCH --output ===
SBATCH output membuat file untuk merekap output terminal jalannya program. User mendefinisikan nama dan format file.
* Terdapat pola penamaan dari SLURM yaitu %j untuk merekap nomor Job ID.
* Format file dibebaskan (biasanya menggunakan .txt atau .out).
Kebanyakan template submit script pada wiki ini memberikan contoh penamaan <code>#SBATCH --output=result-%j.txt</code> dimana ketika job berjalan (contoh) dengan job-ID 670, maka nama file output menjadi '''result-670.txt'''.


=== Pembagian Proses MPI Pada Core CPU ALELEON Supercomputer ===
=== #SBATCH --error ===
Terdapat tiga aturan pada perintah MPI (mpirun atau mpiexec) yang diberlakukan pada ALELEON Supercomputer yaitu:
SBATCH error membuat file untuk merekap output verbose program (status jalannya program dan error log ketika program gagal berjalan). File SBATCH error bermanfaat untuk melakukan ''troubleshooting'' ketika program gagal berjalan. Apabila membutuhkan support, admin biasanya akan meminta file output dari SBATCH error ini. Pola penamaan mengikuti SBATCH output di atas.


* Satu proses MPI mewakili satu core thread CPU atau satu ntasks. Artinya, '''jumlah proses MPI sama dengan jumlah ntasks.'''
=== '''SBATCH untuk notifikasi email SLURM''' ===
* Berlaku aturan kelipatan 4 pada jumlah ntasks.
SLURM ALELEON Supercomputer dapat mengirim notifikasi email kepada user dengan nama "Jojo" untuk mengabarkan status berjalannya job komputasi user. Silahkan tambahan SBATCH berikut pada submit script apabila user ingin menerima notifikasi email dari SLURM:  <syntaxhighlight lang="bash">
* Secara standar, total proses MPI akan selalu '''mengisi 2 core thread per core fisik'''. Artinya:
#SBATCH --mail-user=<alamat-email-user>
** Contoh '''32 proses MPI''' berjalan pada '''16 core fisik / 32 core thread.'''
#SBATCH --mail-type=BEGIN,END,FAIL
** Contoh lain '''128 proses MPI''' berjalan pada '''64 core fisik / 128 core thread.'''
</syntaxhighlight>SBATCH mail-type mengatur konten email notifikasi SLURM dengan pilihan opsi yang sekiranya berguna untuk user:


|
* BEGIN -> notifikasi job sudah mulai
* END -> notifikasi job sudah selesai beserta cuplikan 20 baris terakhir dari file SBATCH output dan error.
* FAIL -> notifikasi apabila job gagal berjalan atau berhenti tidak sewajarnya.
* TIME_LIMIT_50 -> job telah berjalan dengan durasi waktu 50% time limit.
* TIME_LIMIT_80 -> job telah berjalan dengan durasi waktu 80% time limit.


=== Efisiensi Menjalankan Program MPI dan Penggunaan Multi-Node di ALELEON Supercomputer ===
=== SBATCH lainnya untuk job MPI ===
Terdapat hal teknis yang harus diketahui user untuk menjalankan program MPI dengan efisiensi performa yang baik pada sistem superkomputer apapun termasuk ALELEON Supercomputer seperti:
Dalam menjalankan job MPI, user dapat menggunakan parameter SBATCH yang lebih kompleks seperti <code>nodes</code> (alokasi jumlah node), <code>mem-per-cpu</code> (alokasi jumlah RAM per core CPU), <code>mem-per-gpu</code> (alokasi jumlah RAM per GPU). <code>cpus-per-task</code> (alokasi jumlah core per proses MPI untuk skenario hybrid MPI / OMP job), dan lain-lainnya. Info lebih detail lihat laman [[MPI ALELEON Supercomputer|'''MPI ALELEON Supercomputer''']]


* Efisiensi core thread versus core fisik pada program MPI.
== '''Memuat Software dengan module load''' ==
* Affinity mpirun (binding by core / thread / socket / dll).
Perintah <code>module load</code> (bagian dari [[Module Environment|'''Module Environment''']] untuk memuat modul software) pada Submit Script berfungsi supaya Compute Node dapat menjalankan software yang dibutuhkan job user. <syntaxhighlight lang="bash">
* Bagaimana cara menjalankan MPI pada multi-node dengan efisien.
module load <nama-modul-software>
</syntaxhighlight>'''''Keterangan:'''''


== '''Contoh SLURM Script''' ==
* Tulis <code>module load</code> sebelum menulis script alur jalannya program.
EFISON merangkum contoh SLURM script untuk penggunaan berbagai skenario komputasi pada laman '''[[Contoh SLURM Script]]'''.


=='''Contoh SLURM Script Software Spesifik'''==
* Template Submit Script pada masing-masing tutorial software komputasi di laman [[Daftar Software Komputasi dan Tutorial Penggunaan|'''Daftar Software Komputasi dan Tutorial Penggunaan''']] dapat memandu memilih modul software yang tepat.
EFISON juga merangkum contoh SLURM script untuk software komputasi saintifik pada laman '''[https://wiki.efisonlt.com/wiki/Software_di_HPC_Aleleon_Mk.II#Daftar_Software_Komputasi Software di HPC Aleleon Mk.II]'''.
* Daftar modul software yang lengkap dirangkum pada laman [[Katalog Software ALELEON Supercomputer|'''Katalog Software ALELEON Supercomputer''']].

Revisi terkini sejak 19 Oktober 2023 09.31

Halaman ini menjelaskan panduan memahami, membuat, dan mengisi SLURM Submit Script (atau disingkat Submit Script) yang merupakan 'formulir' untuk menjalankan komputasi ke Compute Node menggunakan sistem manajemen SLURM.

Struktur Submit Script

Submit Script mempunyai 4 bagian utama:

  1. Header #!/bin/bash (karena script ini ditulis dengan bahasa bash)
  2. Parameter SBATCH untuk mengalokasikan resources job seperti CPU, RAM, GPU, time, dll.
    • Pada penggunaan superkomputer, user menentukan sendiri jumlah alokasi komputasi (CPU, RAM, GPU, time limit) yang akan dipakai untuk menjalankan komputasi asalkan tidak melebihi kapasitas Compute Node ALELEON Supercomputer.
  3. Apabila membutuhkan, memuat modul software tertentu untuk menjalankan komputasi user dengan Module Environment
  4. Alur perintah menjalankan program user.
Struktur dan contoh SLURM Submit Script

Berikut adalah beberapa contoh nyata Submit Script:

Contoh Submit Script menjalankan software R
#!/bin/bash

# -------------------------------------------------------------
# | Template SLURM Submit Script
# | Software        : R
# | Versi           : 4.3.0
# |
# | NOTES: 
# | 1. Isi bagian yang ditandai 4 garing (////).
# | 2. Template ini bersifat referensi.
# |    User dapat mengubah bagian yang sekiranya perlu diubah.
# -------------------------------------------------------------

# --------------------------------------------------
# Alokasi komputasi, modul software, dan file input
# --------------------------------------------------

# Alokasi jumlah core thread CPU
#SBATCH --ntasks=32

# Alokasi jumlah memori RAM (satuan GB)
#SBATCH --mem=128GB

# Alokasi limit waktu menjalankan job. 
# Format HH:MM:SS atau D-HH:MM:SS
#SBATCH --time=2-00:00:00

# Definisi file untuk menampung output terminal
#SBATCH --output=result-%j.txt

# Definisi file untuk menampung output error log    
#SBATCH --error=error-%j.txt 

# Nama input file R dengan format file-nya
INPUT_FILE='dataumat.R'

# Memuat modul software R yang akan digunakan user
module load R/4.3.0-GCC11.3-MKL

# -------------------------------------------------
# RUN SCRIPT
# -------------------------------------------------

# Perintah menjakankan R
Rscript ${INPUT_FILE}
Contoh Submit Script menjalankan software LAMMPS
#!/bin/bash
  
# ------------------------------------------------------------------------
# | Template SLURM Submit Script
# | Software        : LAMMPS
# | Versi           : 2022.06.23u4
# |
# | NOTES: 
# | 1. Isi bagian yang ditandai 4 garing (////).
# | 2. Template ini adalah referensi - user dapat mengubah bagian yang 
# |    sekiranya perlu diubah.
# ------------------------------------------------------------------------

# --------------------------------------------------
# Alokasi komputasi, modul software, dan file input
# --------------------------------------------------

# Partisi compute node GPU
#SBATCH --partition=ampere

# Alokasi jumlah GPU 
#SBATCH --gpus=1

# Alokasi jumlah core thread CPU
#SBATCH --ntasks=16

# Rekomendasi 2 thread OMP secara umum
#SBATCH --cpus-per-task=2

# Alokasi jumlah memori RAM (satuan GB)
#SBATCH --mem=64GB

# Alokasi limit waktu menjalankan job 
#SBATCH --time=10:00:00

# Definisi file untuk menampung output terminal
#SBATCH --output=result-%j.txt

# Definisi file untuk menampung output error log    
#SBATCH --error=error-%j.txt  

# Nama input file LAMMPS dengan format file-nya
INPUT_FILE='zobarne.lammps' 

# Memuat modul software LAMMPS versi GPU
module load lammps/2022.06.23u4-GCC11.3-AOCL4.0-CUDA12.1

# -------------------------------------------------
# RUN SCRIPT
# -------------------------------------------------

# Export threading OMP 
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK 

# Perintah menjalankan LAMMPS
mpirun --mca pml ucx --mca osc ucx --np $SLURM_NTASKS lmp -sf gpu -pk gpu $SLURM_GPUS -in $INPUT_FILE

Parameter SBATCH esensial

Parameter SBATCH berfungsi untuk mengatur alokasi komputasi (CPU, RAM, GPU, time limit) dan output program. SLURM mempunyai ratusan opsi untuk parameter SBATCH dimana pada tutorial ini kami memberikan daftar SBATCH yang esensial untuk menjalankan komputasi di ALELEON Supercomputer.

Format Penulisan SBATCH

SBATCH ditulis dengan format #SBATCH --<nama-parameter>=<nilai> sesuai contoh berikut:

# --- Contoh penulisan SBATCH yang benar
#SBATCH --ntasks=32
#SBATCH --mem=64GB
#SBATCH --time=01:00:00
#SBATCH --output=result-%j.txt
#SBATCH --error=error-%j.txt

# --- Contoh penulisan SBATCH yang salah
#SBATCH --ntasks = 32
#SBATCH --mem= 64GB 
#SBATCH --mem = 64 GB

#SBATCH --partition

Menentukan jenis partisi (Compute Node) untuk menjalankan job komputasi user. ALELEON Supercomputer mempunyai 2 partisi Compute Node:

Partisi Compute Node Menulis SBATCH
epyc (Compute Node CPU) Merupakan partisi default
  • user tidak perlu menulis SBATCH parameter untuk epyc
ampere (Compute Node GPU) #SBATCH --partition=ampere

#SBATCH --ntasks, --mem, dan --gpus

ntasks, mem, dan gpus adalah parameter SBATCH utama untuk menentukan alokasi komputasi.

  • ntasks -> alokasi jumlah core CPU. ALELEON Supercomputer mengaktifkan SMT (Simultaneous Multithreading) pada semua CPU sehingga ntasks mendefinisikan jumlah core thread CPU.
  • mem -> alokasi jumlah memori RAM. Ditulis dengan satuan memori GB (Gigabyte).
  • gpus -> alokasi jumlah GPU.

Berikut adalah panduan nilai maksimal masing-masing parameter untuk beberapa skenario penggunaan.

Skenario Penggunaan Nilai maksimal
ntasks (CPU) mem (RAM) gpus (GPU)
Akumulasi concurrent job fair policy usage1 128 128GB 2
Job non-MPI di epyc (Compute Node CPU)2 128 240GB 0
Job MPI di epyc (Compute Node CPU)3 384 240GB 0
Semua jenis job di high-mem node epyc4 128 500GB 0
Semua jenis job di ampere (Compute Node GPU)5 32 120GB 2
Tim admin dapat membantu user untuk membedakan program MPI dan non-MPI.
  • Daftar software komputasi ALELEON memberikan indikator program MPI atau non-MPI.
  • Dapat pula menghubungi admin untuk diskusi melalui email support@efisonlt.com.

Keterangan:

  1. Limitasi fair policy usage untuk menjaga kualitas layanan ALELEON Supercomputer.
  2. Program non-MPI hanya dapat berjalan satu node (maks 128 core di epyc dan 32 core di ampere).
  3. Program MPI dapat berjalan multi-node (parallel computing) pada Partisi epyc yaitu lebih dari 128 core
    • Pada jumlah ntasks >128, SLURM otomatis menjalankan job secara multi-node.
    • Dalam kaitan ini, parameter mem adalah alokasi memori RAM per-node.
    • Info lebih detail lihat laman MPI ALELEON Supercomputer.
  4. Partisi epyc mempunyai satu node dengan jumlah memori 500GB yaitu epyc001.
    1. Tambahkan parameter #SBATCH --nodelist=epyc001
  5. Jangan lupa untuk menggunakan compute node GPU, tambahkan parameter #SBATCH --partition=ampere

#SBATCH --time

Alokasi waktu maksimal untuk menjalankan job. Ditulis dengan format HH:MM:SS atau D-HH:MM:SS. ALELEON Supercomputer mengizinkan time maksimal 3 hari per job (72:00:00 atau 3-00:00:00).

  • SLURM akan menghentikan job apabila berjalan melebihi time yang dialokasikan,
  • SLURM juga dapat menghitung penggunaan Core Hour maksimal job berdasarkan time dan ntasks yang dialokasikan user. SLURM akan menahan job (status PENDING) apabila ntasks * time yang dialokasikan lebih besar dari sisa Core Hour user.

#SBATCH --output

SBATCH output membuat file untuk merekap output terminal jalannya program. User mendefinisikan nama dan format file.

  • Terdapat pola penamaan dari SLURM yaitu %j untuk merekap nomor Job ID.
  • Format file dibebaskan (biasanya menggunakan .txt atau .out).

Kebanyakan template submit script pada wiki ini memberikan contoh penamaan #SBATCH --output=result-%j.txt dimana ketika job berjalan (contoh) dengan job-ID 670, maka nama file output menjadi result-670.txt.

#SBATCH --error

SBATCH error membuat file untuk merekap output verbose program (status jalannya program dan error log ketika program gagal berjalan). File SBATCH error bermanfaat untuk melakukan troubleshooting ketika program gagal berjalan. Apabila membutuhkan support, admin biasanya akan meminta file output dari SBATCH error ini. Pola penamaan mengikuti SBATCH output di atas.

SBATCH untuk notifikasi email SLURM

SLURM ALELEON Supercomputer dapat mengirim notifikasi email kepada user dengan nama "Jojo" untuk mengabarkan status berjalannya job komputasi user. Silahkan tambahan SBATCH berikut pada submit script apabila user ingin menerima notifikasi email dari SLURM:

#SBATCH --mail-user=<alamat-email-user> 
#SBATCH --mail-type=BEGIN,END,FAIL

SBATCH mail-type mengatur konten email notifikasi SLURM dengan pilihan opsi yang sekiranya berguna untuk user:

  • BEGIN -> notifikasi job sudah mulai
  • END -> notifikasi job sudah selesai beserta cuplikan 20 baris terakhir dari file SBATCH output dan error.
  • FAIL -> notifikasi apabila job gagal berjalan atau berhenti tidak sewajarnya.
  • TIME_LIMIT_50 -> job telah berjalan dengan durasi waktu 50% time limit.
  • TIME_LIMIT_80 -> job telah berjalan dengan durasi waktu 80% time limit.

SBATCH lainnya untuk job MPI

Dalam menjalankan job MPI, user dapat menggunakan parameter SBATCH yang lebih kompleks seperti nodes (alokasi jumlah node), mem-per-cpu (alokasi jumlah RAM per core CPU), mem-per-gpu (alokasi jumlah RAM per GPU). cpus-per-task (alokasi jumlah core per proses MPI untuk skenario hybrid MPI / OMP job), dan lain-lainnya. Info lebih detail lihat laman MPI ALELEON Supercomputer

Memuat Software dengan module load

Perintah module load (bagian dari Module Environment untuk memuat modul software) pada Submit Script berfungsi supaya Compute Node dapat menjalankan software yang dibutuhkan job user.

module load <nama-modul-software>

Keterangan:

  • Tulis module load sebelum menulis script alur jalannya program.