Slurm 基于内存的调度 - Amazon ParallelCluster
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Slurm 基于内存的调度

从版本 3.2.0Amazon ParallelCluster支持使用集群配置参数的 Slurm 基于内存的调度SlurmSettings/EnableMemoryBasedScheduling.

EnableMemoryBasedScheduling: true,Slurm 调度器会跟踪每个节点上每个作业所需的内存量,并使用此信息在同一个计算节点上调度多个作业。节点上的作业所需的内存量之和不能大于可用的节点内存。调度程序阻止作业使用的内存超过提交作业时请求的内存。

EnableMemoryBasedScheduling: false,作业可能会争夺共享节点上的内存并导致作业失败,并且out-of-memory事件.

警告

Slurm 对其标签使用 2 的幂表示法,例如 MB、GB 等。这些标签应分别解释为 MiB 和 GiB。

Slurm 配置和基于内存的调度

EnableMemoryBasedScheduling: true,Slurm 设置了以下 Slurm 配置参数:

注意

当设置这两个选项时,其他几个 Slurm 配置参数可能会影响 Slurm 调度程序和资源管理器的行为。有关更多信息,请参阅Slurm.

Slurm 调度程序和基于内存的调度

EnableMemoryBasedScheduling: false(默认值)

何时EnableMemoryBasedScheduling设置为 false(默认配置),Slurm 在其调度算法中不包括内存作为资源,也不会跟踪作业使用的内存。用户可以指定--mem MEM_PER_NODE选项来设置作业所需的每个节点的最小内存量。这会强制调度器选择具有RealMemory值至少为MEM_PER_NODE安排作业时。

例如,一个用户使用提交两个作业--mem=5GB. 这些作业可以在具有 8 GiB 内存的节点上同时运行,前提是它们请求的其他资源(如 CPU 或 GPU)可用。这两个作业不会安排在小于 5 GiB 的计算节点上RealMemory.

警告

禁用基于内存的调度时,Slurm 不会跟踪作业使用的内存量。在同一节点上运行的作业可能会争用内存资源,从而导致另一个作业失败。

禁用基于内存的计划时,我们建议用户不要指定--mem-per-cpu要么--mem-per-gpu选项。这些选项可能导致的行为与Slurm.

EnableMemoryBasedScheduling: true

何时EnableMemoryBasedScheduling设置为 true,Slurm 会跟踪每个作业的内存使用情况,并防止作业使用的内存超过请求的内存--mem提交选项。

使用前面的示例,用户提交了两个作业--mem=5GB. 作业无法在具有 8 GiB 内存的节点上同时运行,因为所需内存量的总和大于节点上的可用内存。

启用基于内存的计划后,--mem-per-cpu--mem-per-gpu行为与 Slurm 文档中描述的内容保持一致。例如,提交作业时使用--ntasks-per-node=2 -c 1 --mem-per-cpu=2GB. 在这种情况下,Slurm 会为每个节点分配总计 4 GiB 的作业。

警告

启用基于内存的计划时,我们建议用户将--mem提交作业时的规范。使用附带的默认 Slurm 配置Amazon ParallelCluster,如果不包括内存选项(--mem--mem-per-cpu要么--mem-per-gpu),Slurm 会将分配节点的全部内存分配给作业,即使它只请求其他资源的一部分,例如 CPU 或 GPU 也是如此。这可以有效地防止节点共享,直到作业完成,因为没有内存可供其他作业使用。这是因为 Slurm 将作业的每个节点的内存设置为DefMemPerNode提交作业时未提供内存规格时。此参数的默认值为 0,它指定对节点内存的无限制访问。

此外,如果同一队列中有多种具有不同内存量的计算资源,则提交的没有内存选项的作业可能会在不同的节点上分配不同数量的内存,具体取决于调度程序为作业提供的节点。用户可以为选项定义自定义值,例如DefMemPerNode要么DefMemPerCPU,在 Slurm 配置文件中的群集或分区级别,以防止这种行为。

SlurmRealMemory和Amazon ParallelCluster SchedulableMemory

使用随附的 Slurm 配置Amazon ParallelCluster,Slurm 解释RealMemory为每个节点可用于作业的内存量。默认情况下,从版本 3.2.0Amazon ParallelCluster套RealMemory到中列出的内存的 95%Amazon EC2 实例类型并由Amazon EC2 API 返回DescribeInstanceTypes.

禁用基于内存的调度时,Slurm 调度程序会使用RealMemory在用户使用提交作业时筛选节点--mem指定。

启用基于内存的调度时,Slurm 调度程序会解释RealMemory))))))))))))))))))))))))))))))))

默认设置可能不是所有实例类型的最佳设置:

  • 此设置可能高于节点实际可以访问的内存量。当计算节点是小型实例类型时,可能会发生这种情况。

  • 此设置可能低于节点实际可以访问的内存量。当计算节点是大型实例类型并且可能导致大量未使用的内存时,就会发生这种情况。

您可以使用SlurmQueues/ComputeResources/SchedulableMemory精调的值RealMemory配置者Amazon ParallelCluster适用于计算节点。要覆盖默认值,可以为SchedulableMemory专门用于集群配置。

要检查计算节点上实际可用的内存量,请运行/opt/slurm/sbin/slurmd -C节点上的命令。此命令返回节点的硬件配置,包括RealMemory值。有关更多信息,请参阅 slurmd -C

为确保计算节点的操作系统进程具有足够的内存,请通过设置以下项的值来限制作业的可用内存SchedulableMemory低于RealMemory返回的值slurmd -C命令。