Submit Script ALELEON Supercomputer: Perbedaan antara revisi

Dari ALELEON by EFISON
k (WilsonLisan memindahkan halaman Manajemen SLURM ALELEON Supercomputer ke Alokasi Resources Job dan Contoh SLURM Script: Didedikasikan untuk penjelasan resources job dan contoh SLURM Script)
 
(62 revisi perantara oleh pengguna yang sama tidak ditampilkan)
Baris 1: Baris 1:
Pada ALELEON Supercomputer, user menggunakan '''manajemen SLURM''' untuk '''menyerahkan job komputasi (job submission)''' ke Compute Node dan '''mengatur alokasi resources (CPU, RAM, GPU, dll) yang akan digunakan''' untuk menjalankan job komputasi tersebut.
[[Berkas:Slurm.jpg|nirbing|400x400px]] 


[[Berkas:Slurmm.png|al=|nirbing|700x700px]]
Halaman ini menjelaskan panduan memahami '''Submit Script''' yang merupakan 'formulir' untuk menjalankan komputasi ke Compute Node menggunakan '''sistem manajemen Slurm'''.  


== '''Perintah Dasar SLURM''' ==
=='''Struktur Submit Script'''==
Berikut adalah perintah dasar bagi user untuk menggunakan SLURM:
Submit Script mempunyai 4 bagian utama:
 
#Header '''#!/bin/bash''' karena script ini ditulis dengan '''bahasa bash'''.
#'''Parameter SBATCH''' untuk mengalokasikan resources job seperti CPU, RAM, GPU, time, dll.
#*''User menentukan sendiri jumlah alokasi komputasi (CPU, RAM, GPU, time limit) yang akan dipakai asalkan tidak melebihi limit.''
# Apabila butuh, memuat modul software untuk menjalankan komputasi user dengan '''[https://wiki.efisonlt.com/wiki/Module_Environment#Module_Environment_di_SLURM_Submit_Script Module Environment]'''
# Alur perintah jalannya program user.
 
[[Berkas:Slurmsubmitscript.png|al=|nir|jmpl|''Struktur dan contoh SLURM Submit Script'']]
== '''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 tutorial ini memberikan daftar SBATCH yang esensial untuk menjalankan komputasi di ALELEON Supercomputer.
 
=== 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
 
# --- 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"
|+Perintah dasar SLURM untuk user
!Partisi Compute Node
!Perintah
!Menulis SBATCH
!Penjelasan
|-
|
$ '''sbatch''' <slurm-script>                         
|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.
|-
|-
|
|'''epyc''' (Compute Node CPU)
$ '''squeue'''
|Merupakan partisi default
|Melihat status dan antrian semua komputasi. Tambahan opsi:


* squeue -l : menampilkan squeue dengan info lengkap
* user tidak perlu menulis SBATCH parameter untuk epyc
* squeue -u $USER : menampilkan squeue untuk job pribadi user
|-
|-
|
|'''ampere''' (Compute Node GPU)
$ '''scancel''' <job-ID>
|<code>#SBATCH --partition=ampere</code>
|Membatalkan job SLURM yang sedang berjalan
|}
|}


=='''Contoh Penggunaan SLURM'''==
=== #SBATCH --ntasks, --mem, dan --gpus ===
'''User akan menjalankan program bernama 'skripsi' di Compute Node.''' User membuat '''SLURM script''' yang berisikan alokasi resources dan perintah untuk menjalankan program 'skripsi'. 
ntasks, mem, dan gpus adalah parameter SBATCH utama untuk menentukan alokasi komputasi.  
 
* 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'.
$ ls
skripsi  '''slurm-skripsi'''
Jalankan SLURM submission script tersebut dengan perintah '''sbatch'''. Perhatikan bahwa user akan mendapatkan nomor ID dari job tersebut.
$ '''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.
$ '''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.
$ ls
skripsi  slurm-skripsi  result-231.txt  semogahasilnyabenarbiarcepatlulus.txt
Apabila user ingin membatalkan program yang tengah berjalan via SLURM, gunakan perintah '''scancel''' job ID:
$ '''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]]
* '''ntasks''' -> alokasi jumlah '''core CPU.''' ALELEON Supercomputer mengaktifkan ''SMT (Simultaneous Multithreading)'' pada semua CPU sehingga ntasks mendefinisikan jumlah core thread CPU.
# Header #!/bin/bash untuk bash script.
* '''mem''' -> alokasi jumlah '''memori RAM'''. Ditulis dengan satuan memori GB (Gigabyte).
# Parameter alokasi resources CPU, memori, waktu, output, dll dengan '''SBATCH'''.
* '''gpus''' -> alokasi jumlah '''GPU'''.  
# Pengaturan [[Module Environment|'''Module Environment''']] untuk memuat software yang dibutuhkan.
# Alur perintah untuk menjalankan komputasi user.


=='''Resources ALELEON Supercomputer'''==
Berikut adalah panduan nilai maksimal parameter untuk beberapa skenario penggunaan:
Salah satu seni dalam menggunakan superkomputer adalah '''user menentukan sendiri jumlah alokasi resources yang akan digunakan'''. Sebelum menjalankan komputasi, user harus mengetahui alokasi maksimal hardware dari ALELEON Supercomputer yang dijelaskan pada tabel dibawah ini.
{| class="wikitable"
{| class="wikitable"
|+Partisi Hardware ALELEON Supercomputer
! rowspan="2" |Skenario Penggunaan
!Partisi
! colspan="3" |Nilai maksimal
!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)
!ntasks (CPU)
|compute node '''CPU'''
!mem (RAM)
|3
!gpus (GPU)
|64
|128
|250GB
|0
|-
|-
|'''gpu_ampere'''
|Akumulasi ''concurrent'' job fair policy usage<sup>''1''</sup>
|compute node '''GPU'''
|1
|64
|128
|128
|125GB
|128GB
|2
|2
|}
Keterangan:
* '''Partisi adalah pengelompokan jenis Compute Node''' di mana pada ALELEON Supercomputer, Partisi epyc khusus untuk komputasi CPU dan Partisi gpu_ampere mempunyai GPU.
* '''Secara default, komputasi pada ALELEON Supercomputer diarahkan ke Partisi epyc.''' Gunakan parameter SBATCH partition untuk menggunakan Partisi gpu_ampere (penjelasan di bawah).
* '''Istilah node digunakan sebagai satuan jumlah server'''. Contoh, Partisi epyc mempunyai 3 node yang artinya mempunyai 3 unit server.
== '''Core Thread CPU pada ALELEON Supercomputer''' ==
EFISON menggunakan CPU [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]]'''.
=='''Parameter Resources SBATCH Esensial'''==
Terdapat ratusan jenis parameter SBATCH pada SLURM. Admin EFISON merangkum parameter esensial yang digunakan pada ALELEON Supercomputer.
{| class="wikitable"
|+Parameter esensial SBATCH SLURM untuk menjalankan job di partisi default yaitu epyc
!Parameter
!Resource
!Penjelasan
!Alokasi maksimal
|-
|-
|
|Job non-MPI di epyc (Compute Node CPU)''<sup>2</sup>''  
'''#SBATCH --nodes='''
|128
|Node server
|240GB
|Alokasi jumlah node yang digunakan.
|0
Contoh mengalokasikan 1 node:
 
'''#SBATCH --nodes=1'''
|3
|-
|-
|
|Job MPI di epyc (Compute Node CPU)<sup>''3''</sup>  
'''#SBATCH --ntasks='''          
|Core thread CPU
|Alokasi jumlah core thread CPU yang akan digunakan.
Contoh mengalokasikan 32 core thread CPU:
'''<nowiki>#</nowiki>SBATCH --ntasks=32'''
|384
|384
|240GB
|0
|-
|-
|
|Semua jenis job di high-mem node epyc''<sup>4</sup>''
'''#SBATCH --mem='''
|128
|Memori RAM
|500GB
|Alokasi memori RAM yang akan digunakan.
|0
User bisa menetapkan satuan KB, MB, atau GB.
 
Contoh mengalokasikan memori 32GB:
'''<nowiki>#</nowiki>SBATCH --mem=32GB'''
|250GB
|-
|-
|
|Semua jenis job di ampere (Compute Node GPU)''<sup>5</sup>''
'''#SBATCH --time'''=
|32
|Walltime
|120GB
|Waktu maksimal yang dialokasikan untuk job.
|2
Format waktu <walltime> yang digunakan:
 
*'''HH:MM:SS'''. Contoh alokasi 10 jam= #SBATCH --time='''10:00:00'''
*'''D-HH:MM:SS'''. Contoh alokasi 2 hari= #SBATCH --time='''2-00:00:00'''
|14-00:00:00
|-
|-
|
| colspan="4" |''Tim admin dapat membantu user untuk membedakan program MPI dan non-MPI.''
'''#SBATCH --output='''      
* ''Daftar [[Daftar Software Komputasi dan Tutorial Penggunaan|'''software komputasi ALELEON''']] memberikan indikator program MPI atau non-MPI.''
|Output terminal
* ''Dapat pula menghubungi admin untuk diskusi melalui email '''support@efisonlt.com'''.''
|Merekap output terminal dari program user kedalam format text file.  
|}
User memberikan nama file (bebas, satu kata tanpa spasi) dan format file.  
'''''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).  


Format file dibebaskan, misalnya yang sering digunakan format .txt atau .out
* SLURM akan menghentikan job apabila berjalan melebihi time yang dialokasikan,
* SLURM akan menahan job (status PENDING) apabila '''ntasks * time yang dialokasikan lebih besar dari sisa Core Hour user'''.  
* Untuk mengetahui sisa Core Hour, jalankan perintah <code>'''sausage'''</code> pada terminal.  


Terdapat penamaan ''pattern'' dari SLURM yaitu '''%j yang merekap JOB ID'''.  
=== #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).
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'''.


Contoh pengisian output:
=== #SBATCH --error ===
'''<nowiki>#</nowiki>SBATCH --output=result-%j.txt'''
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:


Ketika job berjalan dengan '''ID 2500''', maka file output bernama '''result-2500.txt'''.
* 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.
'''#SBATCH --error='''
* TIME_LIMIT_80 -> job telah berjalan dengan durasi waktu 80% time limit.
|Output verbose
|Merekap output verbose program (contoh: error log ketika program gagal selesai).
Admin EFISON menyarankan user untuk selalu menggunakan parameter ini.


Berguna untuk melakukan troubleshooting ketika program user gagal berjalan.  
=== 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''']]


Contoh pengisian error output:
== '''Memuat Software dengan module load''' ==
'''<nowiki>#</nowiki>SBATCH --error=error-%j.txt'''
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">
| -
#!/bin/bash
|}


=== '''Menggunakan Compute Node GPU''' ===
# SBATCH ......
Berikut adalah dua parameter tambahan untuk menggunakan compute node GPU ALELEON Supercomputer atau Partisi gpu_ampere: 
{| class="wikitable"
|+Parameter wajib SBATCH SLURM untuk menjalankan job di [[Partisi Aleleon Mk.II|compute node GPU]]
!Paramater
!Resource
!Penjelasan
!Alokasi maksimal
|-
|
'''#SBATCH --partition=gpu_ampere'''
|Partisi GPU     
|Menjalankan job pada partisi compute node GPU ALELEON Supercomputer.
| -
|-
|
'''#SBATCH --gres=gpu:<jumlah-GPU>'''
|GPU                       
|Jumlah GPU yang digunakan.
Contoh menggunakan 2 GPU:
'''$SBATCH --gres=gpu:2'''
|gpu:2
|}


=== '''Menggunakan Paralelisasi Threading Core pada OpenMP atau BLAS''' ===
module load [nama-modul-software]
Berikut adalah parameter untuk mengalokasikan threading para program paralel yang menggunakan metode OpenMP (OMP), hybrid MPI/OMP, atau terintegrasi dengan BLAS:
{| class="wikitable"
|+Parameter SBATCH SLURM untuk menjalankan threading CPU
!Parameter
!Resource
!Penjelasan
!Alokasi maksimal
|-
|
'''#SBATCH --cpus-per-task='''   
|Threading CPU   
|Jumlah paralelisasi threading per core yang digunakan.
Contoh mengalokasikan paralelisasi 8 threading per core:
'''<nowiki>#</nowiki>SBATCH --cpus-per-task=8'''
|64 atau 128 untuk Pure OMP.
4 atau 8 untuk Hybrid MPI/OMP.
|}
 
=== Pengiriman Status Jalannya Job via E-mail ===
SLURM pada ALELEON Supercomputer dapat mengirim pesan email kepada user untuk mengabarkan apabila job komputasi user sudah berjalan atau selesai. SLURM ALELEON Supercomputer menggunakan alamat email '''jojo@efisonlt.com''' dengan nama '''Jojo''' untuk mengirim pesan ke email user.
{| class="wikitable"
|+Parameter email SLURM
!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.
|}
 
== '''Menjalankan Komputasi Paralel Multi-Node''' ==
Ketika membutuhkan kekuatan komputasi atau jumlah core thread yang besar, user dapat menjalankan komputasi paralel multi-node (lebih dari satu node) pada ALELEON Supercomputer dengan memasukkan jumlah node lebih dari satu. SLURM secara otomatis akan menyebarkan alokasi core thread ntasks ke semua node. Contoh menggunakan 2 node dengan total 128 core thread:
'''#SBATCH --nodes=2
#SBATCH --ntasks=128'''
 
=== Berapa Jumlah Minimal ntasks untuk Menggunakan Multi-Node? ===
Tidak ada jawaban pasti atas jawaban ini karena '''setiap software komputasi mempunyai karakteristik optimasi performa yang berbeda-beda'''. Ambil contoh user akan menggunakan 96 atau 128 core thread untuk menjalankan software komputasi. Dengan 128 core thread per node pada ALELEON Supercomputer, akan terdapat 2 skenario yang umum terjadi:


* '''Skenario 1:''' Software tersebut berjalan optimal pada 1 node karena mempunyai pemograman paralelisasi threading yang efisien.
# Alur jalannya program ...
* '''Skenario 2:''' Software tersebut berjalan lebih lambat dibandingkan dengan jumlah core yang lebih kecil (contoh 64 core) pada 1 node dan ternyata berjalan optimal ketika dipecah ke 2 node karena mempunyai pemograman yang, misalnya, membutuhkan cache L3 per task yang besar.
</syntaxhighlight>'''''Keterangan:'''''  


Skenario apa yang akan terjadi? User dapat mengetahuinya dengan melakukan tes benchmark sendiri ('''perlu disadari akan mengurangi kredit Core Hour user!''') atau bertanya kepada forum software tersebut. Maka dari itu EFISON merumuskan kombinasi nodes dan ntasks untuk komputasi multi-node:
* Tulis <code>module load</code> sebelum menulis script alur jalannya program.
{| class="wikitable"
|+Kombinasi jumlah nodes dan ntasks untuk komputasi multi-node:
!Jumlah nodes
!Rekomendasi EFISON:
Jumlah ntasks setiap kelipatan 64
!Jumlah ntasks setiap kelipatan 128
|-
|1
|1 - 64
|1 - 128
|-
|2
|65 - 128
|129 - 256
|-
|3
|129 - 192
|256 - 384
|}


== '''Contoh SLURM Script''' ==
* 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 merangkum contoh SLURM script untuk penggunaan berbagai skenario komputasi pada laman '''[[Contoh SLURM Script]]'''.
* Daftar modul software yang lengkap dirangkum pada laman [[Katalog Software ALELEON Supercomputer|'''Katalog Software ALELEON Supercomputer''']].
 
=='''Contoh SLURM Script Software Spesifik'''==
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]'''.
 
=='''Membaca Status squeue'''==
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"
|+Daftar STATE yang biasa muncul
!STATE
!Kepanjangan
!Penjelasan
|-
|R
|RUN
|Job berjalan
|-
|PD
|PENDING
|Job tertahan, lihat keterangan NODELIST
|-
|CG
|COMPLETING
|Job selesai dan dalam proses clean-up SLURM
|-
|CA
|CANCELED
|Job dibatalkan oleh user
|-
|PR
|PREEMPETED
|Job dibatalkan oleh sys-admin Aleleon, alasan akan dikabarkan melalui email
|-
|S
|SUSPENDED
|Job ditahan oleh sys-admin Aleleon
|}
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
|Job melewati batas alokasi CPU user (lihat laman QOS User untuk penjelasan lebih lanjut).
|}
'''User dapat lapor admin melalui email [[/cdn-cgi/l/email-protection|[email protected]]] apabila menjumpai NODELIST yang tidak terdapat pada daftar diatas ketika job user tidak berjalan.'''

Revisi terkini sejak 4 Juni 2024 14.42

Berkas:Slurm.jpg

Halaman ini menjelaskan panduan memahami 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.
    • User menentukan sendiri jumlah alokasi komputasi (CPU, RAM, GPU, time limit) yang akan dipakai asalkan tidak melebihi limit.
  3. Apabila butuh, memuat modul software untuk menjalankan komputasi user dengan Module Environment
  4. Alur perintah jalannya program user.
Struktur dan contoh SLURM Submit Script

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 tutorial ini 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 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 akan menahan job (status PENDING) apabila ntasks * time yang dialokasikan lebih besar dari sisa Core Hour user.
  • Untuk mengetahui sisa Core Hour, jalankan perintah sausage pada terminal.

#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).

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.

#!/bin/bash

# SBATCH ......

module load [nama-modul-software]

# Alur jalannya program ...

Keterangan:

  • Tulis module load sebelum menulis script alur jalannya program.