前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【科研利器】slurm作业调度系统(三)

【科研利器】slurm作业调度系统(三)

作者头像
自学气象人
发布于 2022-10-09 01:42:55
发布于 2022-10-09 01:42:55
2.9K00
代码可运行
举报
文章被收录于专栏:自学气象人自学气象人
运行总次数:0
代码可运行

大家好哇!上一期我们介绍了提交批处理任务的整个流程,包括查看资源、编写脚本、提交作业、查询作业信息等内容。今天呢,我们主要就作业脚本中两个非常重要的概念 Partition和 QoS 进行介绍,并给出一些实用技巧。

1

理解Partition

要想彻底理解分区,我们首先要搞清楚分区(Partition)是什么。它其实可以看作为一些节点的集合,是为了实现某一类功能而整合起来的一套计算资源的配置,每个分区都有自己的限制。举个例子来理解,如下表所示,我们有两个分区:cpu 分区和 gpu 分区。他们各自的资源配置不同,有的有 cpu 节点,有的有 gpu 节点。如果我们现在想做一个简单的但是计算量大的工作,我们该选择哪个分区呢?显然是 gpu 分区对不对?因为它含有 gpu 节点,这样的简单重复性工作是它天然的优势。由此可见,由于不同的节点的特性和硬件属性不同,设置分区可以帮助用户更好地根据其下面所配置的节点的特点以及自己作业的需求,选择最适合自己的分区进行运算,提高效率。如果集群中部分机器是私有的,那么设置分区还可以使得只有部分用户能在这个分区提交作业,减少作业的排队时间。

不同分区除了计算资源的配置不同外,他们的最长作业时间限制也大多不同(从上表可以看出)。这点在编写作业脚本中选择分区时候需要考虑到,根据自己作业运行的大致时间确定合适的分区。否则当你的作业到达分区最长限制时间时,会被自动杀死(惨兮兮,又要重排队了)。当然,如果万不得已还是超了的话,也有补救方法,那就是联系超算管理员,让他给你单独延长作业时间。

总结一下,选择分区的时候,首先需要关注该分区计算资源的配置,是否有利于你作业的运行(如是否有 gpu 节点、节点数够不够多、内存够不够大等)。其次,需要了解该分区的最大作业时长是多少,是否能够跑完你的作业。最后一点,关注该分区节点的状态,在有多个分区的配置满足任务需求的时候,当然选择那个排队少的分区啦(关于如何查看节点状态,可见【科研利器】slurm作业调度系统(二))。

2

理解QoS

那作业脚本中常见的 QoS 又是什么呢?QoS(Quality ofService)和分区不同,它表示服务质量,它更多刻画了作业的属性而非节点的属性。不同任务的特性不同,指定 QoS 可以使得资源更好分配。例如,用户若只是想简单调试自己的程序,而非大规模地运行,那么这样的作业的特点是“短时间”,“用户对结果的需求很迫切”。为这样的作业设计 QoS 是非常有必要的。如下表所示两种 QoS,用户可根据需求自行选择。从中可以看到 debug 的 QoS 优先级高,但对每个用户的可用资源也相应变少。

这里需要注意的是当 QoS 和 Partition 同时指定最大运行时间时,以二者限制最严格的为准。例如,指定 QoS 为 debug 并提交到 cpu 分区中,则最长运行时间为3小时。指定 QoS 为normal 并提交到 cpu 分区中,则最长运行时间为7天。

对于收费集群,用户需要指定 QoS,不同 QoS 的执行优先级不同,收费也不同。通过sacctmgr 命令可以查询每个用户在每个分区下可用的QoS,具体可以通过 -h 参数进行学习。

3

几个实用技巧

查询历史作业

当我们把作业提交到超算上之后,在作业没有完成之前,我们都可以通过之前讲解过的 squeue 命令查询任务状态。但一旦作业结束之后,squeue 命令是无法看到历史作业状态的。因为我们并不会盯着 squeue看,所以有时候不清楚作业到底是正常跑完了结束还是因为报错退出了。这时候便可以用 sacct 命令来查看历史作业。

1)默认情况下,用户仅能查看属于自己的历史作业。直接使用 sacct 命令会输出从当天 00:00:00 起到现在的全部作业。

2)如果使用如下命令,则会输出从 MM 月 DD 日起的所有历史作业。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sacct -S MMDD

3)默认情况会输出作业 ID,作业名,分区,账户,分配的 CPU,任务结束状态,返回码。当然我们还可以使用 --format 参数来指定到底要输出那些指标。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[xiazh@login]$ sacct --format=jobid,user,alloccpu,allocgres,state%15,exitcode
       JobID      User  AllocCPUS    AllocGRES           State    ExitCode
------------ --------- ---------- ------------ --------------- --------
104              xiazh          1        gpu:1       COMPLETED      0:0
141              xiazh         12               CANCELLED by 0      0:0
142              xiazh          1                       FAILED      2:0

在这里我们详细显示了作业 ID,用户,申请的 CPU,申请的 GPU,任务结束状态,返回码,其中我们比较感兴趣的是任务结束状态。在这里我们看到,JOBID 为 141 的作业的状态是 CANCELLED by 0,这里 0 表示系统的 root 用户。这条信息表示:我们的任务被集群的超级管理员强制取消了!这就需要询问管理员具体的原因了。另外, JOBID 为 142 作业的状态是 FAILED,它的含义是我们的作业脚本中有命令异常退出,这时候就需要检查我们的 slurm 脚本的命令部分或者是查看运行环境了。

更新任务设置

有时我们很早就提交了任务,但是在任务开始前却发现作业的属性写错了(例如提交错了分区,忘记申请 GPU 个数),取消了重新排队似乎很不划算。如果作业恰好还没有运行我们是可以通过 scontrol 命令来修改作业的属性。

由于可修改的属性非常多,我们可以借助 slurm 自动补全功能来查看可修改的内容。这只需要我们在输入完 JOBID 后空一格并敲两下 TAB 键。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[xiazh@login ~]$ scontrol update jobid=520 <TAB><TAB>
account=<account>                      mintmpdisknode=<megabytes>             reqnodelist=<nodes>
conn-type=<type>                       name>                                  reqsockets=<count>
contiguous=<yes|no>                    name=<name>                            reqthreads=<count>
dependency=<dependency_list>           nice[=delta]                           requeue=<0|1>
eligibletime=yyyy-mm-dd                nodelist=<nodes>                       reservationname=<name>
excnodelist=<nodes>                    numcpus=<min_count[-max_count]         rotate=<yes|no>
features=<features>                    numnodes=<min_count[-max_count]>       shared=<yes|no>
geometry=<geo>                         numtasks=<count>                       starttime=yyyy-mm-dd
gres=<list>                            or                                     switches=<count>[@<max-time-to-wait>]
licenses=<name>                        partition=<name>                       timelimit=[d-]h:m:s
mincpusnode=<count>                    priority=<number>                      userid=<UID
minmemorycpu=<megabytes>               qos=<name>                             wckey=<key>
minmemorynode=<megabytes>              reqcores=<count>

例如我要更改当前的分区到 gpu,并且申请 1 块卡,可以输入

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scontrol update jobid=938 partition=gpu gres=gpu:1

注意变更的时候仍然不能超过系统规定的上限。变更成功后,作业的优先级可能需要重新来计算。

当任务已经开始运行时,一般不可以再变更申请资源,分区等参数。特别地,如果发现自己低估了任务运行时间,用户不能使用 scontrol 命令延长任务最大时间。但是可以根据需求减少任务的最大时间。若确实有延长任务时间的急切需求请联系超算管理员。

以上就是本期的全部内容啦,快来一起实践吧!

参考资料:

https://bicmr.pku.edu.cn/~wenzw/pages/slurm.html#partition

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 自学气象人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【科研利器】slurm作业调度系统(二)
“ 大家好哇!前面我们对slurm作业调度系统进行了一个简单的介绍【科研利器】slurm作业调度系统(一),今天我们继续对如何用slurm提交批处理任务以及使用 sinfo、squeue、scontrol命令查询作业信息进行具体的介绍。”
自学气象人
2022/10/09
5.3K0
【科研利器】slurm作业调度系统(一)
大家好哇!随着时代的不断发展,我们在做项目时所使用的数据也越来越大。当进行计算量很大的任务时,我们不可避免地会使用超级计算机(以下简称超算)来帮助我们完成。常见的超级计算机作业调度系统有SLURM和Torque PBS,但我自己在实际应用过程中常见到的是slurm,以下就slurm作业调度系统进行一些简单的介绍!
自学气象人
2022/10/09
4.8K0
【科研利器】slurm作业调度系统(一)
【科研利器】slurm作业调度系统(四)
“ 大家好哇!上一期我们介绍了作业脚本中两个非常重要的概念Partition 和 QoS 进行介绍,并给出一些实用技巧。今天呢,我们给出一些在slurm作业系统中常见的报错提示的含义及解决方法。”
自学气象人
2022/10/09
4K0
【科研利器】slurm作业调度系统(四)
Slurm 快速入门:资源管理与作业调度系统
本文将介绍slurm,一个 Linux服务器中的集群管理和作业调度系统。并对其基础命令和运行方式进行实战演练。
数据科学工厂
2023/02/27
5.2K0
Slurm 快速入门:资源管理与作业调度系统
Slurm学习笔记(二)
scontrol show partition显示全部队列信息,scontrol show partition PartitionName或 scontrol show partition=PartitionName显示队列名PartitionName的队列信息,输出类似:
种花家的奋斗兔
2021/01/06
4.4K0
SLURM使用教程
我现在经常在实验室服务器上跑程序,而老师要求我们使用SLURM作业管理系统,网上资料零零散散,这篇文章算是一个简单的汇总
mathor
2020/08/02
9.4K0
slurm学习笔记(一)
中文文档:https://docs.slurm.cn/users/shou-ce-ye
种花家的奋斗兔
2021/01/06
6K0
Slurm基本用法(入门必看)
现在,我们将提交另一个依赖于先前作业的作业。 有许多方法可以指定依赖条件,但是“singleton ”是最简单的。 Slurm -d singleton 参数告诉Slurm在之前所有具有相同名称的作业完成之前不要调度此作业。
全栈程序员站长
2022/07/21
3.6K1
Slurm基本用法(入门必看)
服务器集群任务调度系统大比拼!
普通刀片节点配备 两颗 Intel(R) Xeon(R) CPU E5-2692 v2 @ 2.20GHz 共24物理核,内存为64G 调度系统为 Slurm, 以下为常用指令
生信技能树
2019/06/05
5.6K0
服务器集群任务调度系统大比拼!
slurm 学习(一)
第五列 STATE是节点状态,alloc是已被占用节点,idle是空闲节点,comp是正在释放资源的节点,其他状态的节点都不可用,mix是该节点所有作业在运行或有程序占用cpu导致的;
用户10078835
2022/09/29
1.2K0
【科研利器】slurm作业调度系统(五)
“ 大家好哇!上一期我们给出了一些在slurm作业系统中常见的报错提示的含义及解决方法。今天我们主要来看看如何在超算中配置运行环境。”
自学气象人
2022/10/09
2K0
CONQUEST 编译安装指南 Slurm 篇
  在实际的生产环境中,使用单用户模式直接运行命令的机会不是很多,通常是采用提交作业任务给集群计算的方式。这样一来既能节约资源和时间,又能申请到更大规模的计算资源,对于平台管理人员还是用户来说都是非常有利的。国家超算中心,地方超算中心,学校超算中心一般都对外提供这样的服务,不过需要按核时进行计费。所谓“核时”就是一个 CPU 核运行一个小时,这也是高性能计算中通常使用的资源衡量单位。作为超算中心或者高性能集群,必不可缺的就是集群作业管理系统,它可以根据用户的需求,统一管理和调度集群的软硬件资源,保证用户作业公平合理地共享集群资源,提高系统利用率和吞吐率。
zhonger
2022/10/28
2.6K0
Slurm集群资源管理器的简单使用
Slurm是一个开源,容错,高度可扩展的集群管理和作业调度系统,适用于大型和小型Linux集群。主要有三个功能:
生信编程日常
2020/04/01
2.5K0
slurm--核算和资源限制
Slurm可以被配置为收集每个作业和作业步骤执行的核算信息。核算记录可以被写入一个简单的文本文件或一个数据库。目前正在执行的作业和已经终止的作业的信息都是可用的。sacct命令可以报告正在运行或已经终止的作业的资源使用情况,包括单个任务,这对于检测任务之间的负载不平衡非常有用。sstat命令可用于仅对当前正在运行的作业进行统计。它也可以为你提供关于任务之间不平衡的有价值的信息。sreport可以用来生成基于特定时间间隔内执行的所有作业的报告。
姚华
2023/03/08
3.6K0
slurm--网络配置指南
在Slurm集群中,有很多组件需要能够相互通信。有些站点有安全要求,不能打开机器之间的所有通信,需要有选择地打开必要的端口。本文件将介绍不同的组件需要怎样才能相互交流。
姚华
2023/02/22
2.7K0
【WRF完整案例代码】在超算上使用WRF模拟飓风马修登陆
本教程将以官网—2016年10月飓风马修登陆为例,介绍WRF-ARW在北京超算中心上的基础运行操作。
自学气象人
2023/06/21
1.6K0
【WRF完整案例代码】在超算上使用WRF模拟飓风马修登陆
作业调度算法
  在多道程序环境中,主存中有着多个进程,其数目往往多于处理机数量。这就要求系统能按照某种算法动态地把处理机分配给就绪队列中的一个进程,使之执行,分配处理机的任务是由处理机调度程序完成的。 处理机调度   在多道程序系统中,一个作业被提交后必须经过处理机调度后,方能获得处理机执行。对于批量型作业而言,通常需要经历作业调度(也称为高级调度)和进程调度(也称为低级调度)两个过程才能获得处理机;而对于终端型作业而言,通常只需要经过进程调度就可以获得处理机。除了上述两种调度,操作系统中往往也设置了中级调度,用来提
Mister24
2018/05/14
4.1K0
美国为何封杀中国超算!一文读懂超级计算机的应用、架构和软件知识
2019年5月,美国商务部将华为列入了出口管制的“实体清单”,华为被推向了这波中美对抗的风口浪尖。紧随其后,6月,特朗普政府又对其他几家中国机构实行了限制出口政策,包括中科曙光、江南计算技术研究所、成都海光等。其中,中科曙光和江南计算技术研究所均为中国超级计算机研发机构,中科曙光研发了“曙光”系列,江南计算技术研究所研发了“神威”系列。另外一个国产超算巨头“天河”相关单位早在2015年就被纳入了实体清单。至此,国产超算三巨头“天河”、“曙光”和“神威”均已被特朗普政府封杀。继“华为禁令”之后,“超算禁令”再次暴露美国欲限制中国发展的野心。那何为“超算”?本文将简述超级计算机的背景知识与发展现状。
PP鲁
2019/12/26
2.2K0
Docker 快速部署 Slurm 集群
  前段时间为了能让运行的 CONQUEST 任务在后台运行、并尽可能地进行资源调控,特别采用了 Slurm 作业管理系统。Slurm 单节点的部署配置还是比较简单的,直接运行本人构建好的镜像就可以了。随着对 Slurm 的深入了解,笔者发现 Slurm 在集群部署上比其他作业管理系统更加简单方便,因此有了在多机集群上部署一个 Slurm 集群的想法。经过调查发现以下两种通用的部署 Slurm 集群的方案:
zhonger
2022/10/28
6K2
Docker 快速部署 Slurm 集群
28 Mar 2019 关于集群作业调度系统
进入hpc行业4年多了,一直都是负责集群作业调度系统的开发,最近工作中实现了一个简单的集群作业调度系统。因此想借此机会,将我对集群作业调度系统的一些认知和见解记录下来。
俊采
2023/10/17
2660
相关推荐
【科研利器】slurm作业调度系统(二)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档