前言:
本教程致力于快速掌握slurm基础提交,查看,撤销等命令,掌握bash shell文件的书写基本格式,面对不同软件的提交可以快速上手。
1. slurm的基本语法
1.1 查看调度系统中所有任务
squeue
# squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
135 defq simple.s rstober S 0:10 1 atom01
JOBID为当前任务ID,PARTITION任务的设备分区,NAME任务名,USER任务提交者,ST状态,TIME耗时,NODES使用节点数量,NODELIST使用节点列表
任务状态码说明:PD排队;R运行;S挂起;CG正在退出
1.2 查看服务器节点和分区
sinfo
PARTITION AVALL TIMELIMIT NODES
compute* up infinite 1
1.3 部分操作
sacct -j ID #查询已结束的任务
scontrol hold ID #使任务优先级将到0,并不取消任务
scontrol release ID #释放hold的任务
scontrol suspend ID #暂停任务,保持任务当前的状态
scontrol resume ID #恢复任务
scancel ID #取消指定的任务
scontrol show job ID #显示任务细节
scontrol show node nodeid #显示节点状态
squeue -u username #查看某用户提交的任务
sbatch test.sh #提交任务
sbatch --help #帮助文档
scontrol update jobid=JOBID properties #更新slurm任务信息,例如运行时间,分区,节点等
partition=<name> timelimit=[d-]h:m:s
nodelist=<nodes>
————————————————
2. slurm中提交脚本的基本格式
#!/bin/bash
#SBATCH --job-name=test #作业名
#SBATCH --nodes=1 #节点数量
#SBATCH --ntasks=4 # 启动的任务数量
#SBATCH --ntasks-per-node=4 #每个节点启动的任务数量
#SBATCH --time= 1:00:00 #最大运行时间 此时设置为1day 也可以设置更长时间
##SBATCH --partition=machinename #设置运行的分区,不同的分区的硬件不同,指定不同区域的服务器
#SBATCH --output=%j.out #输出文件的位置
#SBATCH --error=%j.err #报错信息输出
###body 主体的脚本内容
#运行python之前需要指定特定的anaconda虚拟环境
source activate Anaconda-env-name
python test.py #运行python程序
Rscript test.R #运行R程序
提交VASP任务
#!/bin/bash
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=8
#SBATCH --time=12:59:59
#SBATCH --mem=10GB
#例如运行vasp的程序之前需要把环境配置先写入脚本,需要先调用intel mpi
source /dir/intel64/bin/mpivars.sh #dir是路径,链接到intel编译器中的mpivars.sh
ulimit -s unlimited #不限制堆栈大小
mpirun -np $SLURM_NPROCS /share/apps/vasp/5.4.4/vasp_std
#简而言之就是运行软件前要将环境变量写入shell文件,然后写运行命令,再将任务分发到不同的节点上。
##slurm资源管理系统命令
#运行命令方式:sbatch run.sh
在重复提交任务的过程中,有些参数需要随不同任务更改,那么有部分参数可以在提交写入,这样同一个脚本就可以在不用修改内容的情况下多次使用
sbtach -N 2 -J test vasp.sh
-N #nodes数量
-J #job-name
-n #ntasks
-o #output
-e #errorfile
在提交任务时也可以附带参数的提交,这样shell文件内可以共享输入的环境变量
sbatch run.sh --nodes 1 --ntasks 24
slurm中常用的环境变量:
$SLURM_NPROCS #要加载的进程数
$SLURM_JOB_NUM_NODES #分配给作业的节点数
$SLURM_SUBMIT_DIR #提交任务的当前路径
$SLURM_TASKS_PER_NODE 每节点要加载的任务数
$SLURM_JOB_ID 作业的 JobID
$SLURM_SUBMIT_DIR 提交作业时的工作目录
$SLURM_JOB_NODELIST 作业分配的节点列表
$SLURM_JOB_CPUS_PER_NODE 每个节点上分配给作业的 CPU 数
$SLURM_JOB_NUM_NODES 作业分配的节点数
$HOSTNAME 对于批处理作业,此变量被设置为批处理脚本所执行节点的节点名
参考教程:
slurm作业调度系统与天河二号的基本命令
集群管理系统Slurm安装与使用(知乎)
北京大学超算中心使用手册