SLURM Job Submit Guide#
แนะนำให้เขียน SLURM script ประมาณนี้ครับ
Basic SLURM Script#
#!/bin/bash
#SBATCH --job-name=my_job
#SBATCH --partition=defq
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=4
#SBATCH --gpus=1
#SBATCH --mem=16G
#SBATCH --time=01:00:00
#SBATCH --output=slurm-%j.out
#SBATCH --error=slurm-%j.err
SCRATCHDIR=/scratch/$USER
mkdir -p /scratch/$USER
cp input.DAT /scratch/$USER
srun python mycode.py $SCRATCHDIR/input.DAT
คำอธิบาย SBATCH Options#
Option |
คำอธิบาย |
|---|---|
|
ชื่อ job ที่จะแสดงใน queue |
|
partition ที่ต้องการใช้ (cluster นี้มี partition เดียวคือ |
|
จำนวน node ที่ต้องการ |
|
จำนวน task (process) ทั้งหมด |
|
จำนวน CPU cores ต่อ task |
|
จำนวน GPU ที่ต้องการ |
|
จำนวน memory ที่ต้องการ |
|
เวลาสูงสุดที่ job จะรัน (format: HH:MM:SS) |
|
ไฟล์สำหรับ stdout ( |
|
ไฟล์สำหรับ stderr |
การใช้ /scratch#
แนะนำให้ copy ข้อมูลไปที่ /scratch ก่อนรัน job เพื่อประสิทธิภาพ I/O ที่ดีกว่า และ copy ผลลัพธ์กลับมาเมื่อเสร็จ
SCRATCHDIR=/scratch/$USER/$SLURM_JOB_ID
# สร้าง scratch directory
mkdir -p $SCRATCHDIR
# copy input ไปที่ scratch
cp input.DAT $SCRATCHDIR/
# รัน job
srun python mycode.py $SCRATCHDIR/input.DAT
# copy ผลลัพธ์กลับมา
cp $SCRATCHDIR/output.* $SLURM_SUBMIT_DIR/
# cleanup scratch
rm -rf $SCRATCHDIR
Multi-GPU Job#
#!/bin/bash
#SBATCH --job-name=multi_gpu
#SBATCH --partition=defq
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=8
#SBATCH --gpus=4
#SBATCH --mem=64G
#SBATCH --time=04:00:00
#SBATCH --output=slurm-%j.out
#SBATCH --error=slurm-%j.err
SCRATCHDIR=/scratch/$USER/$SLURM_JOB_ID
mkdir -p $SCRATCHDIR
cp -r data/ $SCRATCHDIR/
srun python train.py --data_dir $SCRATCHDIR/data --gpus 4
cp $SCRATCHDIR/checkpoints/* $SLURM_SUBMIT_DIR/checkpoints/
rm -rf $SCRATCHDIR
Multi-Node Job#
#!/bin/bash
#SBATCH --job-name=multi_node
#SBATCH --partition=defq
#SBATCH --nodes=2
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=8
#SBATCH --gpus-per-node=4
#SBATCH --mem=64G
#SBATCH --time=08:00:00
#SBATCH --output=slurm-%j.out
#SBATCH --error=slurm-%j.err
SCRATCHDIR=/scratch/$USER/$SLURM_JOB_ID
mkdir -p $SCRATCHDIR
cp -r data/ $SCRATCHDIR/
srun python -m torch.distributed.run \
--nproc_per_node=4 \
--nnodes=$SLURM_NNODES \
--node_rank=$SLURM_NODEID \
--master_addr=$(scontrol show hostname $SLURM_NODELIST | head -n1) \
--master_port=29500 \
train.py --data_dir $SCRATCHDIR/data
cp $SCRATCHDIR/checkpoints/* $SLURM_SUBMIT_DIR/checkpoints/
rm -rf $SCRATCHDIR
คำสั่งที่ใช้บ่อย#
# submit job
sbatch myjob.sh
# ดู queue
squeue -u $USER
# ยกเลิก job
scancel <job_id>
# ดูรายละเอียด job
scontrol show job <job_id>
# ดู partition ที่ใช้ได้
sinfo
# ดู resource ที่ใช้หลัง job เสร็จ
sacct -j <job_id> --format=JobID,Elapsed,MaxRSS,MaxVMSize,State