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


前言

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


一、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可以通过数据库或文件的方式记录作业的历史数据,以便进行作业的分析和统计。


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

总结

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>