学习
实践
活动
专区
工具
TVP
写文章
专栏首页自学气象人【科研利器】slurm作业调度系统(三)

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

大家好哇!上一期我们介绍了提交批处理任务的整个流程,包括查看资源、编写脚本、提交作业、查询作业信息等内容。今天呢,我们主要就作业脚本中两个非常重要的概念 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 日起的所有历史作业。

$ sacct -S MMDD

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

[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 键。

[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 块卡,可以输入

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 删除。
登录 后参与评论
0 条评论

相关文章

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

    “ 大家好哇!上一期我们介绍了作业脚本中两个非常重要的概念Partition 和 QoS 进行介绍,并给出一些实用技巧。今天呢,我们给出一些在slurm作业系...

    自学气象人
  • 【科研利器】slurm作业调度系统(五)

    “ 大家好哇!上一期我们给出了一些在slurm作业系统中常见的报错提示的含义及解决方法。今天我们主要来看看如何在超算中配置运行环境。”

    自学气象人
  • 【科研利器】slurm作业调度系统(一)

    大家好哇!随着时代的不断发展,我们在做项目时所使用的数据也越来越大。当进行计算量很大的任务时,我们不可避免地会使用超级计算机(以下简称超算)来帮助我们完成。常见...

    自学气象人
  • 【科研利器】slurm作业调度系统(二)

    “ 大家好哇!前面我们对slurm作业调度系统进行了一个简单的介绍【科研利器】slurm作业调度系统(一),今天我们继续对如何用slurm提交批处理任务以及使用...

    自学气象人
  • CONQUEST 编译安装指南 Slurm 篇

      在实际的生产环境中,使用单用户模式直接运行命令的机会不是很多,通常是采用提交作业任务给集群计算的方式。这样一来既能节约资源和时间,又能申请到更大规模的计算资...

    zhonger
  • slurm学习笔记(一)

    中文文档:https://docs.slurm.cn/users/shou-ce-ye

    种花家的奋斗兔
  • Slurm学习笔记(二)

    scontrol show partition显示全部队列信息,scontrol show partition PartitionName或 scontrol ...

    种花家的奋斗兔
  • Slurm集群资源管理器的简单使用

    Slurm是一个开源,容错,高度可扩展的集群管理和作业调度系统,适用于大型和小型Linux集群。主要有三个功能:

    生信编程日常
  • 美国为何封杀中国超算!一文读懂超级计算机的应用、架构和软件知识

    2019年5月,美国商务部将华为列入了出口管制的“实体清单”,华为被推向了这波中美对抗的风口浪尖。紧随其后,6月,特朗普政府又对其他几家中国机构实行了限制出口政...

    PP鲁
  • SLURM使用教程

    我现在经常在实验室服务器上跑程序,而老师要求我们使用SLURM作业管理系统,网上资料零零散散,这篇文章算是一个简单的汇总

    mathor
  • 服务器集群任务调度系统大比拼!

    普通刀片节点配备 两颗 Intel(R) Xeon(R) CPU E5-2692 v2 @ 2.20GHz 共24物理核,内存为64G 调度系统为 Slurm...

    生信技能树
  • Docker 快速部署 Slurm 集群

      前段时间为了能让运行的 CONQUEST 任务在后台运行、并尽可能地进行资源调控,特别采用了 Slurm 作业管理系统。Slurm 单节点的部署配置还是比较...

    zhonger
  • 专栏 | 百度深度学习平台PaddlePaddle框架解析

    机器之心专栏 来源:百度PaddlePaddle PaddlePaddle 是 2016 年 8 月底百度开源的深度学习平台,并且在短时间内迅速引发全球开发热度...

    机器之心
  • 善用alias,让Linux运维命令更有效率

    第一行scancel为一些超算杀任务的命令,但是打字太麻烦,所以直接给个qd的别名;

    不念博客
  • 西南交通大学铁路运输组织与优化郭孜政教授团队招募科研助理(长期招聘)

    西南交通大学 铁路运输组织与优化 郭孜政教授团队 招募科研助理(长期招聘) ✦✦ 郭孜政教授 西南交通大学交通运输与物流学院教授、博导,团队负责人。具有轨...

    用户1621951
  • 动态 | MSRA联合四大高校,共建新一代AI开放科研教育平台

    微软亚洲研究院联手北京大学、中国科学技术大学、西安交通大学和浙江大学四所国内顶级院校,共建新一代人工智能开放科研教育平台,成立仪式于5月22日在MSRA举行。

    AI科技评论
  • Volcano火山:容器与批量计算的碰撞

    Kubernetes 是当前非常流行的容器编排框架,在其发展早期重点以微服务类应用为主。

    CNCF
  • JuiceFS 在多云存储架构中的应用| 深势科技分享

    2020 年末,谷歌旗下 DeepMind 研发的 AI 程序 AlphaFold2 在国际蛋白质结构预测竞赛上取得惊人的准确度,使得“ AI 预测蛋白质结构”...

    Juicedata

扫码关注腾讯云开发者

领取腾讯云代金券