快速入门:Slurm资源管理与作业调度系统


导读

本文将介绍slurm,一个 Linux服务器中的集群管理和作业调度系统。并对其基础命令和运行方式进行实战演练。

1. 简介

Slurm 组件

Slurm[1] (doc[2]:Simple Linux Utility for Resource Management)是一个开源、容错和高度可扩展的集群管理和作业调度系统,适用于大型和小型 Linux 集群。Slurm 的运行不需要内核修改,并且相对独立。作为集群工作负载管理器,Slurm 具有三个关键功能。首先,它在一段时间内为用户分配对资源(计算节点)的独占和/或非独占访问权限,以便他们可以执行工作。其次,它为在分配的节点集上启动、执行和监控工作(通常是并行工作)提供了一个框架。最后,它通过管理待处理工作队列来仲裁资源的争用。

2. 目标

slurm 实体
  1. 让用户请求计算节点进行分析(作业)
  2. 提供一个框架(命令)来启动、取消和监控作业
  3. 跟踪所有作业,以确保每个人都可以有效地使用所有计算资源,而不会互相干扰。

3. 命令

command Description
sbatch 向 SLURM 提交批处理脚本
squeue 列出当前正在运行或在队列中的所有作业
scancel 取消提交的工作
sinfo 检查所有分区中节点的可用性
scontrol 查看特定节点的配置或有关作业的信息
sacct 显示所有作业的数据
salloc 预留交互节点

3.1. squeue

第一个 SLURM 命令是 squeue。它可以显示所有使用超级计算机的人提交给 SLURM 调度程序的所有作业的列表。此命令可以告诉您超级计算资源的繁忙程度以及您的作业是否正在运行。

squeue
  • 结果解读
Header column Definition
JOBID 该作业的ID,通常是一个很大的数字
PARTITION 分配给给定作业的分区
NAME 用户为此作业提供给 SLURM 的名称
USER 提交作业的用户名
ST 作业状态,running(R), PenDing(PD)
NODES 请求的节点数
NODELIST(REASON) 作业在哪个节点上运行(或未运行的原因)
  • 根据用户名查看任务运行情况
squeue -u $USER  # 用户名

squeue -u

3.2. scancel

如果您提交作业并意识到由于某种原因需要取消它,您将在 squeue 中使用带有上述 JOBID 的 scancel 命令

scancel 2867457

这会向 SLURM 调度发送信号以停止正在运行的作业或从 SLURM 队列中删除待处理的作业。

3.3. sbatch

sbatch 命令是最重要的命令,用于向超级计算集群提交作业。作业是在计算资源上运行的脚本。该脚本包含您要在超级计算节点上运行的命令。

sbatch slurm.batch.sh

一旦您编写了 SLURM 提交脚本,就超级容易使用。这是许多新用户卡住的部分,但它确实还不错。您只需将标题添加到其中包含您的命令的文本文件。

3.4. sinfo

有时可能很难获得一个节点并且您最终在 SLURM 队列中很长一段时间,或者您只是想在提交之前测试一个脚本并离开以确保它运行良好。找出可用节点的最简单方法是使用 sinfo 命令。

$ sinfoPARTITION        AVAIL  TIMELIMIT  NODES  STATE NODELISTdebug               up    1:00:00      1  maint ceres19-compute-26debug               up    1:00:00      1    mix ceres14-compute-4debug               up    1:00:00      1   idle ceres19-compute-25brief-low           up    2:00:00      2  maint ceres19-compute-[26,40]brief-low           up    2:00:00      1  down* ceres19-compute-37brief-low           up    2:00:00     59    mix ceres18-compute-[0-17,19-27],ceres19-compute-[0-5,7-9,12,21-24,35-36,38-39,41-42,44-45,47,55-63]brief-low           up    2:00:00      4  alloc ceres18-compute-18,ceres19-compute-[6,28,43]brief-low           up    2:00:00     26   idle ceres19-compute-[10-11,13-20,25,27,29-34,46,48-54]mem768-low          up    2:00:00      3   idle ceres18-mem768-0,ceres19-mem768-[0-1]mem-low             up    2:00:00      3    mix ceres18-mem-[0-1],ceres19-mem-1

SINFO提供以下信息

Header column Definition
PARTITION 一组节点
AVAIL 节点是否启动、关闭或处于其他状态
TIMELIMIT 用户可以请求给定分区中的节点的时间量
NODES 给定分区中的节点数
STATE 维护、混合、空闲、停机、分配
NODELIST 具有给定状态的节点名称

使用此信息,可以找到具有可用于作业的空闲节点的分区。不幸的是, sinfo 本身有点混乱,所以我创建了一个别名,将输出格式化为更易于阅读

sinfo -o "%20P %5D %14F %10m %11l %N"PARTITION            NODES NODES(A/I/O/T) MEMORY     TIMELIMIT   NODELISTdebug                3     0/3/0/3        126000+    1:00:00     ceres14-compute-4,ceres19-compute-[25-26]brief-low            92    33/58/1/92     381000     2:00:00     ceres18-compute-[0-27],ceres19-compute-[0-63]priority-gpu         1     1/0/0/1        379000     14-00:00:00 ceres18-gpu-0short*               100   51/48/1/100    126000+    2-00:00:00  ceres14-compute-[1-24,26-29,32-39,44-56,58-67],ceres18-compute-[24-27],ceres19-compute-[27-63]medium               67    49/17/1/67     126000+    7-00:00:00  ceres14-compute-[26-29,32-39,44-56,58-67],ceres18-compute-[25-27],ceres19-compute-[35-63]long                 34    31/3/0/34      126000+    21-00:00:00 ceres14-compute-[44-56,58-67],ceres18-compute-[26-27],ceres19-compute-[55-63]mem                  8     3/4/1/8        1530000+   7-00:00:00  ceres14-mem-[0-3],ceres18-mem-2,ceres19-mem-[2-4]mem768               1     0/1/0/1        763000     7-00:00:00  ceres18-mem768-1huge                 1     1/0/0/1        4:16:1   3095104    14990      1-00:00:00  fat,AVX,AVX2,AVX novahuge001

3.5. scontrol

如果您需要查看特定节点的配置以确定该类型的节点是否足以进行分析或诊断问题(如内存分段不足故障)。 scontrol 可用于查找节点上的信息,例如 ceres14-compute-8

$ scontrol show nodes ceres14-compute-8

NodeName=ceres14-compute-8 Arch=x86_64 CoresPerSocket=10   CPUAlloc=0 CPUTot=40 CPULoad=0.01   AvailableFeatures=AVX   ActiveFeatures=AVX   Gres=(null)   NodeAddr=ceres14-compute-8 NodeHostName=ceres14-compute-8 Version=19.05.5   OS=Linux 3.10.0-1062.12.1.el7.x86_64 #1 SMP Tue Feb 4 23:02:59 UTC 2020   RealMemory=126000 AllocMem=0 FreeMem=85536 Sockets=2 Boards=1   State=IDLE ThreadsPerCore=2 TmpDisk=975 Weight=1 Owner=N/A MCS_label=N/A   Partitions=short,geneious   BootTime=2020-02-17T17:14:55 SlurmdStartTime=2020-02-18T17:12:06   CfgTRES=cpu=40,mem=126000M,billing=40   AllocTRES=   CapWatts=n/a   CurrentWatts=0 AveWatts=0   ExtSensorsJoules=n/s ExtSensorsWatts=0 ExtSensorsTemp=n/s

有时,您想了解更多关于您刚刚运行或当前运行的作业的信息。

scontrol show job 2909617

JobId=2909617 JobName=bash   UserId=remkv6(298590) GroupId=domain users(101) MCS_label=N/A   Priority=84730 Nice=0 Account=gif QOS=gif   JobState=RUNNING Reason=None Dependency=(null)   Requeue=1 Restarts=0 BatchFlag=0 Reboot=0 ExitCode=0:0   RunTime=06:58:38 TimeLimit=10:00:00 TimeMin=N/A   SubmitTime=2020-05-18T07:29:05 EligibleTime=2020-05-18T07:29:05   AccrueTime=Unknown   StartTime=2020-05-18T07:29:05 EndTime=2020-05-18T17:29:05 Deadline=N/A   SuspendTime=None SecsPreSuspend=0 LastSchedEval=2020-05-18T07:29:05   Partition=long_1node192 AllocNode:Sid=nova:71501   ReqNodeList=(null) ExcNodeList=(null)   NodeList=nova027   BatchHost=nova027   NumNodes=1 NumCPUs=4 NumTasks=4 CPUs/Task=1 ReqB:S:C:T=0:0:*:*   TRES=cpu=4,mem=20400M,node=1   Socks/Node=* NtasksPerN:B:S:C=4:0:*:* CoreSpec=*   MinCPUsNode=4 MinMemoryCPU=5100M MinTmpDiskNode=0   Features=(null) DelayBoot=00:00:00   OverSubscribe=OK Contiguous=0 Licenses=(null) Network=(null)   Command=bash   WorkDir=/work/gif/remkv6/Baum/04_DovetailSCNGenome/01_mikadoRerurn/01_BrakerFix/braker   Comment=Time 600, Med priority, overdrawn   Power=

提示如果您将下面代码放在 SLURM 脚本的末尾,它将在您的工作完成后将其输出到您的标准输出文件。

scontrol show job $SLURM_JOB_ID

3.6. sacct

此命令提供有关已提交作业的有用信息。

Column Description
JobID 作业编号
JobName 任务名称
Partition 它正在运行或排队等待 SLURM 队列的哪个分区
Account 它在哪个帐户/组上运行
AllocCPUS 分配/请求的 CPU 数量
State ExitCode 工作状态或退出代码

该命令本身只会为您提供有关您的工作的信息

sacct

# 添加 -a 参数将提供有关所有帐户的信息。sacct -a

# 下面的命令可以提供更多有用的列信息。sacct -a --format JobID,Partition,Timelimit,Start,Elapsed,NodeList%20,ExitCode,ReqMem,MaxRSS,MaxVMSize,AllocCPUS

3.7. salloc

也可以通过首先使用 salloc 在分区中保留一个节点来交互地运行作业脚本中的命令

# 下面的命令将在短分区中为 1 个节点提供 4 个 cpu,时间为 00 小时:30 分钟:00 秒

$ salloc -N 1 -n 4 -p short -t 00:30:00

salloc: Pending job allocation 2935626salloc: job 2935626 queued and waiting for resourcessalloc: job 2935626 has been allocated resourcessalloc: Granted job allocation 2935626salloc: Waiting for resource configurationsalloc: Nodes ceres14-compute-48 are ready for jobexport TMPDIR=/local/bgfs//2935626export TMOUT=5400

4. Scripts

SLURM 脚本包含一个带有 SLURM SBATCH 注释 #SBATCH 的标题。这些注释告诉 SLURM 以下信息。

  • 节点数
  • 所需的处理器或作业数量
  • 要使用的分区/队列类型(可选)
  • 内存要求(可选)
  • 想要运行作业的时间长度(每个分区都有一个默认值)
  • 在哪里写入输出和错误文件
  • 在 HPC 上运行时的作业名称
  • 获取工作状态的电子邮件 ID(可选)

这是最常用的#SBATCH 注释的表格说明

SBATCH command Description
#SBATCH -N 1 预留单个节点
#SBATCH -n 4 作业步骤将启动最多 4 个作业
#SBATCH -p short 预留在短分区
#SBATCH -t 01:00:00 预留 01 时:00 分:00 秒
#SBATCH -J sleep 工作的名称是“睡眠”
#SBATCH -o sleep.o%j 将任何 std 输出写入名为 sleep.o%j 的文件,其中 %j 自动替换为 jobid
#SBATCH -e sleep.e%j 将任何 std 输出写入名为 sleep.e%j 的文件,其中 %j 自动替换为 jobid
#SBATCH –mail-user=user@domain.edu 通过此电子邮件地址通知我
#SBATCH –mail-type=begin 工作开始时通过电子邮件通知
#SBATCH –mail-type=end 工作结束时通过电子邮件通知

5. script

现在您对#SBATCH 注释有了更多了解,SLURM 作业脚本可以直接编写,包含两个组件:

  • 带有#SBATCH 注释的 SLURM 标头定义了您需要的资源
  • 您要运行的命令

5.1. header

一旦你编写了这个,你可以通过根据你的需要修改#SBATCH 注释来将它重用于你需要的其他脚本。

#!/bin/bash

# 下面以单个 `#SBATCH` 开头的所有行都是 SLURM SBATCH 注释

#SBATCH -N 1#SBATCH -n 4#SBATCH -p short#SBATCH -t 01:00:00#SBATCH -J sleep#SBATCH -o sleep.o%j#SBATCH -e sleep.e%j#SBATCH --mail-user=user@domain.edu#SBATCH --mail-type=begin#SBATCH --mail-type=end

cd $SLURM_SUBMIT_DIR # 此行将您更改为作业开始后提交脚本的目录

5.2. 命令

## 以下几行是要运行的命令

sleep 10 && echo "I slept for 10 seconds"

scontrol show job $SLURM_JOB_ID## scontrol 是一个 slurm 命令,用于查看 slurm 配置或状态。查看您使用了多少资源。

5.3. 提交

sbatch slurm.batch.sh  # 提交命令

作业完成后会出现以下文件

sleep.o2935316 # 这是标准输出,其中 2935316 是 JOBIDsleep.e2935316 # 这是标准错误,其中 2935316 是 JOBID

参考资料

[1]

slurm: https://slurm.schedmd.com/overview.html

[2]

Docs: https://bioinformaticsworkbook.org/Appendix/Unix/01_slurm-basics.html

本文由 mdnice 多平台发布

快速入门:Slurm资源管理与作业调度系统相关推荐

  1. 零基础小白快速入门记者,快来看这篇文章

    如何做好一名记者? 如何选题? 如何写稿? 如何采访? -- 这些是媒体实习生们最常见的问题,本篇就如何快速入门记者行业做个系统总结,希望能帮助到实习生们. 选题:选题,是衡量着文章内容方向,价值观. ...

  2. 【HPC最全最新离线安装开源资源管理、作业调度软件-SLURM】

    文章目录 HPC 离线最全安装开源资源管理.作业调度软件-SLURM 一.★ 软件简介 1.1 软件定义 1.2 软件架构 1.3 slurm 插件 1.5 slurm配置模式分类 1.6 slurm ...

  3. 浅谈Slurm作业调度系统

    1.相关基本概念 资源(Resource) 作业运行过程中使用的可量化实体都是资源: 包括硬件资源(节点.内存.CPU .GPU等)和软件资源( License ): 集群(Cluster) 包含计算 ...

  4. 【Linux】Slurm作业调度系统使用

    目录 一.前言 二.Slurm介绍 三.如何使用 sinfo 查看节点和分区信息 squeue 查看调度队列中作业信息 srun 运行并行作业 sbatch 用批处理脚本提交作业 scancel 取消 ...

  5. slurm用户快速入门手册

    1. 概述 2. 架构 3. 命令 3.1 sacct 3.2 sattach 3.4 sbatch 3.5 sbcast 3.6 scancel 3.7 scontrol 3.8 sinfo 3.9 ...

  6. 教你从0到1搭建秒杀系统-Canal快速入门(番外篇)

    Canal用途很广,并且上手非常简单,小伙伴们在平时完成公司的需求时,很有可能会用到.本篇介绍一下数据库中间件Canal的使用. 很多时候为了缩短调用延时,我们会对部分接口数据加入了缓存.一旦这些数据 ...

  7. 备份linux系统报错_Linux 系统如何快速入门?分享民工哥总结的经验

    大家好,我是民工哥.认识或熟悉我的人都知道,是做运维出身的,所以,很多时候,有很多朋友喜欢问我一些有关运维的问题,比如: 我应该如何入门Linux系统运维? Linux系统运维到底需要学哪些技术?怎么 ...

  8. IM开发快速入门(一):什么是IM系统?

    本文在编写时参考了博客作者"鹿呦呦"和在线课程"即时消息技术剖析与实战"的相关资料,一并表示感谢. 1.系列文章引言 IM系统看似简单(没错,很多土老板认为开发 ...

  9. 架构设计:系统间通信(36)——Apache Camel快速入门(上)

    1.本专题主旨 1-1.关于技术组件 在这个专题中,我们介绍了相当数量技术组件:Flume.Kafka.ActiveMQ.Rabbitmq.Zookeeper.Thrift .Netty.DUBBO等 ...

最新文章

  1. 一文梳理水下检测方法
  2. ImageNet训练再创纪录!谷歌提出1个小时训练EfficientNet,准确率高达83%!
  3. 无法量产自动驾驶汽车的企业,与谷歌公司差在哪儿
  4. 【深度学习入门到精通系列】特别正经的合理调参介绍~❤️
  5. Linux-Raid0、Raid1、Raid5、Raid10初探
  6. Android短视频中如何实现720P磨皮美颜录制?
  7. 201771010125王瑜《面向对象程序设计(Java)》第六周学习总结
  8. oracle仲裁磁盘是一块磁盘吗,基于ASM冗余设计的架构,仲裁磁盘组应该如何去规划?...
  9. w3c html规范规范文档,前端开发规范
  10. Simulink之绝缘栅双极型晶体管(IGBT)
  11. Jumpserver web界面跳板机
  12. python里的π怎么调用_用python计算圆周率π
  13. OpenCV 单目摄像头(python版)
  14. 反向题在测试问卷信效度_防御方式问卷 (DSQ)信度和效度研究
  15. skiplist及Java实现
  16. c语言中scanf()用法,C语言中scanf()的用法!
  17. PgMP学习感受分享
  18. 【线程池封装】实现简单回射服务器
  19. C++Primer第五版 第十二章习题答案(1~10)
  20. 如何在Microsoft Edge中更改主页

热门文章

  1. ASP.NET 2.0收集
  2. 让人春分日 哈工科教100272.关路灯
  3. 有哪些日记app可以用来记录生活?
  4. 在windows中要使用计算机进行高级,2017年电大计算机上机操作题(带答案)
  5. DP12 龙与地下城游戏问题
  6. Python|计算圆柱体的表面积
  7. 第十六讲:完美主义身心健康 第十七讲:身心健康:运动与冥想 第十八讲:睡眠,触摸和爱情的重要性
  8. 亚马逊主图视频和买家秀视频有必要做吗?
  9. 终于有人来盘一盘安卓ASO技巧了,安卓市场aso优化技巧
  10. Spring IOC 和AOP 简单理解