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)
(Massive paraphrasing, menetapkan standarisasi nama ALELEON Supercomputer dan core thread)
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.   
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:Slurmm.png|pus|nirbing|700x700px]]
 
[[Berkas:Slurmm.png|al=|nirbing|700x700px]]


== '''Perintah Dasar SLURM''' ==
== '''Perintah Dasar SLURM''' ==
Baris 26: Baris 27:


=='''Contoh Penggunaan SLURM'''==
=='''Contoh Penggunaan SLURM'''==
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'.   
'''User akan menjalankan program bernama 'skripsi' di Compute Node.''' User membuat '''SLURM script''' yang berisikan alokasi resources dan perintah untuk menjalankan program 'skripsi'.   


* Ada baiknya SLURM script ditaruh pada satu direktori dengan program yang akan dijalankan.
* 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'.
* Penamaan SLURM script bisa bebas dimana pada contoh ini bernama 'slurm-skripsi'.
  [olala01@login myjob]$ ls
  $ ls
  kerjaan-skripsi  '''slurm-skripsi'''
  skripsi  '''slurm-skripsi'''
Jalankan SLURM submission script tersebut dengan perintah '''sbatch'''. Perhatikan bahwa user akan mendapatkan nomor ID dari job tersebut.  
Jalankan SLURM submission script tersebut dengan perintah '''sbatch'''. Perhatikan bahwa user akan mendapatkan nomor ID dari job tersebut.  
  [olala01@login myjob]$ '''sbatch slurm-skripsi'''
  $ '''sbatch slurm-skripsi'''
  Submitted batch job 231
  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.  
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'''
  $ '''squeue -u $USER'''
  Mon Mar 22 10:43:22 2021
  Mon Mar 22 10:43:22 2021
               JOBID PARTITION    NAME    USER  ST      TIME  NODES NODELIST(REASON)
               JOBID PARTITION    NAME    USER  ST      TIME  NODES NODELIST(REASON)
                 231 gpu_amper slurm-sc  olala01  R      2:00      1 epyc01
                 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.
Job selesai bila sudah tidak terlihat di daftar squeue. Lihat apakah job menghasilkan output yang diinginkan atau tidak.
  [olala01@login myjob]$ ls
  $ ls
  kerjaan-skripsi  slurm-skripsi  result-231.out result-231.err
  skripsi  slurm-skripsi  result-231.txt semogahasilnyabenarbiarcepatlulus.txt
Apabila user ingin membatalkan program yang tengah berjalan via SLURM, gunakan perintah '''scancel''' job ID:  
Apabila user ingin membatalkan program yang tengah berjalan via SLURM, gunakan perintah '''scancel''' job ID:  
  [olala01@login myjob]$ '''scancel 231'''
  $ '''scancel 231'''
== '''SLURM Script''' ==
== '''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:  
'''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:  
Baris 54: Baris 55:
# Alur perintah untuk menjalankan komputasi user.
# Alur perintah untuk menjalankan komputasi user.


=== '''Resources HPC Aleleon Mk.II''' ===
=='''Resources ALELEON Supercomputer'''==
Sebelum menggunakan SLURM, user harus mengetahui alokasi maksimal hardware dari HPC Aleleon Mk.II yang dijelaskan pada tabel dibawah ini.
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 HPC Aleleon Mk.II
|+Partisi Hardware ALELEON Supercomputer
![[Partisi Aleleon Mk.II|Partisi]]
!Partisi
!Keterangan
!Keterangan
!Jumlah Node
!Jumlah Node
!Jumlah Core CPU per node
!Jumlah Core Fisik CPU per node
!Jumlah RAM per node
!Jumlah Core Thread CPU per node
!Kapasitas RAM per node
!Jumlah GPU per node
!Jumlah GPU per node
|-
|-
|'''epyc''' (DEFAULT)        
|'''epyc''' (DEFAULT)
|compute node CPU
|compute node '''CPU'''
|3
|3
|64
|128
|128
|250GB
|250GB
Baris 73: Baris 76:
|-
|-
|'''gpu_ampere'''
|'''gpu_ampere'''
|compute node GPU
|compute node '''GPU'''
|1
|1
|64
|128
|128
|125GB
|125GB
|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'''==
=='''Parameter Resources SBATCH Esensial'''==
Terdapat ratusan jenis parameter SBATCH pada SLURM. Berikut adalah parameter esensial yang digunakan pada HPC Aleleon Mk.II.
Terdapat ratusan jenis parameter SBATCH pada SLURM. Admin EFISON merangkum parameter esensial yang digunakan pada ALELEON Supercomputer.
{| class="wikitable"
{| class="wikitable"
|+Parameter esensial SBATCH SLURM untuk menjalankan job di [[Partisi Aleleon Mk.II|Compute Node CPU]] (DEFAULT)
|+Parameter esensial SBATCH SLURM untuk menjalankan job di partisi default yaitu epyc
!Parameter
!Parameter
!Resource
!Resource
!Penjelasan
!Penjelasan
!Alokasi maksimal
|-
|
'''#SBATCH --nodes='''
|Node server
|Alokasi jumlah node yang digunakan.
Contoh mengalokasikan 1 node:
'''#SBATCH --nodes=1'''
|3
|-
|-
|
|
  '''#SBATCH --ntasks='''           
  '''#SBATCH --ntasks='''           
|Core CPU        
|Core thread CPU
|Alokasi jumlah core CPU yang akan digunakan. Contoh mengalokasikan 64 core CPU:
|Alokasi jumlah core thread CPU yang akan digunakan.  
<nowiki>#</nowiki>SBATCH --ntasks='''64'''
Contoh mengalokasikan 32 core thread CPU:
'''<nowiki>#</nowiki>SBATCH --ntasks=32'''
|384
|-
|-
|
|
  '''#SBATCH --mem='''
  '''#SBATCH --mem='''
|Memori RAM
|Memori RAM
|Alokasi memori RAM yang akan digunakan. User bisa menetapkan satuan apapun namun kami merekomendasikan satuan GB. Contoh mengalokasikan memori 64GB:
|Alokasi memori RAM yang akan digunakan.  
<nowiki>#</nowiki>SBATCH --mem='''64GB'''
User bisa menetapkan satuan KB, MB, atau GB.  
 
Contoh mengalokasikan memori 32GB:
'''<nowiki>#</nowiki>SBATCH --mem=32GB'''
|250GB
|-
|-
|
|
  '''#SBATCH --time'''=
  '''#SBATCH --time'''=
|Walltime              
|Walltime
|Waktu maksimal yang dialokasikan untuk job. Walltime maksimal yang diizinkan saat ini adalah 14 hari. Format waktu <walltime> yang digunakan:  
|Waktu maksimal yang dialokasikan untuk job.  
Format waktu <walltime> yang digunakan:  


* '''HH:MM:SS'''. Contoh alokasi 10 jam= #SBATCH --time='''10:00:00'''
*'''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'''
*'''D-HH:MM:SS'''. Contoh alokasi 2 hari= #SBATCH --time='''2-00:00:00'''
|14-00:00:00
|-
|-
|
|
  '''#SBATCH --output='''       
  '''#SBATCH --output='''       
|Output terminal    
|Output terminal
|Merekap output terminal dari program user. Terdapat variabel spesial yaitu %j untuk merekap JOB ID. Format file dibebaskan. Contoh:
|Merekap output terminal dari program user kedalam format text file.
<nowiki>#</nowiki>SBATCH --output='''hasil-%j.out'''
User memberikan nama file (bebas, satu kata tanpa spasi) dan format file.
 
Format file dibebaskan, misalnya yang sering digunakan format .txt atau .out
 
Terdapat penamaan ''pattern'' dari SLURM yaitu '''%j yang merekap JOB ID'''.  
 
Contoh pengisian output:
'''<nowiki>#</nowiki>SBATCH --output=result-%j.txt'''
 
 
Ketika job berjalan dengan '''ID 2500''', maka file output bernama '''result-2500.txt'''.
| -
|-
|-
|
|
  '''#SBATCH --error='''
  '''#SBATCH --error='''
|Output verbose  
|Output verbose
|Merekap output verbose program, berguna untuk melakukan troubleshooting dikala program user tidak berjalan. Contoh:
|Merekap output verbose program (contoh: error log ketika program gagal selesai).
<nowiki>#</nowiki>SBATCH --error='''hasil-%j.err'''
Admin EFISON menyarankan user untuk selalu menggunakan parameter ini.
|}
 
Berguna untuk melakukan troubleshooting ketika program user gagal berjalan.  


=== '''Menggunakan Paralel Multi-Node''' ===
Contoh pengisian error output:
Berikut adalah dua parameter wajib apabila user menggunakan lebih dari satu node untuk komputasi paralel:
'''<nowiki>#</nowiki>SBATCH --error=error-%j.txt'''
{| class="wikitable"
| -
|+Parameter wajib SBATCH SLURM untuk menggunakan lebih dari satu node
!Paramater
!Resource
!Penjelasan
|-
|
'''#SBATCH --nodes='''
|Node
|Alokasi jumlah node Compute Node yang akan digunakan. Contoh mengalokasikan 3 node:
<nowiki>#</nowiki>SBATCH --nodes='''3'''
|-
|
'''#SBATCH --ntasks-per-node='''              
|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''' ===
=== '''Menggunakan Compute Node GPU''' ===
Berikut adalah dua parameter wajib apabila user menjalankan job di compute node GPU NVIDIA Ampere:
Berikut adalah dua parameter tambahan untuk menggunakan compute node GPU ALELEON Supercomputer atau Partisi gpu_ampere:  
{| class="wikitable"
{| class="wikitable"
|+Parameter wajib SBATCH SLURM untuk menjalankan job di [[Partisi Aleleon Mk.II|compute node GPU]]
|+Parameter wajib SBATCH SLURM untuk menjalankan job di [[Partisi Aleleon Mk.II|compute node GPU]]
Baris 149: Baris 178:
!Resource
!Resource
!Penjelasan
!Penjelasan
!Alokasi maksimal
|-
|-
|
|
  '''#SBATCH --partition=gpu_ampere'''
  '''#SBATCH --partition=gpu_ampere'''
|Partisi GPU       
|Partisi GPU       
|Menjalankan job pada partisi compute node GPU (yang bernama gpu_ampere)                                                                                                                                                               
|Menjalankan job pada partisi compute node GPU ALELEON Supercomputer.
| -
|-
|-
|
|
  '''#SBATCH --gres=gpu:<jumlah-GPU>'''
  '''#SBATCH --gres=gpu:<jumlah-GPU>'''
|GPU                         
|GPU                         
|Contoh menggunakan 2 GPU:  
|Jumlah GPU yang digunakan.
$SBATCH --gres=gpu:'''2'''                           
Contoh menggunakan 2 GPU:  
'''$SBATCH --gres=gpu:2'''
|gpu:2
|}
|}


=== '''Menggunakan Threading CPU''' ===
=== '''Menggunakan Paralelisasi Threading Core pada OpenMP atau BLAS''' ===
Berikut adalah parameter untuk mengalokasikan threading CPU untuk user yang menggunakan program paralel threading seperti OpenMP (OMP), hybrid MPI/OMP, OpenBLAS, MKL, dll:
Berikut adalah parameter untuk mengalokasikan threading para program paralel yang menggunakan metode OpenMP (OMP), hybrid MPI/OMP, atau terintegrasi dengan BLAS:
{| class="wikitable"
{| class="wikitable"
|+Parameter SBATCH SLURM untuk menjalankan threading CPU
|+Parameter SBATCH SLURM untuk menjalankan threading CPU
Baris 169: Baris 202:
!Resource
!Resource
!Penjelasan
!Penjelasan
!Alokasi maksimal
|-
|-
|
|
  '''#SBATCH --cpus-per-task='''     
  '''#SBATCH --cpus-per-task='''     
|Threading CPU     
|Threading CPU     
|Jumlah threading CPU per core yang digunakan. Contoh mengalokasikan 8 threading per core CPU:
|Jumlah paralelisasi threading per core yang digunakan.  
<nowiki>#</nowiki>SBATCH --cpus-per-task='''8'''
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.
* '''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.
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:
{| 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''' ==
== '''Contoh SLURM Script''' ==
EFISON merangkum contoh SLURM script untuk penggunaan berbagai skenario komputasi pada laman '''[[Contoh SLURM Script]]'''.
EFISON merangkum contoh SLURM script untuk penggunaan berbagai skenario komputasi pada laman '''[[Contoh SLURM Script]]'''.
Baris 184: Baris 275:
=='''Membaca Status squeue'''==
=='''Membaca Status squeue'''==
Sesuai penjelasan diatas, user dapat melihat status dan antrian jalannya program melalui perintah 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]]
[[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.  
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"
Baris 231: Baris 322:
|Job melewati batas alokasi CPU user (lihat laman QOS User untuk penjelasan lebih lanjut).
|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.'''
'''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 per 26 Januari 2022 10.13

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.

Perintah Dasar SLURM

Berikut adalah perintah dasar bagi user untuk menggunakan SLURM:

Perintah dasar SLURM untuk user
Perintah 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.
$ squeue
Melihat status dan antrian semua komputasi. Tambahan opsi:
  • squeue -l : menampilkan squeue dengan info lengkap
  • squeue -u $USER : menampilkan squeue untuk job pribadi user
$ scancel <job-ID>
Membatalkan job SLURM yang sedang berjalan

Contoh Penggunaan SLURM

User akan menjalankan program bernama 'skripsi' di Compute Node. User membuat SLURM script yang berisikan alokasi resources dan perintah untuk menjalankan program 'skripsi'.

  • 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:

  1. Header #!/bin/bash untuk bash script.
  2. Parameter alokasi resources CPU, memori, waktu, output, dll dengan SBATCH.
  3. Pengaturan Module Environment untuk memuat software yang dibutuhkan.
  4. Alur perintah untuk menjalankan komputasi user.

Resources ALELEON Supercomputer

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.

Partisi Hardware ALELEON Supercomputer
Partisi 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) compute node CPU 3 64 128 250GB 0
gpu_ampere compute node GPU 1 64 128 125GB 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 AMD EPYC 7702P pada Partisi epyc dan 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 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.

Parameter esensial SBATCH SLURM untuk menjalankan job di partisi default yaitu epyc
Parameter Resource Penjelasan Alokasi maksimal
#SBATCH --nodes=
Node server Alokasi jumlah node yang digunakan.

Contoh mengalokasikan 1 node:

#SBATCH --nodes=1

3
#SBATCH --ntasks=           
Core thread CPU Alokasi jumlah core thread CPU yang akan digunakan.

Contoh mengalokasikan 32 core thread CPU: #SBATCH --ntasks=32

384
#SBATCH --mem=
Memori RAM Alokasi memori RAM yang akan digunakan.

User bisa menetapkan satuan KB, MB, atau GB.

Contoh mengalokasikan memori 32GB: #SBATCH --mem=32GB

250GB
#SBATCH --time=
Walltime Waktu maksimal yang dialokasikan untuk job.

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
#SBATCH --output=       
Output terminal Merekap output terminal dari program user kedalam format text file.

User memberikan nama file (bebas, satu kata tanpa spasi) dan format file.

Format file dibebaskan, misalnya yang sering digunakan format .txt atau .out

Terdapat penamaan pattern dari SLURM yaitu %j yang merekap JOB ID.

Contoh pengisian output: #SBATCH --output=result-%j.txt


Ketika job berjalan dengan ID 2500, maka file output bernama result-2500.txt.

-
#SBATCH --error=
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.

Contoh pengisian error output: #SBATCH --error=error-%j.txt

-

Menggunakan Compute Node GPU

Berikut adalah dua parameter tambahan untuk menggunakan compute node GPU ALELEON Supercomputer atau Partisi gpu_ampere:

Parameter wajib SBATCH SLURM untuk menjalankan job di 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

Berikut adalah parameter untuk mengalokasikan threading para program paralel yang menggunakan metode OpenMP (OMP), hybrid MPI/OMP, atau terintegrasi dengan BLAS:

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

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.
  • 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.

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:

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

EFISON merangkum contoh SLURM script untuk penggunaan berbagai skenario komputasi pada laman Contoh SLURM Script.

Contoh SLURM Script Software Spesifik

EFISON juga merangkum contoh SLURM script untuk software komputasi saintifik pada laman Software di HPC Aleleon Mk.II.

Membaca Status squeue

Sesuai penjelasan diatas, user dapat melihat status dan antrian jalannya program melalui perintah squeue.

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.

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:

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 [email protected] apabila menjumpai NODELIST yang tidak terdapat pada daftar diatas ketika job user tidak berjalan.