如何限制 SLURM 已知的资源?

How to limit resources known to SLURM?

假设我有一个包含 1 个节点和 36 个 CPU 内核的集群,但我希望 SLURM 仅管理和分配其中的 20 个内核。有没有办法配置 SLURM,使其 'world' 仅包含总数 CPU 的这个子集?

请注意,这不同于对特定作业设置限制。我想要一种情况,在上面的示例中,如果 job1 请求 20 个 cpu,而 job2 请求 5 个,SLURM 在分配 job2 之前等待 job1 完成(而不是立即启动 job2,因为总共有 36 个 cpus)。

经过一番折腾,这似乎奏效了。在这里发帖以防其他人有同样的问题。

很高兴知道这种方法是否有任何缺点。

我编辑了 slrum.conf 为我的节点指定了一个较低的 CPU 计数,并相应地调整了 Sockets : CoresPerSocket : ThreadsPerCore。

NodeName=myNode CPUs=20 RealMemory=450000 Sockets=2 CoresPerSocket=5 ThreadsPerCore=2 State=UNKNOWN

使用 Slurm 实现此目的的典型方法是 core specialisation

slurm.conf 中的节点描述中,您设置 CoreSpecCount 选项并写入

NodeName=myNode CPUs=36 RealMemory=450000 CoreSpecCount=16 State=UNKNOWN

有一个等效的内存选项:MemSpecLimit