slurm 作业调度系统指南(一)
在超算中心离不开 slurm 刚参加工作时,学校没学过,也没有系统的培训。刚开始还不了解登录节点、运算节点的,(超算系统上还是魔改的slurm)。甚至一段时间都在登录节点跑过作业。工作至今偶然也会遇到新人不会使用slurm把账号跑崩的情况。 在此记录一下常用到的命令。
查看空闲节点
交任务前先看看交到是什么分区~
sinfo
提交任务
srun
最基础的提交任务指令
srun -N 1 -n 1 -p cp1 python test.py
# -N 节点数
# -n 进程数
# -p 分区
# 更多参数具体看 srun --help
sbatch
批量提交任务, 其中 #SBATCH
对应 srun 的参数
- 准备脚本
test.sh
#!/bin/bash
#SBATCH -o job-nvidia.out
#SBATCH -p XXXX
#SBATCH -n 1
#SBATCH -N 1
#SBATCH --time=00:00:30
module add cuda/11.8
nvidia-smi
- 执行脚本
sbatch test.sh
or
# 那就不用设置 SBATCH
sbatch -n 1 -N 1 test.sh
进阶使用
提交任务并进入运行节点
类似进入docker
screen
,方便调试程序。
srun -p XXX -N 1 -n 1 -t 0-01:00 --pty /bin/bash #一小时
通过命令行传递参数
创建动态sbatch脚本的方法实现cmd传递参数 ⬇️
vim main.sh
#!/bin/bash
cpus=$1
nodes=$2
name=$3
# 创建一个具有动态SBATCH指令的新脚本
cat > generated_script.sh <<EOF
#!/bin/bash
#SBATCH --partition=cp5
#SBATCH -n $cpus
#SBATCH -N $nodes
#SBATCH --time=00:15:00
#SBATCH -J LLMTEST.
#SBATCH --output=./output/cp5-${name}-${cpus}-${nodes}.output
source /fs2/home/test653/zeta/.bashrc
conda activate chatglm
python main.py
EOF
# 提交新生成的作业脚本
sbatch generated_script.sh
./main.sh 1 1