Contoh SLURM Script

Dari ALELEON by EFISON

Revisi sejak 10 September 2021 05.27 oleh WilsonLisan (bicara | kontrib) (Menambahkan bagian MPI)

Halaman ini menyertakan beberapa contoh SLURM script untuk penggunaan berbagai skenario komputasi. User dapat membuat SLURM script dengan text editor kesukaan masing-masing.

Perlu diketahui untuk memperlakukan contoh SLURM script pada halaman ini sebagai panduan, bukan contoh mutlak yang wajib diikuti hingga contoh angka pada parameter resources SBATCH.

SLURM Script untuk Satu Node CPU

Bagian ini memberikan contoh SLURM script yang paling dasar untuk komputasi standar yang berjalan pada satu Compute Node. Pada contih dibawah ini, user menjalankan program pada 32 core CPU.

#!/bin/bash                      

#SBATCH --ntasks=32              # Contoh menggunakan 32 core CPU.
#SBATCH --mem=16GB               # Contoh menggunakan RAM 16GB.
#SBATCH --time=00:30:00          # Contoh menetapkan walltime maks 30 menit.
#SBATCH --output=result-%j.out   # Output terminal program.
#SBATCH --error=result-%j.err    # Output verbose program.

# Tulis alur jalannya program user dibawah ini ...
# dan load modul software yang dibutuhkan.

# Contoh (ngawur):
module load rasakelapamuda 
./esputer >> resep_rahasia.txt

Satu Node dengan CPU Threading

User dapat menjalankan komputasi yang menggunakan CPU threading (contoh ketika program menggunakan OMP, OpenBLAS, MKL, BLIS, dll) dengan mendeklarasikan jumlah CPU threading pada parameter SBATCH cpus-per-task dan nilai variabel SLURM_CPUS_PER_TASK. Pada contoh dibawah ini, user menjalankan 32 threading per 1 core CPU.

#!/bin/bash                      

#SBATCH --ntasks=1               # Contoh menggunakan 1 core CPU ...
#SBATCH --cpus-per-task=32       # dengan 32 threading per core.
#SBATCH --mem=16GB               # Contoh menggunakan RAM 16GB.
#SBATCH --time=00:30:00          # Contoh menetapkan walltime maks 30 menit.
#SBATCH --output=result-%j.out   # Output terminal program.
#SBATCH --error=result-%j.err    # Output verbose program.

# Contoh menggunakan threading OMP
export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK}

# Tulis alur jalannya program user dibawah ini ...
# dan load modul software yang dibutuhkan.

Sebagai tambahan info, user dapat melihat Software HPC AMD untuk panduan lebih lanjut mengenai CPU threading pada library matematika yang tersedia di HPC Aleleon Mk.II.

SLURM Script untuk Komputasi Paralel MPI

User dapat menggunakan MPI default pada HPC Aleleon Mk.II yang telah dioptimasi khusus untuk HPC Aleleon Mk.II melalui modul:

$ module load openmpi

Perintah MPI pada SLURM HPC Aleleon Mk.II

Admin EFISON merekomendasikan user untuk mengikuti format perintah menjalankan MPI berikut pada SLURM script:

mpirun -np $SLURM_NTASKS --mca pml ucx --mca osc ucx <program-user>

Keterangan:

  • Tetap gunakan perintah mpirun, bukan srun yang biasa digunakan pada SLURM.
  • Flag --mca pml ucx --mca osc ucx bertujuan supaya MPI dapat berjalan optimal pada jaringan Mellanox RDMA yang digunakan pada HPC Aleleon Mk.II dengan memanfaatkan protokol UCX (Unified Communication-X).
  • Variabel $SLURM_NTASKS menangkap jumlah core CPU dari parameter SBATCH ntasks sehingga user tidak perlu memasukkan angka mpirun np secara manual.

MPI Satu Node

Konsep SLURM Script untuk komputasi MPI satu node sama dengan SLURM script untuk komputasi standar satu node. Pada contoh dibawah ini, user menjalankan MPI dengan jumlah 32 proses MPI atau memanfaatkan 32 core CPU.

#!/bin/bash                      

#SBATCH --ntasks=32              # Contoh menggunakan 32 core CPU.
#SBATCH --mem=16GB               # Contoh menggunakan RAM 16GB.
#SBATCH --time=00:30:00          # Contoh menetapkan walltime maks 30 menit.
#SBATCH --output=result-%j.out   # Output terminal program.
#SBATCH --error=result-%j.err    # Output verbose program.

# Tulis alur jalannya program user dibawah ini ...
# dan load modul software yang dibutuhkan.

module load openmpi rasa_coklat rasa_vanila
mpirun -np $SLURM_NTASKS --mca pml ucx --mca osc ucx ./esputer >> resep_10_liter.txt

MPI Multi Node

Untuk menjalankan MPI multi-node (atau paralel), user harus menggunakan parameter SBATCH --nodes (jumlah node yang digunakan) dan --ntasks-per-node (jumlah core CPU per node) menggantikan --ntasks. Terdapat rule of thumb pada komputasi MPI multi-node:

  • Jumlah proses MPI atau core CPU yang digunakan pada setiap node adalah sama.

Berikut adalah perumusan yang dapat dijadikan panduan user menentukan jumlah core CPU dan node:

Total proses MPI = nodes * ntasks-per-node
// atau:
ntasks-per-node = Total proses MPI / nodes

Contoh dengan acuan jumlah core maksimal per node di HPC Aleleon Mk.II adalah 128:

  • User mau menjalankan program MPI dengan 192 core CPU. Terdapat dua opsi yaitu 2 node dengan 96 core CPU per node atau 3 node dengan 64 core per node.
  • Perlu diketahui bahwa kedua opsi diatas dapat menghasilkan perbedaan performa. Manakah opsi yang lebih baik? Jawabannya tergantung dengan efisiensi coding pada program user. User disarankan untuk menguji kedua opsi dengan file input kecil sebelum menjalankan dengan file input besar atau komputasi sesungguhnya.

Sementara itu terdapat aturan lain untuk SLURM script MPI multi-node:

  • User mengalokasikan alokasi RAM per node dengan parameter --mem.
  • Variabel $SLURM_NTASKS pada mpirun -np menangkap total proses MPI (nodes * ntasks-per-node).

Opsi 3 node dengan 64 core per node diilustrasikan pada contoh SLURM script dibawah ini:

#!/bin/bash                      

#SBATCH --nodes=3                # Contoh menggunakan 3 node ...
#SBATCH --ntasks-per-node=64     # dengan 64 core CPU per node.
#SBATCH --mem=64GB               # Contoh menggunakan RAM 64GB per node.
#SBATCH --time=02:00:00          # Contoh menetapkan walltime maks 2 jam.
#SBATCH --output=result-%j.out   # Output terminal program.
#SBATCH --error=result-%j.err    # Output verbose program.

# Tulis alur jalannya program user dibawah ini ...
# dan load modul software yang dibutuhkan.

module load openmpi rasa_coklat rasa_vanila

# SLURM_NTASKS dibawah ini menangkap total proses MPI (nodes * ntasks-per-node)
mpirun -np $SLURM_NTASKS --mca pml ucx --mca osc ucx ./esputer >> resep_10_liter.txt

SLURM Script untuk Komputasi Hybrid MPI/OMP

SLURM Script untuk Komputasi GPU

Untuk menggunakan Compute Node GPU, user harus menyertakan dua parameter SBATCH berikut: