提交批处理作业-sbatch

简介

用户使用sbatch命令提交作业脚本,其基本格式为sbatch jobfile。jobfile为作业脚本文件。在批处理作业脚本中,脚本第一行以"#!"字符开头,并指定脚本文件的解释程序,如 sh,bash。接下来写作业使用到的调度系统参数,以#开头,最后写作业运行的程序命令。

用户可使用sbatch命令提交用户作业脚本。示例如下:

sbatch < xxx.sbatch

作业提交脚本格式编写如下,作业控制指令以"#SBATCH"开头,其他注释以"#"开头。例如wrf测试脚本run.sbatch如下:

#!/bin/bash
#SBATCH -J wrf
#SBATCH --comment=WRF
#SBATCH -n 128
#SBATCH --ntasks-per-node=32
#SBATCH -p normal
#SBATCH -o %j
#SBATCH -e %j

mpirun -np 128./wrf.exe

sbatch常用选项

作业控制参数如下:

选项 含义 类型 示例
-J 作业名称,使用squeue看到的作业名
字符串
-J wrf;表示作业名称为"wrf"
-n 作业申请的总cpu核心数 数值 -n 240;表示作业申请240个cpu核心
-N 作业申请的节点数 数值 -N 10 表示作业申请10个计算节点
-p 指定作业提交的队列 字符串 -p silicon表示将作业提交到silicon队列
--ntasks-per-node 指定每个节点运行进程数 数值 --ntasks-per-node=32表示每个节点运行32个进程(任务)
--cpus-per-task=<count> 指定任务需要的处理器数目 数值 --cpus-per-task=1 表示每个任务占用1个处理器核
-t 指定作业的执行时间,若超过该时间,作业将会被杀死 数值 -t 30 表示作业的执行时间不超过30分钟
-o 指定作业标准输出文件的名称,不能使用shell环境变量 字符串 -o %j,表示使用作业号作为作业标准输出文件的名称,%J表示作业号
-e 指定作业标准错误输出文件的名称,不能使用shell环境变量 字符串 -e %j,表示使用作业号作为作业标准错误输出文件的名称
-w, --nodelist=hosts... 指定分配特定的计算节点 字符串 -w t0100,t0101 表示使用t0100 t0101等2个节点
-x, --exclude=hosts... 指定不分配特定的阶段节点 字符串 -x t0100,t0101 表示不使用t0100 t0101等2个节点
--exclusive 指定作业独占计算节点 字符串 sbatch –exclusivetest.job
--mem=<size[units]> 指定作业在每个节点使用的内存限制。 数字 --mem=2G 限定作业在每个节点最多占用2G的最大内存。
--mem-per-cpu=<size[units]> 限定每个进程占用的内存数。 数字 --mem-per-cpu=512M 限定作业每个进程占用的最大内存。
-d, --dependency=<dependency_list> 作业依赖关系设置 字符串 -d after:123 表示本作业须待作业123开始以后再执行
--gres=<list> 指定每个节点使用通用资源名称及数量 字符串 --gres=加速卡:2 表示本作业使用加速卡,且每个节点使用2卡

使用示例

串行作业示例

#!/bin/bash
#SBATCH –J TestSerial
#SBATCH -p normal
#SBATCH -N 1
#SBATCH –n 1
#SBATCH -o log/%j.loop
#SBATCH -e log/%j.loop
echo "SLURM_JOB_PARTITION=$SLURM_JOB_PARTITION"
echo "SLURM_JOB_NODELIST=$SLURM_JOB_NODELIST"
srun  ./calc_serial 1000000

mpi作业示例

OpenMPI支持多种方式与作业调度集成,其中最推荐的方式是使用srun直接启动任务。

在作业脚本中使用srun;

#!/bin/bash
#SBATCH -o %j
#SBATCH -J MPI
#SBATCH -t 00:10:00
#SBATCH -p hpc
#SBATCH --mem-per-cpu=3G
#SBATCH --tasks-per-node=32
#SBATCH -N 2

module load compiler/devtoolset/7.3.1
module load compiler/rocm/2.9
module load mpi/hpcx/2.4.1/gcc-7.3.1

#  4x32, about   60 sec
 export LOOPMAX=1000000

CORELOOP=$(expr $LOOPMAX / 128)
echo "CORELOOP=$CORELOOP"
export LOOPMAX=$(expr $SLURM_NTASKS \* $CORELOOP )
echo "LOOPMAX=$LOOPMAX"

export MPITYPE=pmix_v3
echo "use srun, loop=$LOOPMAX" && time srun --mpi=$MPITYPE ./open_fire_v5 $LOOPMAX

作业环境变量

提交作业后,作业管理软件会产生一些环境变量,可以在作业脚本中使用。列举如下:

名称 含义 类型 示例
SLURM_JOB_ID 作业id,即作业调度系统为作业分配的作业号,可用于bjobs等命令
数值
hostfile=" ma.$SLURM_JOB_ID" 使用$SLURM_JOB_ID定义machinefile,指定mpi节点文件
SLURM_JOB_NAME 作业名称,即-J 选项指定的名称 字符串 mkdir ${SLURM_JOB_NAME} 根据作业名称创建临时工作目录
SLURM_JOB_NUM_NODES 作业分配到的节点总数 数值 echo $SLURM_JOB_NUM_NODES
SLURM_JOB_NODELIST 作业被分配到的节点列表 字符串 echo $SLURM_JOB_NODELIST
SLURM_JOB_PARTITION 作业被分配到的队列名 字符串 echo $SLURM_JOB_NODELIST

更完整的输入和输出环境变量可通过sbatch帮助手册查询。

results matching ""

    No results matching ""