ในไฟล์ job script ของ Slurm ควรระบุพารามิเตอร์ ดังนี้
#SBATCH --time=[ระยะเวลาที่ใช้รันงาน]
เวลาที่ระบุมีผลต่อการจัดลำดับความสำคัญของงาน เพื่อไม่ให้ CPU-core ว่างในระหว่างงานรอ CPU ให้เพียงพอกับงานนั้น Slurm จะพิจารณางานที่อยู่ในคิวว่างานใดสามารถหยิบมารันก่อนโดยที่ไม่กระทบกับงานที่รอคิวอยู่ก่อนหน้า แทนที่จะปล่อยให้ CPU-core ว่างอยู่เฉย ๆ
ท่านควรระบุเวลาให้ใกล้เคียงความเป็นจริงที่ท่านใช้รันที่สุดเพื่อระบบจะได้จัดสรรลำดับความสำคัญให้ท่าน หากไม่ระบุ ค่าเริ่มต้นจะเป็นค่า Timelimit ของ Partition ที่ท่านใช้งาน
#SBATCH -p [ชื่อพาร์ติชัน]
กำหนดพาร์ติชันที่ต้องการใช้งาน โดยแต่ละพาร์ติชันมีทรัพยากร และระยะเวลาที่จำกัดแตกต่างกัน ผู้ใช้ควรดูว่างานของท่านใช้ทรัพยากร และระยะเวลาเท่าไหร่ที่เหมาะสมกับพาร์ติชันที่จะระบุ หากไม่ระบุ ค่าเริ่มต้นจะเป็นพาร์ติชัน gpu
นอกจากนี้ มีพารามิเตอร์ที่ควรระบุ โดยได้อธิบายในตัวอย่างการรัน Slurm ในแบบต่าง ๆ แล้วดังนี้
งานที่เป็น Serial Job จะใช้ CPU-core เดียว ให้กำหนดพารามิเตอร์ --ntasks=1 ซึ่งจะกำหนดหรือไม่ก็ได้เพราะค่าเริ่มต้นของ --ntasks=1 อยู่แล้ว
#!/bin/bash
#SBATCH --job-name=mytest # create a short name for your job
#SBATCH --nodes=1 # node count
#SBATCH --ntasks=1 # total number of tasks across all nodes
#SBATCH --cpus-per-task=1 # cpu-cores per task (>1 if multi-threaded tasks)
#SBATCH --time=00:20:00 # total run time limit (HH:MM:SS)
module purge
Rscript myscript.R
รัน
sbatch myscriptR.job
งานที่เป็น Multithreaded ขอให้ระบุพารามิเตอร์ --cpus-per-task= โดยกำหนดจำนวนเท่ากับจำนวนเธรดที่ต้องการแล้วใช้ตัวแปร $SLURM_CPUS_PER_TASK ไประบุในพารามิเตอร์ของคำสั่ง
ดังตัวอย่างการรันซอฟต์แวร์ Gromacs แบบ Multithreaded
#!/bin/bash
#SBATCH --job-name=multithread # create a short name for your job
#SBATCH --nodes=1 # node count
#SBATCH --ntasks=1 # total number of tasks across all nodes
#SBATCH --cpus-per-task=8 # cpu-cores per task (>1 if multi-threaded tasks)
#SBATCH --time=00:15:00 # maximum time needed (HH:MM:SS)
module load gromacs_gpu
gmx mdrun -ntomp $SLURM_CPUS_PER_TASK -v -noconfout -nsteps 5000 -s 1536/topol.tpr
รัน
sbatch gromac-water.gpu
ควรกำหนดค่าพารามิเตอร์ --cpus-per-task= และกำหนด CPU-core ในคำสั่งโดยใช้ตัวแปร $SLURM_CPUS_PER_TASK แทนการกำหนดเป็นตัวเลข การกำหนดเช่นนี้จะทำให้ Slurm รู้ว่างานของท่านใช้ CPU-core เท่าไหร่จะได้จัดสรรได้ถูกต้อง เพื่อจะได้ไม่มีปัญหาการรันงานเกินกว่าจำนวน CPU-core ที่มีในระบบซึ่งจะส่งผลต่อประสิทธิภาพการใช้งาน
จากเดิมการรัน mpi จะรันคำสั่งด้านล่าง ซึ่งจะกำหนดจำนวน tasks โดยใช้ option -np [ตามด้วยจำนวน tasks ที่ต้องการ]
mpirun -np 192 -hostfile hosts ./myprog.o
เมื่อ Submit ผ่าน Slurm ให้กำหนดที่พารามิเตอร์ --ntasks=[จำนวน tasks ที่ต้องการ]
และใช้คำสั่ง prun แทนการสั่งแบบเดิม
#!/bin/bash
#SBATCH --job-name=mpi-job # create a short name for your job
#SBATCH -p cpu # pritition name
#SBATCH --ntasks=192 # number of tasks per node
#SBATCH --cpus-per-task=1 # cpu-cores per task (>1 if multi-threaded tasks)
#SBATCH --time=00:20:00 # total run time limit (HH:MM:SS)
module purge
module load intel
prun myprog.o
รัน
sbatch mpi.job
งานที่ใช้ GPU ให้ระบุพารามิเตอร์ --gpus=1 โดยในตัวอย่างระบุให้ใช้ GPU จำนวน 1 การ์ด
wget https://gist.githubusercontent.com/leimao/bea971e07c98ce669940111b48a4cd7b/raw/f55b4dbf6c51df6b3604f2b598643f9672251f7b/mm_optimization.cu
module load nvhpc
nvcc mm_optimization.cu -o mm_optimization
vi gpu_job.sh
#!/bin/bash
#SBATCH --partition=gpu
#SBATCH --job-name=mnist # create a short name for your job
#SBATCH --cpus-per-task=4 # cpu-cores per task (>1 if multi-threaded tasks)
#SBATCH --gpus=1 # total number of GPUs
#SBATCH --time=01:00:00 # total run time limit (HH:MM:SS)
#CUDA matrix multiplication
./mm_optimization
sbatch gpu_job.sh