跳转至

自定义脚本提交作业

管理员写的脚本命令只照顾到绝大多数的要求,有少部分需要通过自定义写脚本来解决。分两种情况,一部分是已有软件,另一部分是用户自己安装的软件怎么写提交脚本?

  • 已有软件 以VASP为例,可能需要用到k点测试等小脚本,这时可以先使用chemvasp test 8提交作业,再使用“scancel 相应jobid”杀掉刚提交的作业这时产生一个test.sh的作业脚本文件 用vi test.sh编辑,在作业运行命令mpirun这一行的上面使用k点测试小脚本;如果是对vasp计算结果后处理,也想直接用一个脚本处理,那就在mpirun这一行的命令下面行添加自己的执行脚本 改好test.sh脚本文件后,用sbatch test.sh或者qsub test.sh提交作业
  • 未在软件列表的软件 不在集群软件列表的软件,需要编写slurm作业提交脚本文件,用sbatch或qsub提交。要想写好slurm作业提交脚本文件,需要了解SLURM作业管理系统的环境变量、分区等。

分区或队列

[userA@quantum ~]$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
gy-grp       up   infinite      1    mix cu04
gy-grp       up   infinite      3  alloc cu[01-03]
gy-grp       up   infinite      4   idle cu[05-08]
zcy-a        up   infinite      2    mix cu[09-10]
zcy-a        up   infinite      1  alloc cu11
zcy-b        up   infinite      3  alloc cu[12-14]
zcy-c        up   infinite      4  alloc cu[15-18]
zcy-d        up   infinite      3    mix cu[19-21]
yan-grp      up   infinite      1    mix cu31
yan-grp      up   infinite     10   idle cu[22-30,32]
hu-grp       up   infinite      1   idle cu33
xu-a         up   infinite      1   idle cu34
xu-b*        up   infinite      4    mix cu[35,38,42-43]
xu-b*        up   infinite      5  alloc cu[36-37,39-41]
xu-b*        up   infinite      3   idle cu[44-46]
PARTITION下面对应的gy-grp、zcy-a、xu-a等即是分区或队列,其中xu-b*后面的"*"指的是xu-b分区为默认分区,而不是星号包含在分区名里。

环境变量

变量名称 描述
$SLURM_SUBMIT_DIR 提交作业命令的工作目录
$SLURM_JOB_USER 提交作业的主机上作业拥有者的登录名称
$SLURM_JOBID 提交作业时,分配给作业的专有标识符
$SLURM_NTASKS 并行作业所用的核数
$SLURM_JOB_NUM_NODES 并行作业所使用的主机数量

编写slurm作业提交脚本

以MultiWFN软件提交作业为例,编写multiwfn.sh脚本

#!/bin/bash
# Job submission script for SLURM:
# Usage: sbatch <this_script>
##############脚本第一部分,声明SLURM作业管理系统的请求资源参数#####################
#SBATCH -p gy-grp
#SBATCH -J test_multiwfn
#SBATCH -o test_multiwfn.o%j
#SBATCH -N 1
#SBATCH --ntasks-per-node=8
#SBATCH -t 1538:00:00
########################请求资源参数的解释###################################
#    -J: 作业名称
#    -o: 标准输出stdout
#    -e: 标准错误stderr,不写-e,标准输出stdout和标准错误stderr合并到.ojobid文件中
#    -N: 请求的节点数目
#    -n: 请求的总核数,如果-N后为1,等同于--ntasks-per-node
#    -t: 时间限制
#    -p: 申请的分区
#    -w: 后面跟请求的指定节点名称
#############################################################################

#################脚本第二部分,定义要运行作业软件的环境变量#######################
# go to work dir
cd $SLURM_SUBMIT_DIR

# export the environment variables of Multiwfn
export Multiwfnpath=/opt/soft/Multiwfn/3.8_dev_20231225
export PATH=$PATH:.:$Multiwfnpath
export KMP_STACKSIZE=100000000
sed "s/nthreads= 4/nthreads= $SLURM_NTASKS/" $Multiwfnpath/settings.ini > settings.ini
export GAUSS_MEMDEF=16GB

########################脚本第三部分,运行作业的命令############################
echo "Starting MultiWFN run at" `date`

# The program we want to execute,根据自己的作业,主要修改的也是下面这一行
echo -e "8\n1\n1\n2\n3" | Multiwfn COCl2.fch

echo "Finished MultiWFN run at" `date`

本文阅读量  次
本站总访问量  次