超算平台 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 作业调度系统使用的主要内容,如果未能解决你的问题,请参考以下文章

slurm任务调度系统部署和测试

Slurm任务调度系统部署和测试

slurm-16.05.3任务调度系统部署与测试

Slurm及OpenLDAP部署

在.slurm文件中激活Anaconda环境

R 脚本不在 Slurm 批处理作业中运行