Submit Script ALELEON Supercomputer: Perbedaan antara revisi

Dari ALELEON by EFISON
(Menambah info limitasi fair usage)
(→‎Struktur Submit Script: menambah contoh script)
 
(5 revisi perantara oleh pengguna yang sama tidak ditampilkan)
Baris 1: Baris 1:
{| class="wikitable"
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.   
|+
|'''Halaman ini menjadi suplemen untuk konten:'''
* [https://wiki.efisonlt.com/wiki/Menggunakan_ALELEON_Supercomputer_via_Terminal#3_-_Menjalankan_Komputasi_ke_Compute_Node_via_SLURM '''Penggunaan terminal - menjalankan komputasi ke Compute Node via SLURM''']
* [https://wiki.efisonlt.com/wiki/Menggunakan_ALELEON_Supercomputer_via_EFIRO#3_-_Menjalankan_Komputasi_ke_Compute_Node_via_Job_Composer '''Penggunaan EFIRO - menjalankan komputasi ke Compute Node via Job Composer''']
|}
Halaman ini menjelaskan panduan memahami, membuat, dan mengisi SLURM Submit Script (atau disingkat Submit Script) untuk melakukan job submission ke Compute Node.   
 
== '''Bahasa Bash''' ==
Submit Script menggunakan bahasa bash dengan standar versi 4.4.


=='''Struktur Submit Script'''==
=='''Struktur Submit Script'''==
Secara umum, Submit Script mempunyai 4 bagian utama.
Submit Script mempunyai 4 bagian utama:


[[Berkas:Slurmsubmitscript.png|al=|nirbing|500x500px]]
#Header '''#!/bin/bash''' (karena script ini ditulis dengan bahasa bash)
# Header '''#!/bin/bash''' karena Submit Script adalah bash script.
#'''Parameter SBATCH''' untuk mengalokasikan resources job seperti CPU, RAM, GPU, time, dll.
#'''Parameter SBATCH''' untuk mengalokasikan resources job seperti CPU, RAM, GPU, time, dll.
# Memuat modul software yang dibutuhkan untuk menjalankan komputasi user dengan '''[https://wiki.efisonlt.com/wiki/Module_Environment#Module_Environment_di_SLURM_Submit_Script Module Environment]'''.
#*''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.''
# Alur perintah untuk menjalankan program user.
# 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]'''
{| class="wikitable"
# Alur perintah menjalankan program user.
|'''Note:'''
 
*''Terdapat ratusan jenis [https://slurm.schedmd.com/sbatch.html parameter SBATCH pada SLURM] dari yang standar hingga kompleks.''
[[Berkas:Slurmsubmitscript.png|al=|nir|jmpl|''Struktur dan contoh SLURM Submit Script'']]Berikut adalah beberapa contoh nyata Submit Script:  
* ''Pada halaman ini, admin EFISON merangkum parameter SBATCH yang esensial untuk menggunakan ALELEON Supercomputer.''
|}


== '''Limitasi Sementara Alokasi Komputasi''' ==
* Template Submit Script untuk masing-masing software komputasi tersedia di laman [[Daftar Software Komputasi dan Tutorial Penggunaan|'''Daftar Software Komputasi dan Tutorial Penggunaan''']]
Per tanggal 3 Februari 2023, ALELEON Supercomputer mengimplementasikan aturan baru berupa limitasi fair usage. Hal ini dilakukan untuk menjamin kualitas layanan ALELEON Supercomputer kepada seluruh pengguna. Mohon maaf atas ketidaknyamannya.


Berikut adalah limitasi fair usage '''per akun untuk''' '''total akumulasi semua job masing-masing user yang berjalan.'''
{| class="wikitable mw-collapsible mw-collapsed"
{| class="wikitable"
!Contoh Submit Script menjalankan software R
!Alokasi komputasi
!Limit maksimal
|-
|-
|CPU
|<syntaxhighlight lang="bash" line="1">
|128
#!/bin/bash
|-
 
|Memori RAM
# -------------------------------------------------------------
|128GB
# | Template SLURM Submit Script
|-
# | Software        : R
|GPU
# | Versi          : 4.3.0
|2  
# |
|-
# | NOTES:
|Limit waktu komputasi
# | 1. Isi bagian yang ditandai 4 garing (////).
|3 hari (3-00:00:00)
# | 2. Template ini bersifat referensi.
|}
# |   User dapat mengubah bagian yang sekiranya perlu diubah.
Ketika job yang sedang berjalan pada akun mencapai batas fair usage tersebut, maka job baru yang masuk ke antrian akan menunggu sampai job yang berjalan selesai dan alokasi fair usage dapat digunakan kembali.
# -------------------------------------------------------------
 
# --------------------------------------------------
# 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


=== Permintaan Membuka Limitasi Sementara ===
# Definisi file untuk menampung output error log   
Ketika membutuhkan alokasi komputasi yang lebih besar dari limit diatas, user dapat mengajukan pembukaan limitasi sementara '''melalui laporan kendala dengan mengklik gambar ini.'''
#SBATCH --error=error-%j.txt


* Tim admin akan memutuskan alokasi pembukaan limitasi tersebut menyesuaikan ketersediaan sumber daya komputasi dan antrian job pengguna lain di ALELEON Supercomputer.
# Nama input file R dengan format file-nya
INPUT_FILE='dataumat.R'


[[Berkas:Wiki-pelaporankendala.jpg|1000x1000px|link=https://efisonlt.com/aleleonbugreport]]
# Memuat modul software R yang akan digunakan user
module load R/4.3.0-GCC11.3-MKL


== '''SBATCH untuk Compute Node CPU (Partisi epyc)''' ==
# -------------------------------------------------
Berikut adalah daftar SBATCH yang esensial (dan biasanya akan ditemukan pada banyak template) untuk menjalankan komputasi di Compute Node CPU atau Partisi epyc.
# RUN SCRIPT
'''#SBATCH --nodes='''<''jumlah-compute-node''>
# -------------------------------------------------
'''#SBATCH --ntasks='''<''jumlah-core-CPU''>
'''#SBATCH --mem='''<''jumlah-memori-RAM''>
'''#SBATCH --time='''<''jumlah-limit-waktu-komputasi''>
'''#SBATCH --output='''<''output-textfile''>
'''#SBATCH --error='''<''output-verbose-dan-error-log-textfile''>
{| class="wikitable"
|+Info Detail SBATCH Partisi epyc
!SBATCH
!Penjelasan
|-
| rowspan="2" |'''nodes'''
|'''Alokasi jumlah Compute Node CPU yang digunakan.'''
|-
|'''<code>#SBATCH --nodes=<''jumlah-compute-node''></code>'''
* Contoh mengalokasikan 1 node:


<code>#SBATCH --nodes='''1'''</code>
# Perintah menjakankan R
{| class="wikitable"
Rscript ${INPUT_FILE}
!Jumlah nodes maksimal
</syntaxhighlight>
!3
|}
|}
{| class="wikitable mw-collapsible mw-collapsed"
!Contoh Submit Script menjalankan software LAMMPS
|-
|-
| rowspan="3" |'''ntasks'''
|<syntaxhighlight lang="bash" line="1">
|'''Alokasi jumlah core CPU yang digunakan.'''
#!/bin/bash
|-
 
|'''<code>#SBATCH --ntasks=<''jumlah-core-CPU''></code>'''
# ------------------------------------------------------------------------
* Contoh mengalokasikan 32 core CPU:
# | 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


<code>#SBATCH --ntasks='''32'''</code>
# Rekomendasi 2 thread OMP secara umum
{| class="wikitable"
#SBATCH --cpus-per-task=2
! colspan="2" |Jumlah ntasks maksimal
|-
|Per Compute Node
|'''128'''
|-
|Semua Compute Node
|'''384'''
|}
|-
|'''Note:'''
*''ALELEON Supercomputer menyalakan SMT (Simultaneous Multithreading) pada semua CPU sehingga '''ntasks mengisi core thread CPU.'''''
*''Berdasarkan arsiktektur CPU AMD yang digunakan ALELEON Supercomputer, user direkomendasikan untuk memilih jumlah 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.''
* ''Penghitungan kredit CPU Core Hour (CCH) berdasarkan jumlah ntasks yang didefinisikan user.''
|-
| colspan="2" |'''Apabila user ingin menjalankan komputasi paralel lebih dari 2 Compute Node (dengan program yang mendukung seperti MPI), silahkan lihat panduan tambahan:'''
* '''[[MPI ALELEON Supercomputer#MPI%20Satu%20Node%20vs%20Multi%20Node|Panduan menjalankan Program MPI Multi-Compute Node]].'''
|-
| rowspan="3" |'''mem'''
|'''Alokasi jumlah memori RAM yang digunakan. Admin merekomendasikan satuan MB atau GB.'''
|-
|'''<code>#SBATCH --mem=<''jumlah-memori''<nowiki>>MB|GB</nowiki></code>'''
* Contoh mengalokasikan memori RAM 32GB:


<code>#SBATCH --mem='''32GB'''</code>
# Alokasi jumlah memori RAM (satuan GB)
#SBATCH --mem=64GB


* Contoh mengalokasikan memori RAM 7500MB:
# Alokasi limit waktu menjalankan job
#SBATCH --time=10:00:00


<code>#SBATCH --mem='''7500MB'''</code>
# Definisi file untuk menampung output terminal
{| class="wikitable"
#SBATCH --output=result-%j.txt
!Jumlah mem maksimal
!240GB
|}
|-
|Partisi epyc mempunyai '''satu node spesial dengan kapasitas RAM hingga 500GB''' (dibandingkan standar 240GB). Apabila user membutuhkan RAM lebih dari 240GB, gunakan kombinasi SBATCH berikut:
'''#SBATCH --nodelist=epyc001'''
#SBATCH --mem=<''maks-hingga-500GB''>
'''Note:'''


* ''Hanya untuk user yang benar-benar membutuhkan komputasi dengan RAM lebih dari 240GB!''
# Definisi file untuk menampung output error log   
* ''Compute  epyc001 juga digunakan oleh user lainnya jadi bersiaplah untuk mengantri apabila alokasi epyc01 belum dapat memenuhi permintaan user dengan RAM lebih dari 240GB.''
#SBATCH --error=error-%j.txt 
|-
| rowspan="2" |'''time'''
|'''Alokasi limit waktu untuk menjalankan job. Apabila waktu jalannya program melebihi limit maka akan dihentikan (''kill'') secara otomatis oleh SLURM.'''
|-
|'''<code>#SBATCH --time=<''HH:MM:SS''></code>'''<code>atau '''#SBATCH --time=<''D-HH:MM:SS''>'''</code>
* Contoh mengalokasikan limit waktu 10 jam 30 menit:


<code>#SBATCH --time='''10:30:00'''</code>
# Nama input file LAMMPS dengan format file-nya
INPUT_FILE='zobarne.lammps'  


* Contoh mengalokasikan limit waktu 2 hari:
# Memuat modul software LAMMPS versi GPU
module load lammps/2022.06.23u4-GCC11.3-AOCL4.0-CUDA12.1


<code>#SBATCH --time='''2-00:00:00'''</code>
# -------------------------------------------------
{| class="wikitable"
# RUN SCRIPT
!Jumlah time maksimal
# -------------------------------------------------
!3-00:00:00 (3 hari)
|}
|-
| rowspan="2" |'''output'''
|'''Output textfile untuk merekap output terminal.''' 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).
|-
|'''<code>#SBATCH --output=<''nama-file-output''>.<''format-file''></code>'''
*Contoh mendefinisikan file output dengan format txt bersama job-ID:
<code>#SBATCH --output='''result-%j.txt'''</code>
* Ketika job berjalan (contoh) dengan job-ID 670, maka nama file output menjadi '''result-670.txt'''.
|-
| rowspan="2" |'''error'''
|'''Output textfile untuk merekap output verbose (status jalannya program dan error log ketika program gagal berjalan).'''
* 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 diatas.
|-
|'''<code>#SBATCH --error=<''nama-file-output''>.<''format-file''></code>'''
* Contoh mendefinisikan file error dengan format txt bersama job-ID:
<code>SBATCH --output='''error-%j.txt'''</code>
* Ketika job berjalan (contoh) dengan job-ID 670, maka nama file error menjadi '''error-670.txt'''.
|}
== '''SBATCH untuk Compute Node GPU (Partisi ampere)''' ==
Berikut adalah daftar SBATCH yang esensial untuk menjalankan komputasi di Compute Node GPU atau Partisi ampere.
'''#SBATCH --partition=ampere'''
'''#SBATCH --gpus='''<''jumlah-GPU''>
'''#SBATCH --ntasks='''<''jumlah-core-CPU''>
'''#SBATCH --mem='''<''jumlah-memori-RAM''>
'''#SBATCH --time='''<''jumlah-limit-waktu-komputasi''>
'''#SBATCH --output='''<''output-textfile''>
'''#SBATCH --error='''<''output-verbose-dan-error-log-textfile''>
{| class="wikitable"
|+Info Detail SBATCH Partisi ampere
!SBATCH
!Penjelasan
|-
| colspan="2" |'''<code>#SBATCH --partition=ampere</code>''' bertujuan untuk menjalankan job submission di Compute Node GPU.
|-
| rowspan="2" |'''gpus'''
|'''Alokasi jumlah GPU yang digunakan.'''
|-
|'''<code>#SBATCH --gpus=<''jumlah-GPU''></code>'''
* Contoh mengalokasikan 1 GPU:


<code>#SBATCH --gpus=1</code>
# Export threading OMP
{| class="wikitable"
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK
!Jumlah gpu maksimal
!2
|}
|-
| rowspan="3" |'''ntasks'''
|'''Alokasi jumlah core CPU yang digunakan.'''
|-
|'''<code>#SBATCH --ntasks=<''jumlah-core-CPU''></code>'''
* Contoh mengalokasikan 8 core CPU:


<code>#SBATCH --ntasks=8</code>
# Perintah menjalankan LAMMPS
{| class="wikitable"
mpirun --mca pml ucx --mca osc ucx --np $SLURM_NTASKS lmp -sf gpu -pk gpu $SLURM_GPUS -in $INPUT_FILE
!Jumlah ntasks maksimal
</syntaxhighlight>
!32
|}
|}
|-
|'''Note:'''
*''ALELEON Supercomputer menyalakan SMT (Simultaneous Multithreading) pada semua CPU sehingga '''ntasks mengisi core thread CPU.'''''
*''Berdasarkan arsiktektur CPU AMD yang digunakan ALELEON Supercomputer, user direkomendasikan untuk memilih jumlah ntasks berdasarkan kelipatan 4, dimulai dari 1,2,4, kemudian naik kelipatan 4 menjadi 8, 12, 16, 20, 24, 28, 32.''
* ''Penghitungan kredit CPU Core Hour (CCH) berdasarkan jumlah ntasks yang didefinisikan user.''
|-
| rowspan="2" |'''mem'''
|'''Alokasi jumlah memori RAM yang digunakan. Admin merekomendasikan satuan MB atau GB.'''
|-
|'''<code>#SBATCH --mem=<''jumlah-memori''<nowiki>>MB|GB</nowiki></code>'''
* Contoh mengalokasikan memori RAM 32GB:


<code>#SBATCH --mem=32GB</code>
== '''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.


* Contoh mengalokasikan memori RAM 7500MB:
=== Format Penulisan SBATCH ===
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


<code>#SBATCH --mem=7500MB</code>
# --- 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"
{| class="wikitable"
!Jumlah mem maksimal
!Partisi Compute Node
!120GB
!Menulis SBATCH
|}
|-
|-
| rowspan="2" |'''time'''
|'''epyc''' (Compute Node CPU)
|'''Alokasi limit waktu untuk menjalankan job. Apabila waktu jalannya program melebihi limit maka akan dihentikan (''kill'') secara otomatis oleh SLURM.'''
|Merupakan partisi default
 
* user tidak perlu menulis SBATCH parameter untuk epyc
|-
|-
|'''<code>#SBATCH --time=<''HH:MM:SS''></code>'''<code>atau '''#SBATCH --time=<''D-HH:MM:SS''>'''</code>
|'''ampere''' (Compute Node GPU)
* Contoh mengalokasikan limit waktu 10 jam 30 menit:
|<code>#SBATCH --partition=ampere</code>
|}


<code>#SBATCH --time=10:30:00</code>
=== #SBATCH --ntasks, --mem, dan --gpus ===
ntasks, mem, dan gpus adalah parameter SBATCH utama untuk menentukan alokasi komputasi.


* Contoh mengalokasikan limit waktu 2 hari:
* '''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'''.


<code>#SBATCH --time=2-00:00:00</code>
Berikut adalah panduan nilai maksimal masing-masing parameter untuk beberapa skenario penggunaan.
{| class="wikitable"
{| class="wikitable"
!Jumlah time maksimal
! rowspan="2" |Skenario Penggunaan
!3-00:00:00 (3 hari)
! colspan="3" |Nilai maksimal
|}
|-
!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
|-
|-
| rowspan="2" |'''output'''
|Job MPI di epyc (Compute Node CPU)<sup>''3''</sup>
|'''Output textfile untuk merekap output terminal.''' User mendefinisikan nama dan format file.
|384
* Terdapat pola penamaan dari SLURM yaitu '''%j''' untuk merekap nomor Job ID.
|240GB
* Format file dibebaskan (biasanya menggunakan .txt atau .out).
|0
|-
|-
|'''<code>#SBATCH --output=<''nama-file-output''>.<''format-file''></code>'''
|Semua jenis job di high-mem node epyc''<sup>4</sup>''
*Contoh mendefinisikan file output dengan format txt bersama job-ID:
|128
<code>#SBATCH --output='''result-%j.txt'''</code>
|500GB
* Ketika job berjalan (contoh) dengan job-ID 670, maka nama file output menjadi '''result-670.txt'''.
|0
|-
|-
| rowspan="2" |'''error'''
|Semua jenis job di ampere (Compute Node GPU)''<sup>5</sup>''
|'''Output textfile untuk merekap output verbose (status jalannya program dan error log ketika program gagal berjalan).'''
|32
* Bermanfaat untuk melakukan ''troubleshooting'' ketika program gagal berjalan. Apabila membutuhkan support, admin biasanya akan meminta file output dari SBATCH error ini.
|120GB
* Pola penamaan mengikuti SBATCH output diatas.
|2
|-
|-
|'''<code>#SBATCH --error=<''nama-file-output''>.<''format-file''></code>'''
| colspan="4" |''Tim admin dapat membantu user untuk membedakan program MPI dan non-MPI.''
* Contoh mendefinisikan file error dengan format txt bersama job-ID:
* ''Daftar [[Daftar Software Komputasi dan Tutorial Penggunaan|'''software komputasi ALELEON''']] memberikan indikator program MPI atau non-MPI.''
<code>SBATCH --output='''error-%j.txt'''</code>
* ''Dapat pula menghubungi admin untuk diskusi melalui email '''support@efisonlt.com'''.''
* Ketika job berjalan (contoh) dengan job-ID 670, maka nama file error menjadi '''error-670.txt'''.
|}
|}
== '''SBATCH Notifikasi e-mail''' ==
'''''Keterangan:'''''
SLURM ALELEON Supercomputer dapat mengirim notifikasi email kepada user '''untuk mengabarkan apabila job user sudah berjalan atau selesai'''. SLURM ALELEON Supercomputer menggunakan nama email '''Jojo''' untuk mengirim notifikasi email.
# 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).
 
* 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.  


Silahkan tambahan SBATCH berikut apabila user ingin menerima notifikasi email dari SLURM
=== #SBATCH --output ===
#SBATCH --mail-user=<''alamat-email-user''>
SBATCH output membuat file untuk merekap output terminal jalannya program. User mendefinisikan nama dan format file.
#SBATCH --mail-type=begin
* Terdapat pola penamaan dari SLURM yaitu %j untuk merekap nomor Job ID.
#SBATCH --mail-type=end
* 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'''.


* '''mail-user'''
=== #SBATCH --error ===
** Alamat email user untuk menerima notifikasi SLURM
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.
* '''mail-type=begin'''
** Notifikasi email yang menginfokan job sudah berjalan.
* '''mail-type=end'''
** Notifikasi email yang menginfokan job sudah selesai.
** Sekaligus memberikan cuplikan 20 baris terakhir dari file output SBATCH output dan error job user.


== '''Memuat Software dengan module load''' ==
=== '''SBATCH untuk notifikasi email SLURM''' ===
Modul software pada SLURM Submit Script berfungsi supaya Compute Node dapat menjalankan software yang dibutuhkan oleh komputasi user. Masukkan line script berikut:
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">
'''module load <''nama-modul-software-yang-digunakan-untuk-komputasi-user''>'''
#SBATCH --mail-user=<alamat-email-user>
Tulis script module load tersebut sebelum menulis run script jalannya program.
#SBATCH --mail-type=BEGIN,END,FAIL
* Daftar lengkap nama modul software dapat ditemukan pada [[Katalog Software ALELEON Supercomputer|'''Katalog Software ALELEON Supercomputer''']].
</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.


== '''Template Submit Script''' ==
=== SBATCH lainnya untuk job MPI ===
Admin EFISON menyediakan referensi untuk template Submit Script berdasarkan skenario dan software komputasi.
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''']]


=== Tanda //// ===
== '''Memuat Software dengan module load''' ==
Dalam membuat template SLURM Submit Script, admin EFISON menggunakan tanda 4 garing (////) untuk '''menandai bagian yang perlu diisi oleh user'''. Contoh terdapat bagian script untuk menaruh nama file input:
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">
FILE_INPUT="'''////'''.in"
module load <nama-modul-software>
Artinya user mengisi nama file input dengan menggantikan tanda //// di dalam braket tanda petik, contoh menjadi:  
</syntaxhighlight>'''''Keterangan:'''''  
FILE_INPUT="'''myskripsi'''.in"


=== Daftar Template Submit Script ===
* Tulis <code>module load</code> sebelum menulis script alur jalannya program.
User dapat melihat daftar lengkap template Submit Script pada laman ini:


[[Berkas:Wiki-15.jpg|1000x1000px |link=Daftar Software Komputasi dan Tutorial Penggunaan |alt=Daftar Software Komputasi dan Tutorial Penggunaan]]
* 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.
* 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.