介绍群集计划程序概念

已完成

完成本单元后,你应该能够介绍作业计划程序、资源管理器、高性能计算和高吞吐量计算的基本功能。

作业计划程序

群集计算作业计划程序是一种软件组件,用于管理计算资源(例如 CPU、内存和磁盘)并将这些资源分配给提交到群集的作业。 作业计划程序根据资源可用性、作业优先级和其他因素确定群集中最适合用于运行特定作业的节点。 作业计划程序可确保并行运行的多个作业不会相互干扰。 作业计划程序包括用于保存挂起作业的队列和用于计划这些作业的策略。

作业计划程序的主要目标是:

  • 尽量缩短作业提交和作业完成之间的时间。
  • 优化 CPU 利用率。
  • 最大化作业吞吐量。

用户向计划程序提交非交互式批处理作业。 计划程序存储批处理作业、评估其资源要求和优先级,并将作业分发到合适的计算节点。

通过计划程序提交的作业脚本会将作业添加到作业队列。 根据作业所需的可用资源,计划程序决定作业何时离开队列,以及在哪个后端节点上运行。

计划程序可以使用多种基本策略来确定接下来要运行的作业:

  • 先到先得:作业的运行顺序与其首次进入队列的顺序相同。 优点是每个作业肯定都会运行;但是,会有少量作业的等待时间要比实际执行时间长得多。

  • 最短作业优先:计划程序根据作业脚本中声明的执行时间来估计作业执行时间。 作业按执行时间升序排列。 虽然短作业将在短暂的等待时间后启动,但长时间运行的作业(或至少是被声明为这样的作业),可能永远不会真正启动。

  • 回填:计划程序坚持“先到先得”的原则,但不会阻止执行长时间运行的作业。 仅当可以执行队列中的第一个作业时,计划程序才会运行作业。 否则,计划程序会浏览队列的其余部分,以检查是否可以执行另一个作业,同时又不会延长队列中第一个作业的等待时间。 如果能找到此类作业,计划程序将运行该作业。 小型作业通常对应较短的队列时间。

资源管理器

群集计算资源管理器在计算群集中分配资源。 资源管理器负责将内存、CPU、存储和网络带宽分配给群集中运行的作业。 此组件监视群集内资源的使用情况,检测任何空闲或未充分利用的资源,并将资源重新分配给需要这些资源的其他作业或任务。

Slurm 概述

Slurm 是一种开源作业计划程序和资源管理器,用于在 Linux 群集上运行工作负载。 Slurm 提供了一个可扩展的框架,用于在 Linux 群集环境中管理资源并计划作业。 它支持各种作业类型,包括并行作业、批处理作业和交互式作业。 Slurm 允许用户通过各种接口(包括命令行接口、基于 Web 的接口和 API)提交作业。 Slurm 是一种由许多功能极为强大的超级计算机和计算群集使用的常用解决方案,在 Microsoft Azure 上使用高性能计算 (HPC) 时,它可作为选项提供。

通过 Slurm,可根据资源条件(包括 CPU、GPU 和内存)匹配适当的计算资源。

Slurm 作业计划程序具有以下重要功能:

  • 将 HPC 群集中计算节点的访问权限分配给用户,以便他们执行自己的任务
  • 提供一个框架,用于对一组已分配的节点执行启动、执行和监视工作
  • 通过管理挂起的作业队列来仲裁资源争用

Slurm 作业

使用 Slurm 在 Linux HPC 群集上运行作业时,需执行以下几大步骤:

  1. 作业提交:第一步是用户通过创建包含资源要求和作业所需的命令集的作业脚本,将作业提交到 Slurm 计划程序。
  2. 作业分配:在下一阶段,Slurm 计划程序需检查作业的资源要求,例如所需的节点数、CPU 和内存,以及分区和时间限制等任何其他约束。 基于这些要求,计划程序需确定要为作业分配的最佳可用资源,同时考虑到当前群集使用情况和其他挂起的作业。
  3. 作业队列:计划程序确定请求的资源是否可用。 如果资源立即可用,则执行作业。 如果请求的资源无法立即使用,则会将作业放入队列中。 计划程序会持续评估已排队的作业及其优先级,以便在资源可用时进行分配。
  4. 作业执行:将所需的资源分配给作业后,Slurm 作业开始在分配的节点上执行。 脚本中指定的任务在节点上运行。
  5. 作业完成:最后一步是完成作业。在该过程中,会将计算资源释放回群集,并且计划程序会将作业的状态更新为“已完成”。 作业输出以及作业执行期间生成的所有错误消息都将保存到指定的输出文件中。
  6. 作业计帐和报告:Slurm 生成有关已完成作业的计帐数据,包括资源使用情况和执行时间。

Slurm 命令

使用一组命令行实用工具对通过 Slurm 管理的计算群集执行各种操作。 下面是一些常见的 Slurm 用户命令:

命令 函数
sacct 此命令用于报告有关活动作业或已完成作业的作业和作业步骤计帐信息。
salloc 使用此命令可以实时为作业分配资源。 允许生成 shell 并执行 srun 命令,以此作为启动并行任务的一种方式。
sattach 此命令会将标准输入、输出和错误信号功能附加到当前正在运行的作业或作业步骤。
sbatch 使用此命令提交作业脚本以供稍后执行。 这些脚本通常包含一个或多个用于启动并行任务的 srun 命令。
scancel 使用此命令在所需的节点上传输文件。
scontrol 这是用于查看和修改 Slurm 状态的 Slurm 管理工具。 大多数 scontrol 命令都需要根权限。
sinfo 此命令显示有关 Slurm 管理的分区和节点的信息。
sprio 使用此命令查看有关影响作业优先级的组件的信息。
squeue 使用此命令查看作业或作业步骤的状态。
srun 使用此命令提交作业以供执行或实时触发作业步骤。 可以使用 srun 指定资源要求,例如最小和最大节点计数、处理器计数和节点特征。
sstat 使用此命令查看有关通过运行作业或作业步骤使用的资源的信息。
strigger 使用此命令配置或查看事件触发器,例如当节点出现故障或作业接近时间限制时要执行的操作。
sview 使用此命令查看有关 Slurm 管理的作业、分区和节点的状态信息。

可以参阅 Slurm 快速入门用户指南,了解有关 Slurm 命令的更多信息。