Submit Script ALELEON Supercomputer: Perbedaan antara revisi

Dari ALELEON by EFISON
(→‎Membaca squeue: paraphrasing)
 
(73 revisi perantara oleh pengguna yang sama tidak ditampilkan)
Baris 1: Baris 1:
SLURM adalah software manajemen 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. Selain itu SLURM mencatat penggunaan [[Core Hour]] user.
[[Berkas:Slurm.jpg|nirbing|400x400px]]  
[[Berkas:Slurmm.png|pus|nirbing|700x700px]]


=='''Alur Penggunaan SLURM''' ==
Halaman ini menjelaskan panduan memahami '''Submit Script''' yang merupakan 'formulir' untuk menjalankan komputasi ke Compute Node menggunakan '''sistem manajemen Slurm'''.  
Contoh, user akan menjalankan program bernama 'kerjaan-skripsi'. User membuat '''SLURM submission script''' untuk menjalankan program 'kerjaan-skripsi' di Compute Node.


* Ada baiknya SLURM submission script ditaruh pada satu direktori dengan program yang akan dijalankan. 
=='''Struktur Submit Script'''==
* Penamaan SLURM submission script bisa bebas dimana pada contoh ini bernama 'slurm-skripsi'.
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.


[olala01@login myjob]$ ls
[[Berkas:Slurmsubmitscript.png|al=|nir|jmpl|''Struktur dan contoh SLURM Submit Script'']]
kerjaan-skripsi  '''slurm-skripsi'''
== '''Parameter SBATCH esensial''' ==
Jalankan SLURM submission script tersebut dengan perintah '''sbatch'''. Perhatikan bahwa user akan mendapatkan nomor ID dari job tersebut.  
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.
[olala01@login myjob]$ '''sbatch slurm-skripsi'''
 
Submitted batch job 231
=== Format Penulisan SBATCH ===
User dapat melihat status jalannya job masing-masing dengan perintah '''squeue -u $USER'''.
SBATCH ditulis dengan format <code>'''#SBATCH --''[nama-parameter]''=''[nilai]'''''</code> sesuai contoh berikut:  <syntaxhighlight lang="bash">
[ale01@login hpcg-tutorial]$ '''squeue -u $USER'''
# --- Contoh penulisan SBATCH yang benar
Mon Mar 22 10:43:22 2021
#SBATCH --ntasks=32
              JOBID PARTITION    NAME    USER  ST      TIME  NODES NODELIST(REASON)
#SBATCH --mem=64GB
                231 gpu_amper slurm-sc  olala01  R      2:00       1 epyc01
#SBATCH --time=01:00:00
Job selesai bila sudah tidak terlihat di daftar squeue. Lihat apakah job menghasilkan output yang diinginkan atau tidak.
#SBATCH --output=result-%j.txt
[ale01@login hpcg-tutorial]$ ls
#SBATCH --error=error-%j.txt
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:
# --- Contoh penulisan SBATCH yang salah
[olala01@login myjob]$ '''scancel 231'''
#SBATCH --ntasks = 32
Untuk merangkum alur diatas, berikut adalah daftar perintah yang esensial pada SLURM:
#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 esensial penggunaan SLURM
!Partisi Compute Node
!Perintah
!Menulis SBATCH
!Penjelasan
|-
|
$ sbatch <slurm-submission-script>
|Mengirim SLURM submission script untuk dijalankan di SLURM.
|-
|-
|
|'''epyc''' (Compute Node CPU)
$ squeue
|Merupakan partisi default
|Melihat status dan antrian semua komputasi. Tambahan opsi:


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


== '''SLURM Submission Script''' ==
=== #SBATCH --ntasks, --mem, dan --gpus ===
'''SLURM submission script adalah bash-script yang berisikan alokasi resources (CPU, RAM, waktu, output, dll) dan alur jalannya program'''. Terdapat 4 komponen penting pada SLURM submission script:
ntasks, mem, dan gpus adalah parameter SBATCH utama untuk menentukan alokasi komputasi.  


[[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 HPC Aleleon Mk.II''' ===
Berikut adalah panduan nilai maksimal parameter untuk beberapa skenario penggunaan:
Sebelum menggunakan SLURM, user harus mengetahui spesifikasi dan limitasi hardware dari HPC Aleleon Mk.II dimana dijelaskan pada tabel dibawah ini.
{| class="wikitable"
{| class="wikitable"
|+Partisi Hardware HPC Aleleon Mk.II
! rowspan="2" |Skenario Penggunaan
![[Partisi Aleleon Mk.II|Partisi]]
! colspan="3" |Nilai maksimal
!Keterangan
!Jumlah Node
!Jumlah Core CPU per node
!Jumlah RAM per node
!Jumlah GPU per node
|-
|-
|'''epyc''' (DEFAULT)
!ntasks (CPU)
|compute node CPU
!mem (RAM)
|3
!gpus (GPU)
|128
|250GB
|0
|-
|-
|'''gpu_ampere'''
|Akumulasi ''concurrent'' job fair policy usage<sup>''1''</sup>
|compute node GPU
|1
|128
|128
|125GB
|128GB
|2
|2
|}
=== '''Parameter Resources SBATCH Esensial''' ===
Berikut adalah daftar parameter SBATCH basis yang esensial untuk '''menjalankan job di compute node CPU AMD EPYC:'''
{| class="wikitable"
|+Parameter esensial SBATCH SLURM untuk menjalankan job di [[Partisi Aleleon Mk.II|compute node CPU (partisi epyc)]]
!Parameter
!Penjelasan
|-
|-
|#SBATCH --ntasks=<cpu-cores>
|Job non-MPI di epyc (Compute Node CPU)''<sup>2</sup>''
|Jumlah alokasi cores CPU yang akan dipakai. Contoh mengalokasikan 64 core CPU:
|128
<nowiki>#</nowiki>SBATCH --ntasks=64
|240GB
|0
|-
|-
|#SBATCH --mem=<mem-capacity>
|Job MPI di epyc (Compute Node CPU)<sup>''3''</sup>
|Jumlah alokasi memori RAM. User bisa menetapkan satuan apapun namun kami merekomendasikan satuan GB. Contoh mengalokasikan memori 64GB:
|384
<nowiki>#</nowiki>SBATCH --mem=64GB
|240GB
|0
|-
|-
|#SBATCH --time=<walltime>
|Semua jenis job di high-mem node epyc''<sup>4</sup>''
|Waktu maksimal yang dialokasikan untuk job. Walltime maksimal yang diizinkan saat ini adalah 14 hari. Format waktu <walltime> yang digunakan:
|128
 
|500GB
* HH:MM:SS. Contoh alokasi 10 jam= #SBATCH --time=10:00:00
|0
* D-HH:MM:SS. Contoh alokasi 2 hari= #SBATCH --time=2-00:00:00
|-
|-
|#SBATCH --output=<output-file>
|Semua jenis job di ampere (Compute Node GPU)''<sup>5</sup>''
|Merekap output terminal dari program user. Terdapat variabel spesial yaitu %j untuk merekap JOB ID. Format file dibebaskan. Contoh:
|32
<nowiki>#</nowiki>SBATCH --output=hasil-%j.out
|120GB
|2
|-
|-
|#SBATCH --error=<error-file>
| colspan="4" |''Tim admin dapat membantu user untuk membedakan program MPI dan non-MPI.''
|Merekap output verbose program, berguna untuk melakukan troubleshooting dikala program user tidak berjalan. Contoh:
* ''Daftar [[Daftar Software Komputasi dan Tutorial Penggunaan|'''software komputasi ALELEON''']] memberikan indikator program MPI atau non-MPI.''
<nowiki>#</nowiki>SBATCH --error=hasil-%j.err
* ''Dapat pula menghubungi admin untuk diskusi melalui email '''support@efisonlt.com'''.''
|}
|}
Tambahkan parameter berikut apabila ingin '''menjalankan job di compute node GPU NVIDIA Ampere:'''
'''''Keterangan:'''''
{| class="wikitable"
# Limitasi '''fair policy usage''' untuk menjaga kualitas layanan ALELEON Supercomputer.
|+Parameter SBATCH SLURM untuk menjalankan job di [[Partisi Aleleon Mk.II|compute node GPU (partisi gpu_ampere)]]
#* User dapat mengajukan permintaan membuka limitasi apabila job membutuhkan alokasi lebih.
!Paramater
#* Info lebih detail lihat laman [[Limitasi Fair Usage ALELEON Supercomputer|'''Limitasi Fair Usage ALELEON Supercomputer''']]
!Penjelasan
# 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
|#SBATCH --partition=gpu_ampere
#* Pada jumlah ntasks >128, SLURM otomatis menjalankan job secara multi-node.
|Memasukan job ke compute node GPU
#* Dalam kaitan ini, parameter mem adalah alokasi memori RAM per-node.
|-
#* Info lebih detail lihat laman [[MPI ALELEON Supercomputer|'''MPI ALELEON Supercomputer''']].
|#sbatch --gres=gpu:<jumlah-GPU>
#Partisi epyc mempunyai satu node dengan jumlah memori 500GB yaitu epyc001.
|Contoh menggunakan 2 GPU:
##Tambahkan parameter '''<code>#SBATCH --nodelist=epyc001</code>'''
$SBATCH --gres=gpu:2
#Jangan lupa untuk menggunakan compute node GPU, tambahkan parameter '''<code>#SBATCH --partition=ampere</code>'''
|}
=== #SBATCH --time ===
Apabila terjadi kesalahan parameter SLURM, user tetap bisa melakukan sbatch namun job tidak berjalan (tidak muncul di squeue). User dapat melihat pesan error pada file output .err yang dihasilkan dari #SBATCH --error.
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 <code>'''sausage'''</code> 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 <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.


== '''Contoh SLURM Submission Script Satu Node CPU''' ==
=== '''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:


=== '''SLURM Satu Node'''  ===
* BEGIN -> notifikasi job sudah mulai
Program akan berjalan dengan jumlah core CPU dan RAM yang definisikan pada parameter SBATCH ntasks dan mem. Contoh lengkap SLURM submission script dengan CPU 128 threads dan RAM 16GB:
* END -> notifikasi job sudah selesai beserta cuplikan 20 baris terakhir dari file SBATCH output dan error.
#!/bin/bash
* FAIL -> notifikasi apabila job gagal berjalan atau berhenti tidak sewajarnya.
* TIME_LIMIT_50 -> job telah berjalan dengan durasi waktu 50% time limit.  
#SBATCH --ntasks=128
* TIME_LIMIT_80 -> job telah berjalan dengan durasi waktu 80% time limit.
#SBATCH --mem=16GB
#SBATCH --time=00:10:00
#SBATCH --output=result-%j.out
#SBATCH --error=result-%j.err
# MODULE
# module load software yang dibutuhkan
# RUN COMMAND
# run command software...


=== '''SLURM Satu Node MPI'''  ===
=== SBATCH lainnya untuk job MPI ===
User hendaknya menggunakan modul MPI default yang direkomendasikan admin EFISON:
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''']]
$ module load openmpi
Perhatikan bahwa '''jumlah task mpirun tidak boleh melebihi ntasks''' pada SBATCH. Selain itu, masukkan '''parameter UCX pada perintah mpirun untuk memanfaatkan protokol UCX''' (Unified Communication X) guna mendapatkan performa lebih:
--mca pml ucx --mca osc ucx
Contoh lengkap SLURM submission script dengan CPU 64 core, RAM 32GB, dan proses MPI 64:
#!/bin/bash
#SBATCH '''--ntasks=64'''
#SBATCH --mem=32GB
#SBATCH --time=1:00:00
#SBATCH --output=result-%j.out
#SBATCH --error=result-%j.err
# MODULE
module load openmpi
# dan module load lain yang dibutuhkan
# RUN COMMAND
'''mpirun -np 64''' '''--mca pml ucx --mca osc ucx''' <program-MPI...>


=== '''SLURM Satu Node MPI + OpenMP''' ===
== '''Memuat Software dengan module load''' ==
Contoh: user ingin menggunakan 128 threads CPU dengan pembagian 16 MPI processes dam 8 OMP thread per MPI (Total CPU terpakai = MPI x OMP. Penjelasan lebih detail kunjungi Hybrid MPI dan OMP). Pada SLURM, '''user mendeklarasikan variabel OMP melalui parameter SLURM_CPUS_PER_TASK dan SBATCH cpus-per-task.'''
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">
{| class="wikitable"
#!/bin/bash
|+Parameter SBATCH SLURM untuk OpenMP / Hybrid
!Parameter
!Penjelasan
|-
|#SBATCH --cpus-per-task=<cpu-task>
|Jumlah komputasi CPU per ntask. Bila diterapkan ke MPI-OMP artinya jumlah OMP per MPI.
|}
Berikut adalah contoh lengkap SLURM submission script dengan 16 proses MPI, 8 OMP per MPI, dan RAM 128GB. Perhatikan bahwa jumlah proses MPI mengikuti ntasks.
#!/bin/bash
#SBATCH --ntasks='''16'''
'''#SBATCH --cpus-per-task=8'''
#SBATCH --mem=128GB
#SBATCH --time=1-00:00:00
#SBATCH --output=result-%j.out
#SBATCH --error=result-%j.err
# MODULE
module load openmpi
# dan modul lain yang dibutuhkan
# RUN COMMAND
'''export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK}'''
mpirun -np '''16''' --mca pml ucx --mca osc ucx <program-MPI...>


== '''Contoh SLURM Submission Script Banyak Node CPU''' ==
# SBATCH ......
Pada HPC, program dengan dukungan komputasi paralel (seperti MPI dan ekstensi lib. paralel lainnya) dapat dijalankan secara paralel dengan banyak node sekaligus. '''SLURM menggunakan parameter SBATCH nodes dan ntasks-per-node''' untuk menjalankan komputasi paralel banyak node.
{| class="wikitable"
|+Parameter SBATCH SLURM untuk banyak node
!Parameter
!Penjelasan
|-
|#SBATCH --nodes=<nodes>
|Jumlah node yang akan dipakai.
|-
|#SBATCH --ntasks-per-node=<cpu-cores>
|Jumlah ntasks per node.
|}
'''Sementara itu jumlah memori yang dideklarasikan (SBATCH mem) adalah dan sudah otomatis per node''' (sehingga nilai maksimal 250GB). Tidak ada parameter total mem atau mem-per-node.


=== '''SLURM Banyak Node MPI''' ===
module load [nama-modul-software]
'''Perhatikan bahwa total task MPI task adalah nodes X ntasks-per-node'''. Contoh ketika user ingin menggunakan 2 node, 128 threads per node, dan RAM 192GB per node maka konfigurasi SBATCH menjadi:
#SBATCH --nodes=2
#SBATCH --ntasks-per-node=128
#SBATCH --mem=192GB
Total proses MPI dari konfigurasi tersebut adalah 2 x 128 = '''256 proses MPI'''. Berikut adalah contoh lengkap SLURM submission script untuk menjalankan konfigurasi diatas:
#!/bin/bash
#SBATCH --nodes=2
#SBATCH --ntasks-per-node=128
#SBATCH --mem=192GB
#SBATCH --time=10:00:00
#SBATCH --output=chem-%j.out
#SBATCH --error=chem-%j.out
# MODULE
module load openmpi
# atau modul lain yang dibutuhkan
# RUN COMMAND
'''mpirun -np 256''' --mca pml ucx --mca osc ucx <program-MPI...>
=== '''SLURM Banyak Node MPI + OpenMP''' ===
Kita gunakan contoh MPI + OpenMP sebelumnya dengan 16 ntasks dan 8 cpus-per-task (16 proses MPI dan 8 OMP per MPI) per node. Bila dijalankan 2 node misalnya, maka parameter akan menjadi:
#SBATCH --nodes=2
#SBATCH --ntasks-per-node=16
#SBATCH --cpus-per-task=8
Total proses MPI tetap mengikuti aturan nodes x ntasks-per-node yaitu 2 x 16 = 32 proses MPI. Contoh lengkap SLURM submission script:
#!/bin/bash
#SBATCH --nodes=2
#SBATCH --ntasks-per-node=16
#SBATCH --cpus-per-task=8
#SBATCH --mem=128GB
#SBATCH --time=1-00:00:00
#SBATCH --output=result-%j.out
#SBATCH --error=result-%j.err
# MODULE
module load openmpi
# atau modul yang dibutuhkan
# RUN COMMAND
'''export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK}'''
mpirun -np 32 --mca pml ucx --mca osc ucx <program-MPI...>


== '''Contoh SLURM Submission Script GPU''' ==
# Alur jalannya program ...
Contoh SLURM Submission script dengan 2 GPU, 16 CPU, dan RAM 32GB:
</syntaxhighlight>'''''Keterangan:'''''  
#!/bin/bash
'''#SBATCH --partition=gpu_ampere
#SBATCH --gres=gpu:2'''
#SBATCH --ntasks=16
#SBATCH --mem=32GB
#SBATCH --time=1:00:00
#SBATCH --output=result-%j.out
#SBATCH --error=result-%j.err
# MODULE
# module load yang dibutuhkan
# RUN COMMAND
# run command software...


== '''Contoh SLURM Submission Script Software Spesifik''' ==
* Tulis <code>module load</code> sebelum menulis script alur jalannya program.
Terdapat software yang membutuhkan contoh SLURM submission script spesifik supaya dapat berjalan dengan baik. Kunjungi [[Software di HPC Aleleon Mk.II|'''Software di HPC Aleleon Mk.II''']].


== '''Membaca squeue''' ==
* 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.
Sesuai penjelasan diatas, user dapat melihat status dan antrian jalannya program melalui perintah squeue.
* Daftar modul software yang lengkap dirangkum pada laman [[Katalog Software ALELEON Supercomputer|'''Katalog Software ALELEON Supercomputer''']].
[[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 support@efisonlt.com 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.