slurm作业调度系统

编写Slurm脚本
#!/bin/bash
#SBATCH -J test              # 作业名是 test
#SBATCH -p cpu               # 提交到 cpu 分区
#SBATCH -N 1                 # 使用一个节点
#SBATCH --cpus-per-task=1    # 每个进程占用一个 cpu 核心
#SBATCH -t 5:00              # 任务最大运行时间是 5 分钟
#SBATCH -o test.out          # 将屏幕的输出结果保存到当前文件夹的 test.out

./hello                      # 执行我的 ./hello 程序

这段脚本告诉工作站运行任务的详细设定:它被提交到 cpu 分区当中,申请 1 个节点的 1 个 核心,限制任务最大运行时间是五分钟,将标准输出和标准错误放在 test.out 中。
主题内容为执行当前目录下的hello程序。

分区(Partition)

分区可以看作是一系列节点的集合。不同的节点的特性和硬件属性不同,设置分区可以帮助用户更好确定节点的特点,从而可以选择合适的节点进行运算。

QoS (Quality of Service)

QoS表示服务质量,它更多刻画了作业的属性,而不是节点的属性。不同任务特性不同,制定QoS可以使得资源更好分配。

提交/取消任务

提交任务之前,可以使用sinfo查看可用资源情况。
state中的idle表示空闲状态,任务可以提交。
使用sbatch和scancel命令进行任务的提交和取消。

sbatch run.slurm
scancel JOBID
任务追踪

squeue命令来查看所有已经提交和正在运行的作业。
Slurm 提供了丰富的追踪任务命令。例如scontrol, sacct。
对于正在运行或者排队的任务,可以使用

scontrol show job JOBID

作业完成后,需要使用sacct命令查看历史作业。默认情况下,用户只能查看属于自己的历史作业。直接使用sacct命令会输出从当天 00:00:00 起到现在的全部作业。
如果使用了

sacct -s MMDD

则会输出从MM月DD日起的所有历史作业。默认情况下会输出作业ID,作业名,分区,账户,分配的CPU,任务结束状态,返回码(ExitCode)。

更新任务

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

scontrol update jobid=JOBID ...

可以修改的属性很多,在输入完 JOBID 后空一格并敲两下 键。

[liuhy@admin ~]$ scontrol update jobid=938 <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 命令延长任务最大时间。但是可以 根据需求减少任务的最大时间。若确实有延长任务时间的急切需求请联系管理员。

PBS作业调度系统于SLURM调度系统比较。
对比

配置服务器运行环境

查看当前所载入的所有module,可以使用下面的命令:

module list

想要查看服务器中所有可用的module,可以使用如下的命令。

module avail

执行完毕后,可以从系统所有module中选出需要的环境进行添加。添加某些软件时需要制定版本。例如

module add gcc/4.8.5

如果不写版本号,则服务器会添加后面标注有(default)的项。
要把某个模块从系统环境中删掉,则需要使用

module remove < module name >

如果要删除全部的模块,可以直接使用

module purge

有的时候,模块之间会有所冲突,你无法在同一时间同时加载两个模块。例如同一软件的不同版本,或者是接口相同的不同软件。当你载入其中一个后,再载入另一个就会出错。

slurm脚本中使用module

module 命令仅作用在当前节点上,如果使用 SLURM 脚本提交任务,那么实际运行任务的 节点和当前节点是不同的,因此方便的做法是将 module 命令一并写在 SLURM 脚本中。

#!/bin/bash
#SBATCH -J test
#SBATCH -p cpu
#SBATCH -t 5:00

module add gcc/4.8.5
module add anaconda/3

# do your computation jobs...

参考

http://bicmr.pku.edu.cn/~wenzw/pages/slurm.html

  • 3
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值