slurm作业管理三种作业模式和常用命令介绍

Slurm (Simple Linux Utility for Resource Management ,http://slurm.schedmd.com/ )是开源的、具有容错性和高度可扩展大型和小型 Linux集群资源管理和作业调度系统。超级计算系统可利用 Slurm 进行资源和作业管理,以避免相互干扰,提高运行效率。所有需运行的作业无论是用于程序调试还是业务计算均必须通过交互式并行 srun、批处理式 sbatch 或分配式 salloc 等命令提交,提交后可以利用相关命令查询作业状态等。
Slurm 利用分区(partition)对 CPU、内存、网络等资源进行分类,以便将不同需求的作业运行到不同计算节点上。用户需利用 slurm 命令将该作业所需要的CPU 核等资源等提交到特定的分区中,等作业申请的资源得到满足后,作业才开始运行。作业运行受分区、账户、服务质量(QOS)等限制。
Slurm有三种作业提交模式

1.使用sbatch命令提交批处理模式作业

sbatch命令常用参数
-N, --nodes=N #指定节点数量
-o, --output=out_filename #指定输出文件输出
-p, --partion=debug #指定分区
-t, --time=<hh:mm:ss> #作业最大运行时间
--mem=<MB> #指定每个节点上使用的物理内存
--begin #指定作业开始时间
-D,--chdir #指定脚本/命令的工作目录
-c, --cpu-per-task=NCPUs #指定每个进程使用核数,不指定默认为1
-e, --error=error_filename #指定错误文件输出
-J, --job-name=JOBNAME #指定作业名称
--get-user-env #获取当前的环境变量
--gres=<gpu:count> #使用gpu这类资源,如申请两块gpu则--gres=gpu:2
--mail-type=END/FAIL/ALL #邮件提醒,可选:END,FAIL,ALL
--mail-user=mail_address #通知邮箱地址
-n, --ntask=NTASKs #指定总进程数;不使用cpus-per-task,可理解为进程数即为核数
--ntask-per-node=N #指定每个节点进程数/核数,使用-n参数后变为每个节点最多运行的进程数
-w, --nodelist=<node_name> #指定优先使用节点,不可与避免节点冲突
-x, --exclude=<node_name> #指定避免使用节点,不可与优先节点冲突
--mem-per-cpu=<MB> #指定计算cpu最大占用内存大小

1.1.使用命令行的方式提交

sbatch -J test_task -N 2 -n 16 -o job.%j.out ./test.sh

1.2.使用脚本的方式提交

test.sh脚本内容如下
#!/bin/bash
#SBATCH -o job.%j.out
#SBATCH -J test_task
#SBATCH -N 2
#SBATCH -n 16#这里写你的命名,例如
hostname

提交命令是

sbatch ./test.sh

2.使用srun命令提交交互模式作业

srun [options] program 命令属于交互式提交作业,有屏幕输出,但容易受网络波动影响,断网或关闭窗口会导致作业中断。一般仅在调试程序时使用此方式提交作业。
命令示例如下:
srun -p gpu -w <node_name> -N 2 -n 80 -t 20

参数解释如下:

-p gpu 指定提交作业到 gpu 队列
-w 指定使用节点
-N 2 指定使用 2 个节点
-n 40 指定进程数为 40
-t 20 指定作业运行时间限制为 20 分钟

3.使用salloc命令提交分配模式作业

salloc用于申请计算节点,然后登录到申请到的计算节点上运行指令,salloc的参数与sbatch相同,作业完成以后,执行scancel JOBID释放分配模式作业的节点资源。

4.slurm常用命令介绍

4.1.sinfo命令查询节点状态

sinfo命令常用参数
-a 查看所有节点状态
-N 按节点列出详细信息。
-n <node_name>: 查看指定节点状态
-p <partition>: 查看指定分区的状态。
-o "%N %C %m %G %t":自定义输出(节点、CPU、内存、GPU、状态)

4.2.使用squeue命令查看作业队列

squeue命令常用参数

-l 查看列表细节信息
-u <user>: 查看指定用户的作业。
-j <jobid>: 查看特定作业。
--format="%.18i %.9P %.8j %.8u %.2t %.10M %.6D %.4C %R":自定义输出格式。

4.3.使用scancel命令取消作业

scancel命令常用参数
-u <user>:取消用户的所有作业(管理员权限)。
-t <state>:取消特定状态的作业(如 PENDING)。

4.4.使用sacct命令查看历史作业

sacct命令常用参数
-j <jobid>: 查看特定作业。
-S <start_time> / -E <end_time>:按时间范围过滤。
--format=JobID,JobName,Partition,AllocCPUS,Elapsed,State:自定义输出

4.5.使用scontrol命名实时集群管理

scontrol命令参数
show job <jobid>:查看作业详细信息(包括失败原因)。
show node: 查看所有节点详细信息
show node <node_name>: 查看指定节点详细信息
update NodeName=<node_name> State=DOWN:将节点标记为下线。
update JobId=<jobid> TimeLimit=2:00:00:修改作业时间限制。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.sulao.cn/post/1079

评论列表

相关推荐

0%