Slurm,限制每个分区的作业数量

Slurm,限制每个分区的作业数量

我正在配置 Slurm 调度程序,我需要限制分区(队列)上同时运行的最大作业数量。

我阅读了大量有关会计和资源的信息,但都与用户限制有关,我也阅读了有关创建关联的信息,但我不确定是否有必要。

我需要限制每个分区(队列)的作业数量,因为我有属于同一分区的计算节点。

即我有 2 个分区,短分区和长分区,它们具有相同的计算节点,但时间限制和优先级不同。如果所有用户都使用长分区启动长作业,他们可能会阻塞集群。因此,我想限制长分区运行的最大作业数量。

提前致谢。

答案1

现在我已经看到了你的编辑,这实际上应该通过优先级和节点共享来实现,而不是作业限制。
参见两者多因素优先抢占如果不实施会计。

抢占配置起来简单得多,使用 PreemptType=preempt/partition_prio 并为短作业队列设置更高的优先级。
您必须在 slurm.conf 中设置 PreemptMode=SUSPEND,GANG,并在默认队列/每个配置优先级的队列上设置 Shared=FORCE。

它运行得很好,但可能会导致长时间作业的饥饿。

多因素更公平,但您必须进行试验才能找到适合您的方法。您可能希望设置 PriorityWeightPartition,因为没有与作业挂钟时间相关的直接因素。

否则 - 安装会计,并对长期工作收取更多费用。

答案2

由于我暂时无法发表评论,因此我将其作为答案发布。
您能分享一下您的理由吗?slurm 作为资源管理器非常出色 - 它不会允许使用超过可用资源的数量,除非您允许超额认购。为什么您要在此基础上施加人为限制?

无论如何,如果您使用回填,您可能会使用简单的 bf_max_job_part=# 或更通用的 partion_job_depth=#

请参阅 man slurm.conf 中的这些选项

答案3

实现此目的的最佳方法是使用 QoS。对于每个 QoS,您可以为该 QoS 的 CPU 数量或最大挂机时间等设置不同的限制。在限制方面,QoS 比分区更灵活。

因此,我的建议是您只使用一个具有 2 个 QoS 的分区,并在 QoS 级别设置限制。

相关内容