Submit Script ALELEON Supercomputer: Perbedaan antara revisi

Dari ALELEON by EFISON
(→‎Struktur Submit Script: menambah contoh script)
 
(31 revisi perantara oleh pengguna yang sama tidak ditampilkan)
Baris 1: Baris 1:
Halaman ini menjelaskan panduan memahami dan mengisi parameter resources pada SLURM Script beserta contohnya berdasarkan hardware ALELEON Supercomputer.   
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.   


== '''Say Hello to ////''' ==
=='''Struktur Submit Script'''==
Tanda 4 garing (////) digunakan oleh admin EFISON untuk '''menandai bagian yang perlu diisi oleh user'''. Contoh terdapat bagian script untuk menaruh nama file input:  
Submit Script mempunyai 4 bagian utama:
file_input="////"
Artinya user mengisi nama file input dengan menggantikan tanda //// di dalam braket tanda petik, contoh menjadi:
file_input="'''nasigoreng.inp'''"


=='''Memahami Struktur SLURM Script'''==
#Header '''#!/bin/bash''' (karena script ini ditulis dengan bahasa bash)
Secara umum, Submit Script atau SLURM Script dipecah menjadi 4 bagian penting.
#'''Parameter SBATCH''' untuk mengalokasikan resources job seperti CPU, RAM, GPU, time, dll.
[[Berkas:Jcscriptrev.png|nir|jmpl|624x624px|'''Contoh template EFIRO Job Composer untuk menjalankan program ORCA''']]
#*''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.''
Penjelasan bagian dari SLURM Script:
# 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.


# Header '''#!/bin/bash''' karena SLURM Script adalah bash script.
[[Berkas:Slurmsubmitscript.png|al=|nir|jmpl|''Struktur dan contoh SLURM Submit Script'']]Berikut adalah beberapa contoh nyata Submit Script:
# '''Parameter SBATCH''' untuk mengalokasikan resources job seperti CPU, RAM, GPU, time, dll.
# [[Module Environment|'''Memuat software yang dibutuhkan untuk menjalankan job user dengan Module Environment.''']] Apabila user tidak memuat modul software yang benar maka job tidak akan berjalan.
# Perintah utama untuk menjalankan program user.


== '''Template SLURM Script di Job Composer EFIRO''' ==
* Template Submit Script untuk masing-masing software komputasi tersedia di laman [[Daftar Software Komputasi dan Tutorial Penggunaan|'''Daftar Software Komputasi dan Tutorial Penggunaan''']]
Admin EFISON menyediakan berbagai '''template SLURM Script''' untuk berbagai jenis penggunaan dan software pada halaman Template Job Composer EFIRO yang dapat diakses user saat membuat job baru di Job Composer.


* Template untuk menjalankan software komputasi seperti GROMACS, NWChem, QE, dll telah dirancang sedemikian rupa supaya '''user hanya perlu mengisi parameter SBATCH yang telah disediakan dan nama file input'''. User juga dapat melihat penjelasan lebih detail pada masing-masing halaman software komputasi di [[Katalog Software ALELEON Supercomputer#Daftar%20Software%20Komputasi%20.28Global.29|'''daftar software komputasi ALELEON Supercomputer''']].  
{| class="wikitable mw-collapsible mw-collapsed"
!Contoh Submit Script menjalankan software R
|-
|<syntaxhighlight lang="bash" line="1">
#!/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


* Admin EFISON juga menyediakan template untuk menjalankan skenario komputasi umum seperti program serial, MPI, Hybrid MPI/OMP, Pure OMP, dll dan telah dirancang untuk berjalan sesuai arsitektur ALELEON Supercomputer.
# -------------------------------------------------
* User dapat menyampaikan permintaan ke admin perihal pembuatan template SLURM Script untuk kebutuhan tertentu yang belum ada di EFIRO.
# 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">
#!/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.
# ------------------------------------------------------------------------


=='''Resources ALELEON Supercomputer di SLURM'''==
# --------------------------------------------------
Sebelum menentukan alokasi resource job pada SBATCH, user harus mengetahui spesifikasi hardware dari ALELEON Supercomputer:
# Alokasi komputasi, modul software, dan file input
# --------------------------------------------------


* '''Partisi epyc''' atau pengelompokan '''Compute Node CPU.'''
# Partisi compute node GPU
** '''3 Node''' (unit server), '''total 192 core fisik / 384 core thread CPU'''
#SBATCH --partition=ampere
** Masing-masing node berisikan:
*** 64 core fisik / 128 core thread CPU
*** RAM 240GB.
** Secara default, komputasi pada ALELEON Supercomputer diarahkan ke Partisi epyc.
* '''Partisi gpu_ampere''' atau pengelompokan '''Compute Node GPU'''
** '''1 Node''', '''total 2 GPU'''
*** CPU 64 core fisik / 128 core thread CPU
*** RAM 125GB.


Info lebih detail dapat dipelajari pada laman '''[[Spesifikasi ALELEON Supercomputer]]'''.
# Alokasi jumlah GPU
#SBATCH --gpus=1


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


==='''Core Thread CPU pada ALELEON Supercomputer'''===
# Rekomendasi 2 thread OMP secara umum
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'''. 
#SBATCH --cpus-per-task=2


Secara default, '''penggunaan CPU pada ALELEON Supercomputer didasarkan pada core thread, termasuk [[Core Hour|penghitungan penggunaan komputasi CPU Core Hour user]]'''.
# Alokasi jumlah memori RAM (satuan GB)
#SBATCH --mem=64GB


=='''Parameter Resources SBATCH Esensial'''==
# Alokasi limit waktu menjalankan job
Terdapat ratusan jenis [https://slurm.schedmd.com/sbatch.html parameter SBATCH pada SLURM] dari yang standar hingga ''advanced''. Admin EFISON merangkum penjelasan parameter esensial yang digunakan pada berbagai template SLURM Script di EFIRO.
#SBATCH --time=10:00:00


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


=== Menggunakan Compute Node CPU / Partisi epyc ===
# Definisi file untuk menampung output error log   
Berikut adalah parameter SBATCH yang direkomendasikan dan secara umum dapat digunakan untuk semua jenis job:
#SBATCH --error=error-%j.txt  
#SBATCH --nodes=////
#SBATCH --ntasks=////
  #SBATCH --mem=////
#SBATCH --time=////
#SBATCH --output=////
#SBATCH --error=////


* '''nodes'''
# Nama input file LAMMPS dengan format file-nya
** Alokasi jumlah '''node''' yang digunakan.
INPUT_FILE='zobarne.lammps'  
** Contoh mengalokasikan 1 node: '''#SBATCH --nodes=1'''
** Nilai maksimal nodes = '''3'''
* '''ntasks'''
** Alokasi jumlah '''core thread CPU''' yang digunakan.
** Contoh mengalokasikan 32 core thread CPU: '''#SBATCH --ntasks=32'''
** Nilai maksimal ntasks = '''384'''
* '''mem'''
** Alokasi '''kapasitas RAM''' '''per node''' yang digunakan, diikuti dengan satuan KB, MB, atau GB.
** Contoh mengalokasikan RAM 32GB: '''#SBATCH --mem=32GB'''
** Nilai maksimal mem = '''240GB'''
* '''time'''
** Alokasi '''walltime (waktu maksimal)''' yang diizinkan untuk menjalankan job, mengikuti format penulisan:
*** HH:MM:SS. Contoh alokasi 2 jam: '''#SBATCH --time=02:00:00'''
*** D-HH:MM:SS. Contoh alokasi 2 hari: '''#SBATCH --time=2-00:00:00'''
** Nilai maksimal walltime = '''14-00:00:00'''
* '''output'''
** Merekap '''output program yang keluar di terminal'''. User memberikan sendiri nama file (satu kata tanpa spasi) diikuti dengan format file seperti .txt atau .out yang sering digunakan.
** Terdapat penamaan pattern dari SLURM yaitu '''%j''' yang merekap job-ID.
** Contoh penamaan output yang sering digunakan: '''#SBATCH --output=result-%j.txt'''
** Apabila job berjalan dengan no. ID 2555, maka nama output menjadi '''result-2555.txt'''
* '''error'''
** Merekap '''output verbose program''' yaitu status jalannya program seperti "job sudah berjalan!" dan error log ketika program gagal selesai.
** Output error sangat bermanfaat bagi user untuk melakukan troubleshooting disaat program gagal berjalan. Admin EFISON selalu merekomendasikan user untuk selalu menggunakan parameter error ini.
** Format penamaan mengikuti parameter output diatas, contoh: '''#SBATCH --error=error-%j.txt'''
---


=== Menggunakan Compute Node GPU / Partisi gpu_ampere ===
# Memuat modul software LAMMPS versi GPU
Secara umum mengikuti format SBATCH yang sama dengan menggunakan Partisi epyc, diikuti dengan tambahan:
module load lammps/2022.06.23u4-GCC11.3-AOCL4.0-CUDA12.1
'''#SBATCH --partition=gpu_ampere'''
'''#SBATCH --gres=gpu:////'''
#SBATCH --ntasks=////
#SBATCH --mem=////
#SBATCH --time=////
#SBATCH --output=////
#SBATCH --error=////


* '''partition=gpu_ampere'''
# -------------------------------------------------
** Mengalokasikan job ke Compute Node GPU gpu_ampere
# RUN SCRIPT
* '''gres=gpu:<jumlah-GPU>'''
# -------------------------------------------------
** Alokasi '''Jumlah GPU''' yang digunakan.
** Contoh mengalokasikan 1 GPU: '''#SBATCH --gres=gpu:1'''
** Nilai maksimal GPU = '''gpu:2'''
* Nilai maksimal ntasks = '''128'''
* Nilai maksimal mem = '''125GB'''
* Nilai maksimal walltime = '''14-00:00:00'''


---
# Export threading OMP
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK


=== Notifikasi Status Jalannya Job via E-mail ===
# Perintah menjalankan LAMMPS
SLURM pada 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. User dapat menambahkan parameter berikut untuk menerima notifikasi email dari SLURM:
mpirun --mca pml ucx --mca osc ucx --np $SLURM_NTASKS lmp -sf gpu -pk gpu $SLURM_GPUS -in $INPUT_FILE
#SBATCH --mail-user=////
</syntaxhighlight>
#SBATCH --mail-type=begin
|}
#SBATCH --mail-type=end


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


---
=== 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


==='''Menggunakan Paralelisasi Threading OpenMP atau BLAS'''===
# --- Contoh penulisan SBATCH yang salah
Berikut adalah parameter untuk mengalokasikan threading per core para program yang menggunakan paralelisasi OpenMP (OMP), hybrid MPI/OMP, atau terintegrasi dengan BLAS:
#SBATCH --ntasks = 32
#SBATCH --cpus-per-task=////
#SBATCH --mem= 64GB
#SBATCH --mem = 64 GB
# diikuti dengan pengalokasikan threads contoh dengan OMP:
</syntaxhighlight>
export OMP_NUM_THREADS='''$SLURM_CPUS_PER_TASK'''
=== #SBATCH --partition ===
Menentukan jenis partisi (Compute Node) untuk menjalankan job komputasi user. ALELEON Supercomputer mempunyai 2 partisi Compute Node:  
{| class="wikitable"
!Partisi Compute Node
!Menulis SBATCH
|-
|'''epyc''' (Compute Node CPU)
|Merupakan partisi default


* cpus-per-task
* user tidak perlu menulis SBATCH parameter untuk epyc
** Alokasi jumlah threading per ntasks.
|-
** User mendefinisikan jumlah threading ke ''environment variable'' (contoh ke OMP_NUM_THREADS) dengan variabel '''$SLURM_CPUS_PER_TASK.'''
|'''ampere''' (Compute Node GPU)
** Contoh mengalokasikan 4 thread per core: '''$SBATCH --cpus-per-task=4'''
|<code>#SBATCH --partition=ampere</code>
|}


=='''Dasar Menentukan Alokasi nodes, ntasks, dan mem'''==
=== #SBATCH --ntasks, --mem, dan --gpus ===
Penggunaan superkomputer pada umumnya dan ALELEON Supercomputer membebaskan user dalam memilih alokasi resources komputasi yaitu jumlah node, core thread CPU, dan RAM. '''Terdapat beberapa aturan yang harus diketahui supaya user dapat mengalokasikan resources komputasi dengan benar dan efisien di ALELEON Supercomputer:'''
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'''.


===Menentukan Jumlah Node===
Berikut adalah panduan nilai maksimal masing-masing parameter untuk beberapa skenario penggunaan.
Jumlah node ditentukan dari jenis program yang dijalankan yaitu program MPI dan non-MPI:
*Program MPI adalah program yang ditulis berdasarkan pemodelan MPI ('''Message Parallel Interface''') di mana '''dapat berjalan secara paralel atau lebih dari satu node (multi-node)'''. Berjalan multi-node artinya dapat memanfaatkan lebih dari 128 core thread CPU pada ALELEON Supercomputer.
*Program non-MPI adalah program yang tidak ditulis dengan pemodelan MPI atau paralel sehingga '''hanya dapat berjalan pada 1 node.'''
{| class="wikitable"
{| class="wikitable"
!Jenis Program
! rowspan="2" |Skenario Penggunaan
!Jumlah Node
! 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
|-
|Job MPI di epyc (Compute Node CPU)<sup>''3''</sup>
|384
|240GB
|0
|-
|-
|Non-MPI
|Semua jenis job di high-mem node epyc''<sup>4</sup>''
|1
|128
|500GB
|0
|-
|-
|MPI atau paralel
|Semua jenis job di ampere (Compute Node GPU)''<sup>5</sup>''
|1 atau lebih
|32
|}Apabila user menjalankan program komputasi yang tersedia di ALELEON Supercomputer, user dapat mengetahui bahwa program tersebut adalah MPI atau tidak dengan memperhatikan kolom "Dukungan MPI" di [https://wiki.efisonlt.com/wiki/Katalog_Software_ALELEON_Supercomputer#Daftar_Software_Komputasi_.28Global.29 '''tabel daftar software komputasi ALELEON Supercomputer''']
|120GB
|2
|-
| colspan="4" |''Tim admin dapat membantu user untuk membedakan program MPI dan non-MPI.''
* ''Daftar [[Daftar Software Komputasi dan Tutorial Penggunaan|'''software komputasi ALELEON''']] memberikan indikator program MPI atau non-MPI.''
* ''Dapat pula menghubungi admin untuk diskusi melalui email '''support@efisonlt.com'''.''
|}
'''''Keterangan:'''''
# Limitasi '''fair policy usage''' untuk menjaga kualitas layanan ALELEON Supercomputer.
#* User dapat mengajukan permintaan membuka limitasi apabila job membutuhkan alokasi lebih.
#* Info lebih detail lihat laman [[Limitasi Fair Usage ALELEON Supercomputer|'''Limitasi Fair Usage ALELEON Supercomputer''']]
# Program non-MPI hanya dapat berjalan satu node (maks 128 core di epyc dan 32 core di ampere).
# Program MPI dapat berjalan ''multi-node (parallel computing)'' pada Partisi epyc yaitu lebih dari 128 core
#* Pada jumlah ntasks >128, SLURM otomatis menjalankan job secara multi-node.
#* Dalam kaitan ini, parameter mem adalah alokasi memori RAM per-node.
#* Info lebih detail lihat laman [[MPI ALELEON Supercomputer|'''MPI ALELEON Supercomputer''']].
#Partisi epyc mempunyai satu node dengan jumlah memori 500GB yaitu epyc001.
##Tambahkan parameter '''<code>#SBATCH --nodelist=epyc001</code>'''
#Jangan lupa untuk menggunakan compute node GPU, tambahkan parameter '''<code>#SBATCH --partition=ampere</code>'''
=== #SBATCH --time ===
Alokasi waktu maksimal untuk menjalankan job. Ditulis dengan format HH:MM:SS atau D-HH:MM:SS. ALELEON Supercomputer mengizinkan time maksimal 3 hari per job (72:00:00 atau 3-00:00:00).
 
* 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
===Jumlah Core Thread CPU: Kelipatan 4===
* END -> notifikasi job sudah selesai beserta cuplikan 20 baris terakhir dari file SBATCH output dan error.
Berdasarkan arsiktektur CPU AMD yang digunakan oleh ALELEON Supercomputer, user direkomendasikan untuk memilih jumlah core thread CPU (ntasks) berdasarkan kelipatan 4, dimulai dari 1,2,4, kemudian naik kelipatan 4 menjadi 8, 12, 16, 20, 24, 28, 32, 36, 40, dan seterusnya.
* 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 ===
=== Semakin Besar Jumlah Core CPU = Komputasi Semakin Cepat?===
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''']]
Bisa iya bisa tidak. Besar jumlah core CPU yang dibutuhkan bergantung pada:
*'''Apabila menjalankan program CPU:''' bergantung pada '''besarnya skala input komputasi user'''. Admin ALELEON Supercomputer sepenuhnya menyerahkan tanggung jawab kepada user untuk mengetahui sendiri apakah input komputasi yang dijalankan adalah skala kecil atau besar.
**Input komputasi skala kecil cukup membutuhkan jumlah core kecil (rekomendasi dibawah 16) dan bisa jadi lambat apabila dijalankan dengan jumlah core besar.
**Input komputasi skala besar dapat menggunakan jumlah core CPU yang besar seperti 32, 64, 128, atau diatasnya.
*'''Apabila menjalankan program GPU:''' kebanyakan membutuhkan jumlah core kecil karena pada dasarnya semua komputasi dikerjakan oleh GPU. Cukup jarang ada program GPU yang membutuhkan jumlah core CPU besar.
---
===Memperkirakan Kapasitas RAM yang Digunakan===
Tidak ada aturan baku untuk mengetahui hal ini karena bergantung dengan jenis software dan besarnya skala input yang dijalankan user. Admin EFISON dapat memberikan saran '''untuk menggunakan jumlah RAM 0.5GB per ntasks sebagai basis'''. Contoh:
*ntasks=8, alokasikan mem 4GB.
*ntasks=32, alokasikan mem 16GB.
User dapat menggunakan kapasitas RAM yang lebih besar (contoh 2GB per ntasks atau lebih) apabila user mengetahui bahwa program yang dijalankan membutuhkan kapasitas RAM besar atau program gagal berjalan dengan alokasi RAM 0.5GB per ntasks.


== '''Optimasi Performa pada SLURM Script''' ==
== '''Memuat Software dengan module load''' ==
ALELEON Supercomputer dan arsitektur AMD EPYC mempunyai beberapa '''aturan khusus supaya user dapat memanfaatkan kemampuan komputasinya dengan optimal.''' Aturan ini telah dituangkan pada template SLURM Script untuk beberapa skenario komputasi seperti program serial, MPI, Hybrid MPI/OMP, penggunaan BLAS, dan masih banyak lagi. 
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:'''''  


Admin EFISON merangkum aturan optimasi performa untuk menggunakan ALELEON Supercomputer dengan efisien di: 
* Tulis <code>module load</code> sebelum menulis script alur jalannya program.


[[Berkas:Wiki-13.jpg|1000x1000px |link=Optimasi Performa ALELEON Supercomputer| alt=Optimasi Performa ALELEON Supercomputer ]]
* 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.