超算平台 SLURM 作业调度系统使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了超算平台 SLURM 作业调度系统使用相关的知识,希望对你有一定的参考价值。
参考技术A并行计算 ,使用了openMPI 编译生成可执行程序fast,需要运行在4个节点 48个进程。生成脚本sub.sh如下所示:
根据该脚本(chmod 修改该脚本可执行权限 chmod 775 sub.sh),提交批处理命令如下:
pkubatch ./sub.sh
单节点计算 ,以下为bla.sh内容,注意脚本里可不用使用srun。
sbatch [OPTIONS(0)...] [ : [OPTIONS(n)...]] script(0) [args(0)...]
常用参含义
--help 显示sbatch命令的使用帮助信息;
-A <account> 指定计费账户;
-D, --chdir=<directory> 指定工作目录;
--get-user-env 获取用户的环境变量;
--gres=<list> 使用gpu这类资源,如申请两块gpu则--gres=gpu:2
-J, --job-name=<jobname> 指定该作业的作业名;
--mail-type=<type> 指定状态发生时,发送邮件通知,有效种类为(NONE, BEGIN, END, FAIL, REQUEUE, ALL);
--mail-user=<user> 发送给对应邮箱;
-n, --ntasks=<number> sbatch并不会执行任务,当需要申请相应的资源来运行脚本,默认情况下
一个任务一个核心,--cpus-per-task参数可以修改该默认值;
-c, --cpus-per-task=<ncpus> 每个任务所需要的核心数,默认为1;
--ntasks-per-node=<ntasks> 每个节点的任务数,--ntasks参数的优先级高于该参数,如果使用--ntasks
这个参数,那么将会变为每个节点最多运行的任务数;
-o, --output=<filename pattern> 输出文件,作业脚本中的输出将会输出到该文件;
-p, --partition=<partition_names> 将作业提交到对应分区;
-q, --qos=<qos> 指定QOS;
-t, --time=<time> 设置限定时间;
案例1、
提交一个作业,该作业提交到cn-short的分区上,提交的优先级为low,共使用两个节点,每个节点4个核心,作业名为MyFirstJob,以下为脚本的内容,脚本文件名为job.sh。
使用批处理脚本提交作业 Slurm
【中文标题】使用批处理脚本提交作业 Slurm【英文标题】:Submitting Jobs Slurm with Batch Script 【发布时间】:2021-08-01 17:14:57 【问题描述】:我正在尝试通过 SLURM 提交作业,但通过 sbatch 包含 SLURM 命令,因此使用批处理脚本。我创建的脚本确实提交了 slurm 作业,但还包括其他我不确定它们来自哪里的作业(见下文);特别是作业中的 .bat 和 .ext 。任何有关正在发生的事情的见解将不胜感激。
我创建了一个包含以下内容的测试脚本:
批处理脚本 (script.sh)
#! /bin/bash
#
#SBATCH --job-name="slurm_test"
#SBATCH --output=sbatch.out
#SBATCH --partition=xfr
#SBATCH --gres=tmpspace:2G
#SBATCH --time=00:05:00
#SBATCH --mem=2G
#SBATCH -e errlog.out
#SBATCH --mail-type=ALL
#SBATCH --mail-user=user_mail@gmail.com
#
echo "SLURM_JOBID="$SLURM_JOBID
echo "SLURM_JOB_NODELIST"=$SLURM_JOB_NODELIST
echo "SLURM_NNODES"=$SLURM_NNODES
echo "working directory = "$SLURM_SUBMIT_DIR
#
echo"Launch rsync"
echo $(hostname)
#hostname
echo $(date)
#date
#echo modulepath
echo $MODULEPATH
echo pythonpath
echo $PYTHONPATH
#dump the whole environment to a file
env >env.txt
echo "All Done!"
(base)
这就是我的工作的样子:
JobID JobName Partition Account AllocCPUS State ExitCode
------------ ---------- ---------- ---------- ---------- ---------- --------
5402068 slurm_test xfr gen 2 COMPLETED 0:0
5402068.bat+ batch gen 2 COMPLETED 0:0
5402068.ext+ extern gen 2 COMPLETED 0:0
我运行如下:
命令行
sbatch script.sh
我过去曾尝试过这样运行:
sbatch --time=00:05:00 --mem=2G -p xfr -gres=tmpspace:2G -o log.out -e errlog.out --mail-type=FAIL --mail-user=user_mail@gmail.com script.sh
【问题讨论】:
这里和batch-file
没有关系,其实和Window的cmd
有关系,看实际标签信息本身。
【参考方案1】:
每一行
5402068.bat+ batch pmc_gen 2 COMPLETED 0:0
5402068.ext+ extern pmc_gen 2 COMPLETED 0:0
对应于作业步骤(有关步骤和其他内容的详细信息,请参阅this question)。
通常使用srun
命令创建步骤,但在这里您没有使用它。因此,您将获得默认步骤:
batch
,对应提交脚本本身的执行,
extern
,这是 Slurm 内部使用的一个步骤。当PrologFlag=contain
时出现。
【讨论】:
以上是关于超算平台 SLURM 作业调度系统使用的主要内容,如果未能解决你的问题,请参考以下文章