Submit Script ALELEON Supercomputer: Perbedaan antara revisi
WilsonLisan (bicara | kontrib) (Major update, melengkapi contoh SLURM satu node dan banyak node hingga MPI + OpenMP. WIP.) |
WilsonLisan (bicara | kontrib) (menambah contoh SLURM GPU, software spesifik, dan squeue) |
||
Baris 1: | Baris 1: | ||
SLURM adalah software scheduler untuk mengantarkan 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. | SLURM adalah software scheduler untuk mengantarkan 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 untuk Job Submission''' == | == '''Alur Penggunaan SLURM untuk Job Submission''' == | ||
Baris 102: | Baris 102: | ||
* 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 | ||
|} | |} | ||
Berikut adalah parameter esensial untuk output komputasi: | Berikut adalah parameter esensial untuk output komputasi: | ||
{| class="wikitable" | {| class="wikitable" | ||
Baris 197: | Baris 186: | ||
# MODULE | # MODULE | ||
module load openmpi | module load openmpi | ||
# dan | # dan modul lain yang dibutuhkan | ||
# RUN COMMAND | # RUN COMMAND | ||
Baris 234: | Baris 223: | ||
# MODULE | # MODULE | ||
module load openmpi | module load openmpi | ||
# | # atau modul lain yang dibutuhkan | ||
# RUN COMMAND | # RUN COMMAND | ||
Baris 245: | Baris 234: | ||
#SBATCH --ntasks-per-node=16 | #SBATCH --ntasks-per-node=16 | ||
#SBATCH --cpus-per-task=8 | #SBATCH --cpus-per-task=8 | ||
Total task MPI tetap mengikuti aturan nodes x ntasks-per-node, menjadi 2 x 16 = 32 MPI processes. Contoh lengkap SLURM | Total task MPI tetap mengikuti aturan nodes x ntasks-per-node, menjadi 2 x 16 = 32 MPI processes. Contoh lengkap SLURM submission script: | ||
#!/bin/bash | #!/bin/bash | ||
Baris 258: | Baris 247: | ||
# MODULE | # MODULE | ||
module load openmpi | module load openmpi | ||
# | # atau modul yang dibutuhkan | ||
# RUN COMMAND | # RUN COMMAND | ||
'''export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK}''' | '''export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK}''' | ||
mpirun -np 32 --mca pml ucx --mca osc ucx <program-MPI...> | mpirun -np 32 --mca pml ucx --mca osc ucx <program-MPI...> | ||
== '''Contoh SLURM Submission Script GPU''' == | |||
Berikut adalah parameter khusus untuk menggunakan GPU node dimana user akan menjalankan komputasi di partisi khusus GPU bernama '''gpu_ampere'''. | |||
{| class="wikitable" | |||
|+Parameter SBATCH SLURM untuk GPU Node | |||
!Parameter | |||
!Penjelasan | |||
|- | |||
|#SBATCH --partition=gpu_ampere | |||
|Memasukkan komputasi ke partisi GPU (yaitu bernama gpu_ampere) | |||
|- | |||
|#SBATCH --gres=gpu:<jumlah-GPU> | |||
|Contoh menggunakan 2 GPU: | |||
$SBATCH --gres=gpu:2 | |||
|} | |||
Contoh lengkap SLURM Submission script: | |||
#!/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 laman Software di HPC Aleleon Mk.II. | |||
== '''Membaca squeue''' == | |||
Sesuai penjelasan diatas, user dapat melihat status dan antrian jalannya program melalui perintah squeue. | |||
[[Berkas:Status squeue.png|nirbing|900x900px]] | |||
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 | |||
!Singkatan | |||
!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 melapor ke admin melalui email support@efisonlt.com apabila menjumpai NODELIST yang tidak terdapat pada daftar diatas ketika job user tidak berjalan. |
Revisi per 26 Maret 2021 09.07
SLURM adalah software scheduler untuk mengantarkan 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 untuk Job Submission
Pada contoh berikut, user akan menjalankan komputasi HPCG ke Compute Node dengan nama program 'xhpcg-3.1':
[ale01@login hpcg-tutorial]$ ls hasil hpcg.dat xhpcg-3.1
User harus membuat SLURM submission script yang berisikan alokasi resources (CPU, GPU, RAM, waktu, dkk) dan alur jalannya program (pada contoh ini, xhpcg-3.1). Langkah membuat SLURM submission script akan dijelaskan di bagian berikutnya. Pada contoh ini, user membuat SLURM submission script bernama 'slurm-hpcgnvidia'.
[ale01@login hpcg-tutorial]$ ls hasil hpcg.dat slurm-hpcgnvidia xhpcg-3.1
Jalankan SLURM submission script dengan perintah sbatch. Perhatikan bahwa SLURM menjalankan job user dengan nomor ID 231.
[ale01@login hpcg-tutorial]$ sbatch slurm-hpcgnvidia Submitted batch job 231
User dapat melihat status jalannya job dengan perintah squeue. Perhatikan bahwa job ID 231 sedang berjalan.
[ale01@login hpcg-tutorial]$ squeue -l Mon Mar 22 10:43:22 2021 JOBID PARTITION NAME USER STATE TIME TIME_LIMI NODES NODELIST(REASON) 230 epyc HPLBLIS ale02 RUNNING 9:42 20:00:00 1 epyc01 229 epyc HPLBLIS ale02 RUNNING 10:46 20:00:00 1 epyc02 231 gpu_amper slurm-hp ale01 RUNNING 2:00 1:00:00 1 gpu1
Job selesai bila sudah tidak terlihat di daftar squeue. User dapat mengatur konfigurasi file output di SLURM submission script seperti contoh dibawah ini (output result-231.err dan result-231.out).
[ale01@login hpcg-tutorial]$ ls hasil hpcg.dat result-231.err slurm-hpcgnvidia HPCG-Benchmark_3.1_2021-03-22_10-43-30.txt hpcg_log_2021.03.22.10.41.25.txt result-231.out xhpcg-3.1
Perintah Esensial SLURM
Berikut adalah perintah esensial bagi user untuk menggunakan 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. Misalkan pada contoh diatas dengan job ID 231:
$ scancel 231 |
SLURM Submission Script
SLURM submission script adalah bash-script yang bertujuan untuk menjalankan program komputasi melalui SLURM. 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 utama CPU | 3 | 128 | 250GB | 0 |
gpu_ampere | compute node GPU | 1 | 128 | 125GB | 2 |
Parameter Resources SBATCH Esensial
Terdapat ratusan parameter SBATCH untuk SLURM. User dapat melihat daftar lengkap parameter SBATCH untuk SLURM HPC Aleleon Mk.II pada laman daftar parameter SBATCH SLURM ini. Berikut adalah daftar parameter SBATCH basis yang esensial:
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> | Walltime (waktu maksimal) yang dialokasikan untuk job user. Walltime maksimal saat ini untuk HPC Aleleon Mk.II adalah 14 hari. Format waktu <walltime> yang digunakan:
|
Berikut adalah parameter esensial untuk output komputasi:
Parameter | Penjelasan |
---|---|
#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 |
Parameter SBATCH khusus lainnya untuk menjalankan threading OpenMP dan paralel multi-node akan dijelaskan pada bagian berikutnya.
Apakah Terdapat Aturan Mengatur Konfigurasi SBATCH?
User dibebaskan untuk mengisi parameter SBATCH selama tidak melebihi nilai maksimal (seperti CPU core maksimal 128) atau nilai yang salah. Tidak terdapat aturan seperti alokasi CPU / RAM mengikuti nilai the power of two. User bisa saja memasukkan alokasi CPU dan RAM yang 'tidak wajar' seperti 17 core CPU dan 41GB RAM.
Bila terjadi kesalahan parameter SLURM, user tetap bisa melakukan sbatch namun job tidak akan berjalan (tidak muncul di squeue). Adalah praktek yang baik untuk selalu menyertakan parameter #SBATCH --error supaya terdapat log ketika job tidak berjalan via SLURM.
Contoh SLURM Submission Script Satu Node
SLURM Satu Node
Program akan berjalan dengan jumlah core CPU dan RAM yang definisikan pada parameter SBATCH ntasks dan mem.
#!/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 (dengan protokol UCX)
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:
#!/bin/bash #SBATCH --ntasks=64 #SBATCH --mem=8GB #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 dibawah ini menggunakan 128 core CPU dengan pembagian 16 MPI processes dam 8 OMP thread per MPI (Total CPU processes = MPI x OMP. Penjelasan lebih detail kunjungi laman 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. |
Perhatikan bahwa jumlah task mpirun tetap 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
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 tambahan 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 mpirun adalah nodes x ntasks-per-node. Contoh dengan konfigurasi dibawah ini:
#SBATCH --nodes=2 #SBATCH --ntasks-per-node=128
Maka total MPI processes-nya adalah 2 x 128 = 256 MPI processes:
#!/bin/bash #SBATCH --nodes=2 #SBATCH --ntasks-per-node=128 #SBATCH --mem=250GB #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...>
Arti dari SLURM submission script diatas adalah program MPI menggunakan 2 node dengan 128 tasks per node sehingga total 256 tasks + jumlah memori RAM yang digunakan adalah 250GB per node (sehingga secara harafiah total 500GB RAM).
SLURM Banyak Node MPI + OpenMP
Kita gunakan contoh MPI + OpenMP sebelumnya dengan 16 ntasks dan 8 cpus-per-task (16 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 task MPI tetap mengikuti aturan nodes x ntasks-per-node, menjadi 2 x 16 = 32 MPI processes. 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
Berikut adalah parameter khusus untuk menggunakan GPU node dimana user akan menjalankan komputasi di partisi khusus GPU bernama gpu_ampere.
Parameter | Penjelasan |
---|---|
#SBATCH --partition=gpu_ampere | Memasukkan komputasi ke partisi GPU (yaitu bernama gpu_ampere) |
#SBATCH --gres=gpu:<jumlah-GPU> | Contoh menggunakan 2 GPU:
$SBATCH --gres=gpu:2 |
Contoh lengkap SLURM Submission script:
#!/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 laman Software di HPC Aleleon Mk.II.
Membaca squeue
Sesuai penjelasan diatas, user dapat melihat status dan antrian jalannya program melalui perintah squeue. Berkas:Status squeue.png 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 | Singkatan | 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 melapor ke admin melalui email support@efisonlt.com apabila menjumpai NODELIST yang tidak terdapat pada daftar diatas ketika job user tidak berjalan.