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

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

Slurm基于内存的调度

从 3.2.0 版开始,Amazon ParallelCluster支持使用 SlurmSettings/EnableMemoryBasedScheduling集群配置参数进行Slurm基于内存的调度。

EnableMemoryBasedScheduling: true助,Slurm调度程序可以跟踪每个节点上每个作业所需的内存量。然后,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。如果为 false,则Slurm不将内存作为资源包含在其调度算法中,也不会跟踪作业使用的内存。用户可以指定--mem MEM_PER_NODE选项来设置作业所需的每个节点的最小内存量。这会强制调度程序在调度作业MEM_PER_NODE时选择RealMemory值至少为的节点。

例如,假设用户使用提交了两个任务--mem=5GB。如果请求的资源(如 CPU 或 GPU)可用,则作业可以同时在具有 8 GiB 内存的节点上运行。这两项任务不在小于 5 GiB 的计算节点上安排RealMemory

警告

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

禁用基于内存的调度时,我们建议用户不要指定--mem-per-cpu--mem-per-gpu选项。这些选项可能导致的行为与 Slurm 文档中描述的行为不同。

EnableMemoryBasedScheduling: true

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

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

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

警告

启用基于内存的调度后,我们建议用户在提交作业时包括--mem规范。使用随附Amazon ParallelCluster的默认Slurm配置,如果未包含内存选项(--mem--mem-per-cpu、或--mem-per-gpu),则将分配节点的全部内存分配给作业,即使任务仅请求其他资源的一部分,例如 CPU 或 GPU。Slurm这实际上可以防止在作业完成之前共享节点,因为其他作业没有内存可用。之所以发生这种情况,是因为在作业提交DefMemPerNode时未提供内存规格时,将作业的每个节点的内存Slurm设置为。此参数的原定设置值为 0,它指定无限制访问节点的内存。

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

SlurmRealMemory 和 Amazon ParallelClusterSchedulableMemory

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

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

启用基于内存的调度时,调Slurm度程序将解释RealMemory为计算节点上运行的作业可用的最大内存量。

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

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

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

您可以使用 SlurmQueues/ComputeResources/SchedulableMemory微调计算节点RealMemory配置Amazon ParallelCluster的值。要覆盖默认值,请SchedulableMemory专门为您的集群配置定义一个自定义值。

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

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