Submit Script ALELEON Supercomputer: Perbedaan antara revisi

Dari ALELEON by EFISON
k (WilsonLisan memindahkan halaman Manajemen SLURM Aleleon ke Manajemen SLURM ALELEON Supercomputer: Standarisasi nama ALELEON Supercomputer)
(→‎Struktur Submit Script: menambah contoh script)
 
(62 revisi perantara oleh pengguna yang sama tidak ditampilkan)
Baris 1: Baris 1:
SLURM adalah '''software manajemen''' yang digunakan oleh HPC Aleleon Mk.II untuk '''mengantarkan dan mengatur antrian job komputasi user ke Compute Node'''. Bila tidak menggunakan SLURM maka job user akan berjalan di Login Node yang tidak layak untuk komputasi karena mempunyai spesifikasi terbatas. 
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.  
[[Berkas:Slurmm.png|pus|nirbing|700x700px]]


== '''Perintah Dasar SLURM''' ==
=='''Struktur Submit Script'''==
Berikut adalah perintah dasar bagi user untuk menggunakan SLURM:
Submit Script mempunyai 4 bagian utama:
{| class="wikitable"
 
|+Perintah dasar SLURM untuk user
#Header '''#!/bin/bash''' (karena script ini ditulis dengan bahasa bash)
!Perintah
#'''Parameter SBATCH''' untuk mengalokasikan resources job seperti CPU, RAM, GPU, time, dll.
!Penjelasan
#*''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.
 
[[Berkas:Slurmsubmitscript.png|al=|nir|jmpl|''Struktur dan contoh SLURM Submit Script'']]Berikut adalah beberapa contoh nyata Submit Script:  
 
* Template Submit Script untuk masing-masing software komputasi tersedia di laman [[Daftar Software Komputasi dan Tutorial Penggunaan|'''Daftar Software Komputasi dan Tutorial Penggunaan''']]
 
{| class="wikitable mw-collapsible mw-collapsed"
!Contoh Submit Script menjalankan software R
|-
|-
|
|<syntaxhighlight lang="bash" line="1">
$ '''sbatch''' <slurm-script>                         
#!/bin/bash
|Menjalankan job komputasi user yang ditulis pada '''SLURM script''' ke Compute Node. SLURM Script adalah bash script yang berisikan alokasi resources (CPU, GPU, RAM, walltime, output, dll) dan alur jalannya program komputasi user.
 
# -------------------------------------------------------------
# | 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}
</syntaxhighlight>
|}
{| class="wikitable mw-collapsible mw-collapsed"
!Contoh Submit Script menjalankan software LAMMPS
|-
|-
|
|<syntaxhighlight lang="bash" line="1">
$ '''squeue'''
#!/bin/bash
|Melihat status dan antrian semua komputasi. Tambahan opsi:  
 
# ------------------------------------------------------------------------
# | 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.
# ------------------------------------------------------------------------


* squeue -l : menampilkan squeue dengan info lengkap
# --------------------------------------------------
* squeue -u $USER : menampilkan squeue untuk job pribadi user
# Alokasi komputasi, modul software, dan file input
|-
# --------------------------------------------------
|
 
  $ '''scancel''' <job-ID>
# Partisi compute node GPU
|Membatalkan job SLURM yang sedang berjalan
#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'  


=='''Contoh Penggunaan SLURM'''==
# Memuat modul software LAMMPS versi GPU
User akan menjalankan program bernama 'kerjaan-skripsi' di Compute Node. User membuat '''SLURM script''' yang berisikan alokasi resources dan perintah untuk menjalankan program 'kerjaan-skripsi'.
module load lammps/2022.06.23u4-GCC11.3-AOCL4.0-CUDA12.1


* Ada baiknya SLURM script ditaruh pada satu direktori dengan program yang akan dijalankan.
# -------------------------------------------------
* Penamaan SLURM script bisa bebas dimana pada contoh ini bernama 'slurm-skripsi'.
# RUN SCRIPT
[olala01@login myjob]$ ls
# -------------------------------------------------
kerjaan-skripsi  '''slurm-skripsi'''
Jalankan SLURM submission script tersebut dengan perintah '''sbatch'''. Perhatikan bahwa user akan mendapatkan nomor ID dari job tersebut.
[olala01@login myjob]$ '''sbatch slurm-skripsi'''
Submitted batch job 231
User dapat melihat status jalannya job masing-masing dengan perintah '''squeue -u $USER'''. Keterangan dari kolom ST (STATUS) adalah R (RUNNING), menandakan program kerjaan-skripsi user sedang berjalan di Compute Node.
[olala01@login myjob]$ '''squeue -u $USER'''
Mon Mar 22 10:43:22 2021
              JOBID PARTITION    NAME    USER  ST      TIME  NODES NODELIST(REASON)
                231 gpu_amper slurm-sc  olala01  R      2:00      1 epyc01
Job selesai bila sudah tidak terlihat di daftar squeue. Lihat apakah job menghasilkan output yang diinginkan atau tidak.
[olala01@login myjob]$ ls
kerjaan-skripsi  slurm-skripsi  result-231.out  result-231.err
Apabila user ingin membatalkan program yang tengah berjalan via SLURM, gunakan perintah '''scancel''' job ID:
[olala01@login myjob]$ '''scancel 231'''
== '''SLURM Script''' ==
'''SLURM script adalah bash-script yang berisikan alokasi resources (CPU, RAM, GPU, walltime, output, dll) dan alur jalannya program'''. Terdapat 4 komponen penting pada SLURM script:


[[Berkas:Contoh SLURM updated.png|al=|nirbing|578x578px]]
# Export threading OMP
# Header #!/bin/bash untuk bash script.
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK
# Parameter alokasi resources CPU, memori, waktu, output, dll dengan '''SBATCH'''.
# Pengaturan [[Module Environment|'''Module Environment''']] untuk memuat software yang dibutuhkan.
# Alur perintah untuk menjalankan komputasi user.


=== '''Resources HPC Aleleon Mk.II''' ===
# Perintah menjalankan LAMMPS
Sebelum menggunakan SLURM, user harus mengetahui alokasi maksimal hardware dari HPC Aleleon Mk.II yang dijelaskan pada tabel dibawah ini.
mpirun --mca pml ucx --mca osc ucx --np $SLURM_NTASKS lmp -sf gpu -pk gpu $SLURM_GPUS -in $INPUT_FILE
{| class="wikitable"
</syntaxhighlight>
|+Partisi Hardware HPC Aleleon Mk.II
![[Partisi Aleleon Mk.II|Partisi]]
!Keterangan
!Jumlah Node
!Jumlah Core CPU per node
!Jumlah RAM per node
!Jumlah GPU per node
|-
|'''epyc''' (DEFAULT)         
|compute node CPU
|3
|128
|250GB
|0
|-
|'''gpu_ampere'''
|compute node GPU
|1
|128
|125GB
|2
|}
|}


=='''Parameter Resources SBATCH Esensial'''==
== '''Parameter SBATCH esensial''' ==
Terdapat ratusan jenis parameter SBATCH pada SLURM. Berikut adalah parameter esensial yang digunakan pada HPC Aleleon Mk.II.
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.
{| class="wikitable"
|+Parameter esensial SBATCH SLURM untuk menjalankan job di [[Partisi Aleleon Mk.II|Compute Node CPU]] (DEFAULT)
!Parameter
!Resource
!Penjelasan
|-
|
'''#SBATCH --ntasks='''         
|Core CPU       
|Alokasi jumlah core CPU yang akan digunakan. Contoh mengalokasikan 64 core CPU:
<nowiki>#</nowiki>SBATCH --ntasks='''64'''
|-
|
'''#SBATCH --mem='''
|Memori RAM
|Alokasi memori RAM yang akan digunakan. User bisa menetapkan satuan apapun namun kami merekomendasikan satuan GB. Contoh mengalokasikan memori 64GB:
<nowiki>#</nowiki>SBATCH --mem='''64GB'''
|-
|
'''#SBATCH --time'''=
|Walltime             
|Waktu maksimal yang dialokasikan untuk job. Walltime maksimal yang diizinkan saat ini adalah 14 hari. Format waktu <walltime> yang digunakan:


* '''HH:MM:SS'''. Contoh alokasi 10 jam= #SBATCH --time='''10:00:00'''
=== Format Penulisan SBATCH ===
* '''D-HH:MM:SS'''. Contoh alokasi 2 hari= #SBATCH --time='''2-00:00:00'''
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 --output='''     
#SBATCH --mem=64GB
|Output terminal     
#SBATCH --time=01:00:00
|Merekap output terminal dari program user. Terdapat variabel spesial yaitu %j untuk merekap JOB ID. Format file dibebaskan. Contoh:
#SBATCH --output=result-%j.txt
<nowiki>#</nowiki>SBATCH --output='''hasil-%j.out'''
#SBATCH --error=error-%j.txt
|-
|
'''#SBATCH --error='''
|Output verbose
|Merekap output verbose program, berguna untuk melakukan troubleshooting dikala program user tidak berjalan. Contoh:
<nowiki>#</nowiki>SBATCH --error='''hasil-%j.err'''
|}


=== '''Menggunakan Paralel Multi-Node''' ===
# --- Contoh penulisan SBATCH yang salah
Berikut adalah dua parameter wajib apabila user menggunakan lebih dari satu node untuk komputasi paralel:
#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"
|+Parameter wajib SBATCH SLURM untuk menggunakan lebih dari satu node
!Partisi Compute Node
!Paramater
!Menulis SBATCH
!Resource
!Penjelasan
|-
|
'''#SBATCH --nodes='''
|Node
|Alokasi jumlah node Compute Node yang akan digunakan. Contoh mengalokasikan 3 node:
<nowiki>#</nowiki>SBATCH --nodes='''3'''
|-
|-
|
|'''epyc''' (Compute Node CPU)
'''#SBATCH --ntasks-per-node='''              
|Merupakan partisi default
|Core CPU per node
|'''Menggantikan parameter ntasks.''' Alokasi jumlah '''core CPU per node''' yang akan digunakan. Contoh mengalokasikan 64 core per node:
$SBATCH --ntasks-per-node='''64'''
|}


=== '''Menggunakan Compute Node GPU''' ===
* user tidak perlu menulis SBATCH parameter untuk epyc
Berikut adalah dua parameter wajib apabila user menjalankan job di compute node GPU NVIDIA Ampere: 
{| class="wikitable"
|+Parameter wajib SBATCH SLURM untuk menjalankan job di [[Partisi Aleleon Mk.II|compute node GPU]]
!Paramater
!Resource
!Penjelasan
|-
|-
|
|'''ampere''' (Compute Node GPU)
'''#SBATCH --partition=gpu_ampere'''
|<code>#SBATCH --partition=ampere</code>
|Partisi GPU      
|Menjalankan job pada partisi compute node GPU (yang bernama gpu_ampere)                                                                                                                                                                
|-
|
'''#SBATCH --gres=gpu:<jumlah-GPU>'''
|GPU                       
|Contoh menggunakan 2 GPU:
$SBATCH --gres=gpu:'''2'''                           
|}
|}


=== '''Menggunakan Threading CPU''' ===
=== #SBATCH --ntasks, --mem, dan --gpus ===
Berikut adalah parameter untuk mengalokasikan threading CPU untuk user yang menggunakan program paralel threading seperti OpenMP (OMP), hybrid MPI/OMP, OpenBLAS, MKL, dll:
ntasks, mem, dan gpus adalah parameter SBATCH utama untuk menentukan alokasi komputasi.  
{| class="wikitable"
|+Parameter SBATCH SLURM untuk menjalankan threading CPU
!Parameter
!Resource
!Penjelasan
|-
|
'''#SBATCH --cpus-per-task='''   
|Threading CPU   
|Jumlah threading CPU per core yang digunakan. Contoh mengalokasikan 8 threading per core CPU:
<nowiki>#</nowiki>SBATCH --cpus-per-task='''8'''
|}
== '''Contoh SLURM Script''' ==
EFISON merangkum contoh SLURM script untuk penggunaan berbagai skenario komputasi pada laman '''[[Contoh SLURM Script]]'''.


=='''Contoh SLURM Script Software Spesifik'''==
* '''ntasks''' -> alokasi jumlah '''core CPU.''' ALELEON Supercomputer mengaktifkan ''SMT (Simultaneous Multithreading)'' pada semua CPU sehingga ntasks mendefinisikan jumlah core thread CPU.
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]'''.
* '''mem''' -> alokasi jumlah '''memori RAM'''. Ditulis dengan satuan memori GB (Gigabyte).
* '''gpus''' -> alokasi jumlah '''GPU'''.  


=='''Membaca Status squeue'''==
Berikut adalah panduan nilai maksimal masing-masing parameter untuk beberapa skenario penggunaan.
Sesuai penjelasan diatas, user dapat melihat status dan antrian jalannya program melalui perintah squeue.
[[Berkas:Status_squeue.png|al=|nir|jmpl|900x900px|Penjelasan bagian squeue]]
Info yang esensial untuk user adalah bagian STATE dan NODELIST(REASON). STATE (ST) memberikan kondisi jalannya program user sementara itu NODELIST(REASON) memberikan detail verbose status jalannya program user.  
{| class="wikitable"
{| class="wikitable"
|+Daftar STATE yang biasa muncul
! rowspan="2" |Skenario Penggunaan
!STATE
! colspan="3" |Nilai maksimal
!Kepanjangan
!Penjelasan
|-
|-
|R
!ntasks (CPU)
|RUN
!mem (RAM)
|Job berjalan
!gpus (GPU)
|-
|-
|PD
|Akumulasi ''concurrent'' job fair policy usage<sup>''1''</sup>
|PENDING
|128
|Job tertahan, lihat keterangan NODELIST
|128GB
|2
|-
|-
|CG
|Job non-MPI di epyc (Compute Node CPU)''<sup>2</sup>''
|COMPLETING
|128
|Job selesai dan dalam proses clean-up SLURM
|240GB
|0
|-
|-
|CA
|Job MPI di epyc (Compute Node CPU)<sup>''3''</sup>
|CANCELED
|384
|Job dibatalkan oleh user
|240GB
|0
|-
|-
|PR
|Semua jenis job di high-mem node epyc''<sup>4</sup>''
|PREEMPETED
|128
|Job dibatalkan oleh sys-admin Aleleon, alasan akan dikabarkan melalui email
|500GB
|0
|-
|-
|S
|Semua jenis job di ampere (Compute Node GPU)''<sup>5</sup>''
|SUSPENDED
|32
|Job ditahan oleh sys-admin Aleleon
|120GB
|}
|2
Pada saat job berjalan (RUNNING) maka NODELIST akan menampilkan info nama node tempat job berjalan. Sementara itu NODELIST akan memberikan alasan verbose pada saat job tidak berjalan (STATE selain RUNNING). Berikut adalah daftar NODELIST yang bisa terjadi di HPC Aleleon Mk.II:
{| class="wikitable"
|+Daftar NODELIST di HPC Aleleon Mk.II
!NODELIST
!Penjelasan
|-
|Resources
|Job menunggu alokasi resources (CPU, RAM, GPU) yang dipesan oleh SLURM submission script user
|-
|AssocMaxWallDurationPerJobLimit
|Job tidak dapat berjalan karena melewati batas walltime maksimum partisi
|-
|-
|QOSMaxCpuPerUserLimit
| colspan="4" |''Tim admin dapat membantu user untuk membedakan program MPI dan non-MPI.''
|Job melewati batas alokasi CPU user (lihat laman QOS User untuk penjelasan lebih lanjut).
* ''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'''.''
|}
|}
'''User dapat lapor admin melalui email support@efisonlt.com apabila menjumpai NODELIST yang tidak terdapat pada daftar diatas ketika job user tidak berjalan.'''
'''''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).
 
* 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'''.
 
=== #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:  <syntaxhighlight lang="bash">
#SBATCH --mail-user=<alamat-email-user>
#SBATCH --mail-type=BEGIN,END,FAIL
</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.
 
=== SBATCH lainnya untuk job MPI ===
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''']]
 
== '''Memuat Software dengan module load''' ==
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">
module load <nama-modul-software>
</syntaxhighlight>'''''Keterangan:'''''
 
* Tulis <code>module load</code> sebelum menulis script alur jalannya program.
 
* 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.