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

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

大家好哇!前面我们对slurm作业调度系统进行了一个简单的介绍【科研利器】slurm作业调度系统(一),今天我们继续对如何用slurm提交批处理任务以及使用 sinfo、squeue、scontrol命令查询作业信息进行具体的介绍。

1

查看可用资源

咱们在提交任务之前,务必先检查一下超算上可用的节点信息,比如计算资源是否充足、节点是否正在运行作业等。

在其默认的输出中,partition 表示分区名、avail 表示分区状态(up 可用,down 不可用),timelimit 表示分区可供最大运行时长,nodes 表示节点数,state 表示节点运行状态,nodelist 表示分区包含的节点列表。

其中我们需要关注的主要是 state 和 partition ,若 state 中显示 idle 表示节点处于空闲状态,可接收新的作业;显示 allocated 表示节点已经分配了一个或者多个作业且所有核心用满,在作业释放前不能再被分配作业;显示 mix 状态为使用部分核心,仍可以被分配作业;显示 drain 状态表示对应节点已经下线;显示 drng 表示已下线但仍有作业在运行。我们一般会选择将作业提交到 state=idle 所对应的分区(partition),这样可以减少排队时间。

(base) [xiazh@login ~]$ sinfo
PARTITION     AVAIL  TIMELIMIT  NODES  STATE NODELIST
CPU-Large*       up 20-00:00:0     3    mix   cnode[220,231,236]
CPU-Large*       up 20-00:00:0     5   alloc  cnode[164-169]
CPU-Small        up 15-00:00:0     2    mix   cnode[220,231]

以下是 sinfo 命令的常用参数,借助这些参数可以帮我们更准确地掌握想知道的信息。如只想查看上面 CPU-Large 分区的信息,可以用 sinfo -p CPU-Large。

--help    # 显示sinfo命令的使用帮助信息;
-d        # 查看集群中没有响应的节点;
-i <seconds>    # 每隔相应的秒数,对输出的分区节点信息进行刷新
-n <name_list>    # 显示指定节点的信息,如果指定多个节点的话用逗号隔开;
-N    # 按每个节点一行的格式来显示信息;
-p  # <partition> 显示指定分区的信息,如果指定多个分区的话用逗号隔开;
-r    # 只显示响应的节点;
-R    # 显示节点不正常工作的原因;

2

编写slurm脚本

在slurm作业调度系统下,主要支持两种作业形式:提交交互式任务和提交批处理任务。在这里我们先介绍如何编写批处理任务的脚本,交互式任务后面再介绍。slurm 脚本可以在本地编写后上传,也可以直接在超算上编辑。一个 slurm脚本可设置很多内容,比如作业要提交到的分区、运行的最大时长等。以下给出一个常用的模板:

#!/bin/bash
#SBATCH -J test                   # 作业名为 test
#SBATCH -o test.out               # 屏幕上的输出文件重定向到 test.out
#SBATCH -e test.error           # 指定作业标准错误输出文件的名称为test.error
#SBATCH -p gpu                    # 作业提交的分区为 gpu
#SBATCH --qos=debug               # 作业使用的 QoS 为 debug
#SBATCH -N 1                      # 作业申请 1 个节点
#SBATCH -n 1                         #作业申请1个进程
#SBATCH --ntasks-per-node=1       # 单节点启动的进程数为 1
#SBATCH --cpus-per-task=4         # 单任务使用的 CPU 核心数为 4
#SBATCH -t 1:00:00                # 任务运行的最长时间为 1 小时
#SBATCH --gres=gpu:1              # 单个节点使用 1 块 GPU 卡
#SBATCh -w cnode220               # 指定运行作业的节点是 cnode220,若不填写系统自动分配节点
#SBATCh -x cnode221             # 指定不使用cnode221节点运行作业 
#SBATCh –-exclusive             #指定作业独占计算节点

# 设置运行环境
module add anaconda/3-5.0.0.1     # 添加 anaconda/3-5.0.0.1 模块

# 输入要执行的命令,例如 python test.py 等
python test.py                    # 执行命令

其中,第一行是固定的,表示使用 /bin/bash 来执行脚本。实际在每个节点上分配的 CPU 数量由 --ntasks-per-node 和 --cpus-per-task 参数共同决定,等于两者乘积之和。任务最长时间的设置格式是 DD-HH:MM:SS,例如一天又15小时写作 1-15:00:00。 以上的所有 #SBATCH 属性均可以不设置,当缺少某属性时,系统将使用默认值。在这里说一句题外话,请大家在使用时估计自己任务的开销,适量申请计算资源,避免造成资源的浪费,毕竟这都是花钱买来的!

3

提交任务

将slurm脚本编写完毕并上传超算后(或直接在超算编辑),进入 slurm脚本的目录,使用如下命令完成脚本(test.slurm)的提交。

sbatch test.slurm

4‍‍

查看任务状态

作业提交完毕后,可使用 squeue 命令查看任务状态。

(base)[xiazh@login]$ squeue
  JOBID   PARTITION     NAME     USER    ST     TIME    NODES  NODELIST(REASON)
    55       cpu        test    xiazh    PD      0:00      1   (PartitionTimeLimit)
    54       cpu        test    xiazh     R      0:15      1       cnode220

其中JOBID表示任务ID 编号,PARTITION表示作业所在队列(分区),NAME表示任务名称,USER为用户,ST为作业状态,TIME 为已运行时间,NODES 表示占用节点数,NODELIST(REASON)为任务运行的节点列表或者原因说明。另外,状态列中R-Runing(正在运行),PD-PenDing(资源不足,排队中),CG-COMPLETING(作业正在完成中),CA-CANCELLED(作业被人为取消),CD-COMPLETED(作业运行完成),F-FAILED作业运行失败,NF-NODE_FAIL节点问题导致作业运行失败,PR作业被抢占,S作业被挂起,TO作业超时被杀。除此之外,使用 squeue 配合不同参数可以过滤显示的内容,以便能看到你感兴趣的结果。某些参数可以相互组合。

squeue -l: 以长列表显示更多信息。
squeue -u username: 仅显示属于用户 username 的任务。
squeue -t state: 仅显示处于 state 状态的任务。
squeue -n job_name:仅显示名称为job_name的作业
squeue -p partition :仅显示partition分区的任务。
squeue -jobs job_id :仅显示作业id为job_id的作业

顺便介绍一下如何删除任务以及查询任务的详细信息,其显示的内容可以参考squeue。

(1)删除任务(注意:用户只能删除自己的作业,不能删除别人的作业):

scancel jobid: 删除 jobid 的作业。
scancel -u username: 删除 username 的全部作业。
scancel -s state: 删除处于 state 状态的作业。
scancel -p partition :仅显示partition分区的任务。

(2)查看任务详细信息:

scontrol show partition partition_name :详细显示partition_name分区的信息
scontrol show node node_name :详细显示node_name节点信息
scontrol show job job_id :详细显示job_id作业的信息

当你已经学会了以上全部内容的时候,恭喜你!你已经基本掌握了slurm作业调度系统了。

参考资料:

[1]http://hpc.pku.edu.cn/_book/guide/slurm/sinfo.html

[2]中科大超算用户手册

文章分享自微信公众号:
自学气象人

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

作者:夏子涵
原始发表时间:2021-11-24
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

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

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

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

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

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

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

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

    “ 大家好哇!上一期我们介绍了提交批处理任务的整个流程,包括查看资源、编写脚本、提交作业、查询作业信息等内容。今天呢,我们主要就作业脚本中两个非常重要的概念 P...

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

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

    zhonger
  • slurm学习笔记(一)

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

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

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

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

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

    生信编程日常
  • ASP.NET MVC5+EF6+EasyUI 后台管理系统(85)-Quartz 作业调度用法详解二

     我们在安装了Quartz后,会在目录下生成job_scheduling_data_2_0.xsd文件,此文件是XML配置智能提示用,如图所示:有利于我们编写X...

    用户1149182
  • ASP.NET MVC5+EF6+EasyUI 后台管理系统(85)-Quartz 作业调度用法详解二

    前言 上一节我们学习了Quartz的基本用法 这一节学习通过XML配置的形式来执行任务 这一节主要认识一些属性,为下一步打基础 代码下载:链接:htt...

    用户1149182
  • 美国为何封杀中国超算!一文读懂超级计算机的应用、架构和软件知识

    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
  • Volcano火山:容器与批量计算的碰撞

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

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

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

    AI科技评论

扫码关注腾讯云开发者

领取腾讯云代金券