![Slurm,限制每个分区的作业数量](https://linux22.com/image/637041/Slurm%EF%BC%8C%E9%99%90%E5%88%B6%E6%AF%8F%E4%B8%AA%E5%88%86%E5%8C%BA%E7%9A%84%E4%BD%9C%E4%B8%9A%E6%95%B0%E9%87%8F.png)
我正在配置 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 级别设置限制。