Slurm 群集快速容量不足故障转移 - Amazon ParallelCluster
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

Slurm 群集快速容量不足故障转移

StartingAmazon ParallelCluster版本 3.2.0,集群在默认情况下启用快速容量不足故障转移模式运行。这样可以最大限度地缩短检测到 EC2 容量不足错误时重试排队作业所花费的时间。当您为集群配置多种实例类型时,这尤其有效。

EC2 检测到容量不足故障:

  • InsufficientInstanceCapacity

  • InsufficientHostCapacity

  • InsufficientReservedInstanceCapacity

  • MaxSpotInstanceCountExceeded

  • SpotMaxPriceTooLow:如果 Spot 请求价格,低于要求的最低竞价请求履行价格,则激活。

  • Unsupported:使用特定实例不支持的实例类型激活Amazon区域。

在快速容量不足故障切换模式下,如果在将作业分配给SlurmQueues/compute resource、Amazon ParallelCluster:

  1. 将计算资源设置为已禁用 (DOWN) 状态在预定义的时间段内。

  2. 用途POWER_DOWN_FORCE取消计算资源出现故障的节点作业并暂停出现故障的节点。它将失败的节点设置为IDLEPOWER_DOWN (!)状态,然后转到POWERING_DOWN (%).

  3. 将作业重新排队到另一个计算资源。

已禁用的计算资源的静态节点和已启动的节点不受影响。可以在这些节点上完成作业。

重复此循环,直到作业成功分配给一个或多个计算资源节点为止。有关节点状态的信息,请参阅Slurm多队列模式指南.

如果找不到运行作业的计算资源,则会将其设置为PENDING状态,直到预定义的时间段过去。在这种情况下,您可以修改预定义的时间段,如下一节所述。

容量不足超时参数

insufficient_capacity_timeout

insufficient_capacity_timeout指定计算资源保留在禁用状态的时间段(以秒为单位)down) 检测到容量不足错误时的状态。

insufficient_capacity_timeout默认情况下,启用状态。

默认insufficient_capacity_timeout是 600 秒。

如果insufficient_capacity_timeout小于或等于零,则禁用快速容量不足故障转移模式。

您可以更改insufficient_capacity_timeout值,方法是在clustermgtd配置文件位于/etc/parallelcluster/slurm_plugin/parallelcluster_clustermgtd.conf中的HeadNode.

可以在不停止计算队列的情况下随时更新参数。

例如:

  • insufficient_capacity_timeout=600:

    如果检测到容量不足错误,则将计算资源设置为 disabled (DOWN)。10 分钟后,故障节点被设置为idle~(POWER_SAVING) 状态。

  • insufficient_capacity_timeout=60:

    如果检测到容量不足错误,则计算资源处于禁用状态 (DOWN)。1 分钟后,出现故障的节点被设置为idle~状态。

  • insufficient_capacity_timeout=0:

    快速容量不足故障切换模式已禁用。计算资源未被禁用。

注意

节点因容量不足错误而出现故障与群集管理守护程序检测到节点故障之间可能会延迟长达一分钟。这是因为群集管理守护程序会检查节点容量不足故障,并将计算资源设置为down状态,这是以一分钟为间隔的。

快速容量不足故障转移模式状态

当群集处于快速容量不足故障转移模式时,您可以检查其状态和节点状态。

节点状态

当作业提交到计算资源动态节点并检测到容量不足错误时,该节点将放在down#陈述原因:

(Code:InsufficientInstanceCapacity)Failure when resuming nodes.

然后关闭节点的电源(节点位于idle~state) 设置为down~原因是:

(Code:InsufficientInstanceCapacity)Temporarily disabling node due to insufficient capacity.

作业被重新排队到队列中的其他计算资源。

计算资源静态节点和节点UP不受快速容量不足故障切换模式的影响。

请考虑以下示例中所示的节点状态。

$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 30 idle~ queue1-dy-c-1-[1-15],queue1-dy-c-2-[1-15] queue2 up infinite 30 idle~ queue2-dy-c-1-[1-15],queue2-dy-c-2-[1-15]

我们向 queue1 提交了一个需要 1 个节点的任务:

$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 1 down# queue1-dy-c-1-1 queue1* up infinite 15 idle~ queue1-dy-c-2-[1-15] queue1* up infinite 14 down~ queue1-dy-c-1-[2-15] queue2 up infinite 30 idle~ queue2-dy-c-1-[1-15],queue2-dy-c-2-[1-15]

节点queue1-dy-c-1-1已启动,以运行任务。但是,由于容量不足错误,实例无法启动。节点queue1-dy-c-1-1设置为down. 计算资源中已关闭电源的动态节点 (queue2-dy-c-1) 设置为down.

你可以使用检查节点原因scontrol show nodes.

$ scontrol show nodes queue1-dy-c-1-1 NodeName=broken-dy-c-2-1 Arch=x86_64 CoresPerSocket=1 CPUAlloc=0 CPUTot=96 CPULoad=0.00 ... ExtSensorsJoules=n/s ExtSensorsWatts=0 ExtSensorsTemp=n/s Reason=(Code:InsufficientInstanceCapacity)Failure when resuming nodes [root@2022-03-10T22:17:50] $ scontrol show nodes queue1-dy-c-1-2 NodeName=broken-dy-c-2-1 Arch=x86_64 CoresPerSocket=1 CPUAlloc=0 CPUTot=96 CPULoad=0.00 ... ExtSensorsJoules=n/s ExtSensorsWatts=0 ExtSensorsTemp=n/s Reason=(Code:InsufficientInstanceCapacity)Temporarily disabling node due to insufficient capacity [root@2022-03-10T22:17:50]

作业排队到队列计算资源中的其他实例类型。

Afterinsufficient_capacity_timeout过去,计算资源中的节点将重置为idle~状态。

$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 30 idle~ queue1-dy-c-1-[1-15],queue1-dy-c-2-[1-15] queue2 up infinite 30 idle~ queue2-dy-c-1-[1-15],queue2-dy-c-2-[1-15]

Afterinsufficient_capacity_timeout过去,计算资源中的节点被重置为idle~状态,Slurm 调度器会为节点提供较低的优先级。除非出现以下情况之一,否则调度程序会不断从权重较高的其他队列计算资源中选择节点:

  • 作业的提交要求与恢复的计算资源相匹配。

  • 没有其他计算资源可用,因为它们的容量已满。

  • slurmctld已重新启动。

  • 这些区域有:Amazon ParallelCluster计算队列已停止并开始关闭所有节点并接通电源。

相关日志

与容量不足错误和快速容量不足故障切换模式相关的日志可以在 Slurm 中找到resume日志和clustermgtd登录 head (头节点)。

Slurmresume(/var/log/parallelcluster/slurm_resume.log

节点因容量不足而无法启动时的错误消息:

[slurm_plugin.instance_manager:_launch_ec2_instances] - ERROR - Failed RunInstances request: dcd0c252-90d4-44a7-9c79-ef740f7ecd87 [slurm_plugin.instance_manager:add_instances_for_nodes] - ERROR - Encountered exception when launching instances for nodes (x1) ['queue1-dy-c-1-1']: An error occurred (InsufficientInstanceCapacity) when calling the RunInstances operation (reached max retries: 1): We currently do not have sufficient p4d.24xlarge capacity in the Availability Zone you requested (us-west-2b). Our system will be working on provisioning additional capacity. You can currently get p4d.24xlarge capacity by not specifying an Availability Zone in your request or choosing us-west-2a, us-west-2c.
Slurmclustermgtd(/var/log/parallelcluster/clustermgtd

由于容量不足,队列 1 中的计算资源 c-1 被禁用:

[slurm_plugin.clustermgtd:_reset_timeout_expired_compute_resources] - INFO - The following compute resources are in down state due to insufficient capacity: {'queue1': {'c-1': ComputeResourceFailureEvent(timestamp=datetime.datetime(2022, 4, 14, 23, 0, 4, 769380, tzinfo=datetime.timezone.utc), error_code='InsufficientInstanceCapacity')}}, compute resources are reset after insufficient capacity timeout (600 seconds) expired

容量不足超时过期后,计算资源将被重置,计算资源中的节点将设置为idle~

[root:_reset_insufficient_capacity_timeout_expired_nodes] - INFO - Reset the following compute resources because insufficient capacity timeout expired: {'queue1': ['c-1']}