Submit Script ALELEON Supercomputer
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.
Alur Penggunaan 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.
- Penamaan SLURM submission script bisa bebas dimana pada contoh ini bernama 'slurm-skripsi'.
[olala01@login myjob]$ ls kerjaan-skripsi slurm-skripsi
Jalankan SLURM submission script tersebut dengan perintah sbatch. Perhatikan bahwa user akan mendapatkan nomor ID dari job tersebut.
[olala01@login myjob]$ sbatch slurm-skripsi Submitted batch job 231
User dapat melihat status jalannya job masing-masing dengan perintah squeue -u $USER.
[ale01@login hpcg-tutorial]$ 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.
[ale01@login hpcg-tutorial]$ ls kerjaan-skripsi slurm-skripsi result-231.out result-231.err
Apabila user ingin membatalkan program yang tengah berjalan via SLURM, gunakan perintah scancel job ID:
[olala01@login myjob]$ scancel 231
Untuk merangkum alur diatas, berikut adalah daftar perintah yang esensial pada SLURM:
Perintah | Penjelasan |
---|---|
$ sbatch <slurm-submission-script> |
Mengirim SLURM submission script untuk dijalankan di SLURM. |
$ squeue |
Melihat status dan antrian semua komputasi. Tambahan opsi:
|
$ scancel <job-ID> |
Membatalkan job SLURM yang sedang berjalan |
SLURM Submission Script
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:
- Header #!/bin/bash untuk bash script.
- Parameter alokasi resources CPU, memori, waktu, output, dll dengan SBATCH.
- Pengaturan Module Environment untuk memuat software yang dibutuhkan.
- Alur perintah untuk menjalankan komputasi user.
Resources HPC Aleleon Mk.II
Sebelum menggunakan SLURM, user harus mengetahui spesifikasi dan limitasi hardware dari HPC Aleleon Mk.II dimana dijelaskan pada tabel dibawah ini.
Partisi | Keterangan | Jumlah Node | Jumlah Core CPU per node | Jumlah RAM per node | Jumlah GPU per node |
---|---|---|---|---|---|
epyc (DEFAULT) | compute node CPU | 3 | 128 | 250GB | 0 |
gpu_ampere | compute node GPU | 1 | 128 | 125GB | 2 |
Parameter Resources SBATCH Esensial
Berikut adalah daftar parameter SBATCH basis yang esensial untuk menjalankan job di compute node CPU AMD EPYC:
Parameter | Penjelasan |
---|---|
#SBATCH --ntasks=<cpu-cores> | Jumlah alokasi cores CPU yang akan dipakai. Contoh mengalokasikan 64 core CPU:
#SBATCH --ntasks=64 |
#SBATCH --mem=<mem-capacity> | Jumlah alokasi memori RAM. User bisa menetapkan satuan apapun namun kami merekomendasikan satuan GB. Contoh mengalokasikan memori 64GB:
#SBATCH --mem=64GB |
#SBATCH --time=<walltime> | Waktu maksimal yang dialokasikan untuk job. Walltime maksimal yang diizinkan saat ini adalah 14 hari. Format waktu <walltime> yang digunakan:
|
#SBATCH --output=<output-file> | Merekap output terminal dari program user. Terdapat variabel spesial yaitu %j untuk merekap JOB ID. Format file dibebaskan. Contoh:
#SBATCH --output=hasil-%j.out |
#SBATCH --error=<error-file> | Merekap output verbose program, berguna untuk melakukan troubleshooting dikala program user tidak berjalan. Contoh:
#SBATCH --error=hasil-%j.err |
Tambahkan parameter berikut apabila ingin menjalankan job di compute node GPU NVIDIA Ampere:
Paramater | Penjelasan |
---|---|
#SBATCH --partition=gpu_ampere | Memasukan job ke compute node GPU |
#sbatch --gres=gpu:<jumlah-GPU> | Contoh menggunakan 2 GPU:
$SBATCH --gres=gpu:2 |
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.
Contoh SLURM Submission Script Satu Node CPU
SLURM Satu Node
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:
#!/bin/bash #SBATCH --ntasks=128 #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
User hendaknya menggunakan modul MPI default yang direkomendasikan admin EFISON:
$ 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
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.
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
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.
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
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
Contoh SLURM Submission script dengan 2 GPU, 16 CPU, dan RAM 32GB:
#!/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
Terdapat software yang membutuhkan contoh SLURM submission script spesifik supaya dapat berjalan dengan baik. Kunjungi Software di HPC Aleleon Mk.II.
Membaca squeue
Sesuai penjelasan diatas, user dapat melihat status dan antrian jalannya program melalui perintah 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.
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:
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.