slurm深度解析:探索作业调度系统的架构和术语

04-19 1337阅读 0评论

文章目录

  • 前言
  • 一、slurm是什么?
  • 二、slurm的架构和术语
  • 三、slurm的基本使用
  • 总结

    前言

    在高性能计算领域,作业调度系统是一个非常重要的组件,它负责管理集群的资源和作业,以提高计算效率和用户体验。本文将介绍一种流行的开源作业调度系统——slurm,它具有高度可扩展和容错的特点,已被全球多个超级计算中心和大型集群采用。本文将介绍slurm的基本概念、架构和术语,以及如何使用slurm进行作业的提交和管理。

    slurm深度解析:探索作业调度系统的架构和术语 第1张
    (图片来源网络,侵删)

    一、slurm是什么?

    slurm(Simple Linux Utility for Resource Management)是一种可扩展的工作负载管理器,它可以对Linux集群的资源和作业进行有效的调度和控制。slurm是免费和开源的,遵循GPL通用公共许可证。slurm提供了一系列的用户和管理工具,以及丰富的插件机制,可以支持多种基础设施和网络拓扑。slurm的主要功能包括:

    资源管理:slurm可以对集群的节点、CPU、内存、通用资源(如GPU)等进行管理,以满足不同的作业需求和优化策略。

    作业调度:slurm可以根据作业的优先级、资源需求、时间限制、队列设置等进行作业的调度,以实现公平和高效的资源分配。

    作业执行:slurm可以通过不同的方式(如srun、sbatch、salloc等)执行作业,以支持交互式和批处理式的作业模式,以及不同的并行环境(如MPI、OpenMP等)。

    作业监控:slurm可以通过不同的工具(如squeue、sinfo、sacct等)监控作业的状态、进度、资源使用等,以方便用户和管理员进行作业的管理和控制。

    slurm深度解析:探索作业调度系统的架构和术语 第2张
    (图片来源网络,侵删)

    作业记账:slurm可以通过数据库或文件的方式记录作业的历史数据,以便进行作业的分析和统计。


    二、slurm的架构和术语

    slurm的架构主要由以下几个组件构成:

    slurmctld:slurm的中心管理器,负责监测集群的资源和作业,以及进行作业的调度和分配。为了提高可用性,还可以配置一个备份的slurmctld。

    slurmd:slurm的节点守护进程,运行在每个计算节点上,负责执行作业,以及向slurmctld汇报节点和作业的状态。

    slurmdbd:slurm的数据库守护进程,负责存储和管理作业的记账信息,以及提供查询和统计的接口。slurmdbd是可选的,也可以将记账信息存储在文件中。

    slurmrestd:slurm的REST API守护进程,提供了一种通过REST API与slurm进行交互的方式,可以实现slurm的所有功能。slurmrestd是可选的,也可以通过命令行工具与slurm进行交互。

    用户工具:slurm提供了一系列的用户工具,用于查看集群和作业的状态,提交和管理作业,以及进行其他的操作。常用的用户工具有srun、sbatch、salloc、squeue、sinfo、scancel、sacct等。

    管理工具:slurm提供了一系列的管理工具,用于监控和修改集群和作业的配置和状态,以及进行其他的管理操作。常用的管理工具有scontrol、sview、sacctmgr等。

    slurm的术语主要包括以下几个概念:

    节点(Node):slurm管理的计算单元,可以是一台物理机或一台虚拟机,具有一定数量的CPU、内存、磁盘等资源。节点可以分为以下几种类型:

    头节点(Head Node):运行slurmctld的节点,也称为管理节点或控制节点。 
    计算节点(Compute Node):运行作业的节点,也称为工作节点或执行节点,需要运行slurmd。 
    登录节点(Login Node):用户登录的节点,也称为前端节点或接入节点,可以运行slurmd,也可以不运行。 
    数据库节点(Database Node):运行slurmdbd的节点,也称为记账节点,可以是独立的节点,也可以和其他节点共用。 
    

    作业(Job):slurm管理的计算任务,由用户提交,由slurm调度和执行。一个作业可以包含一个或多个作业步(Job Step),每个作业步可以是一个或多个并行的进程。作业可以有以下几种状态:

    排队(Pending):作业已提交,但还未分配资源,等待调度。 
    运行(Running):作业已分配资源,正在执行。 
    完成(Completed):作业已正常结束,释放资源。 
    取消(Cancelled):作业被用户或管理员取消,释放资源。 
    失败(Failed):作业由于错误或超时而终止,释放资源。 
    挂起(Suspended):作业被暂停,保留资源。 
    

    队列(Partition):slurm对节点和作业进行分组管理的方式,也称为分区。每个队列可以设置一些属性,如节点列表、作业大小、作业时长、用户列表等,以实现不同的资源分配策略。作业提交时需要指定一个或多个队列,slurm会根据队列的属性和优先级进行作业的调度和分配。

    通用资源(GRES):slurm对节点上除CPU和内存外的其他资源进行管理的方式,如GPU、FPGA等。每个节点可以设置一定数量的GRES,每个作业可以请求一定数量的GRES,slurm会根据GRES的需求和可用性进行作业的调度和分配。

    可追踪资源(TRES):slurm对节点和作业的资源使用进行追踪和记账的方式,如CPU、内存、磁盘、能耗等。每个节点可以设置一定数量的TRES,每个作业可以请求一定数量的TRES,slurm会根据TRES的使用情况进行作业的记账和统计。

    服务质量(QOS):slurm对作业进行优先级管理的方式,也称为优先级。每个作业可以设置一个或多个QOS,slurm会根据QOS的属性和权重进行作业的优先级计算,以实现不同的作业调度策略。

    关联(Association):slurm对用户、账户、队列等进行关联管理的方式,也称为用户组。每个关联可以设置一些属性,如QOS、TRES限制、作业限制等,以实现不同的资源控制策略。


    三、slurm的基本使用

    slurm的基本使用主要涉及以下几个方面:

    1.查看集群和作业状态 slurm提供了一些工具,可以让用户查看集群的节点、队列、资源和作业的状态,以便选择合适的参数和时机提交作业。常用的工具有:

    sinfo:显示集群的节点和队列的状态,包括节点的名称、状态、分区、CPU数、内存、GRES等信息,以及分区的名称、状态、优先级、时间限制等信息。sinfo命令可以使用一些选项,如-N显示节点级别的信息,-l显示长格式的信息,-p指定分区,-o指定输出格式等。 
    squeue:显示集群的作业和作业步的状态,包括作业的ID、名称、用户、状态、分区、节点数、CPU数、内存、提交时间、开始时间、结束时间等信息。squeue命令可以使用一些选项,如-u指定用户,-p指定分区,-j指定作业ID,-o指定输出格式等。 
    sacct:显示集群的作业和作业步的记账信息,包括作业的ID、名称、用户、状态、分区、节点数、CPU数、内存、提交时间、开始时间、结束时间、运行时间、能耗、优先级等信息。sacct命令可以使用一些选项,如-u指定用户,-p指定分区,-j指定作业ID,-S指定开始时间,-E指定结束时间,-o指定输出格式等。 
    

    2.提交和管理作业 slurm提供了一些工具,可以让用户提交和管理作业,包括交互式作业、批处理作业和实时分配作业。常用的工具有:

    srun:提交交互式作业,即在命令行中直接执行一个或多个并行任务,需要指定一些参数,如-n指定任务数,-N指定节点数,-p指定分区,--gres指定GRES,--mem指定内存等。srun命令会在资源分配后立即执行任务,并在任务结束后返回命令行。srun命令也可以在批处理作业脚本中使用,用于启动作业步。 
    sbatch:提交批处理作业,即通过一个作业脚本来执行一个或多个并行任务,需要指定作业脚本的文件名,以及一些可选的参数,如-n指定任务数,-N指定节点数,-p指定分区,--gres指定GRES,--mem指定内存等。sbatch命令会在资源分配后在首个节点上执行作业脚本,并在作业结束后返回命令行。作业脚本中可以使用#SBATCH指令来设置一些作业参数,也可以使用srun命令来启动作业步。 
    salloc:提交实时分配作业,即通过一个命令来分配一些资源,并在资源分配后在命令行中执行一个或多个并行任务,需要指定一些参数,如-n指定任务数,-N指定节点数,-p指定分区,--gres指定GRES,--mem指定内存等。salloc命令会在资源分配后返回一个新的命令行,用户可以在这个命令行中使用srun命令来执行任务,并在任务结束后退出命令行。salloc命令适合于需要指定运行节点和其他资源限制,并有特定命令的作业。 
    scancel:取消作业或作业步,需要指定作业或作业步的ID,或者一些过滤条件,如-u指定用户,-p指定分区,-n指定节点等。scancel命令可以用于终止排队或运行中的作业或作业步,也可以用于发送任意信号到作业或作业步中的所有进程。 
    

    3.使用数组作业和依赖作业 slurm提供了一些功能,可以让用户提交和管理数组作业和依赖作业。数组作业是指一种由多个相似的子作业组成的作业,每个子作业都有一个唯一的索引号,可以用于区分不同的输入或输出。依赖作业是指一种由多个相互依赖的作业组成的作业,每个作业都有一个或多个前置条件,只有当前置条件满足时,才能开始运行。常用的功能有:

    --array=:提交数组作业,需要指定一个或多个索引号,或者一个索引范围,如--array=1-10表示提交10个子作业,索引号分别为1到10。每个子作业都可以通过环境变量SLURM_ARRAY_TASK_ID获取自己的索引号,以便进行不同的操作。数组作业可以方便地实现参数扫描或蒙特卡罗模拟等应用。 
    --dependency=:提交依赖作业,需要指定一个或多个前置条件,每个前置条件由一个状态和一个作业ID组成,用冒号分隔,如--dependency=afterok:123表示只有当作业123正常结束后,才能开始运行。状态可以是after(作业结束后),afterok(作业正常结束后),afternotok(作业异常结束后),afterany(作业任何结束后),aftercorr(作业相关结束后),singleton(同名作业结束后),expand(作业扩展后)等。依赖作业可以方便地实现工作流或管道等应用。 
    

    总结

    以上就是今天要讲的内容,本文简单介绍了slurm的基本概念、架构和术语,以及如何使用slurm进行作业的提交和管理。slurm是一种强大的作业调度系统,可以帮助用户高效地利用集群的资源和作业,实现各种复杂的计算任务。


免责声明
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明。
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所
提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何
损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在
转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并白负版权等法律责任。

手机扫描二维码访问

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,1337人围观)

还没有评论,来说两句吧...

目录[+]