实际上,我发现了一个与我非常相似的问题。唯一的区别是我的小集群中节点的CPU数量不同。 (类似的问题是这里)
例如我的集群中的节点是:
我有 2 个分区:cpu(所有节点)和 gpu(node3,4)。
如何在node3和node4中保留4个CPU用于GPU分区?换句话说,如何配置让cpu分区包含node1和node2的所有CPU,node3的20个CPU和node4的12个CPU?
(参数MaxCPUsPerNode不符合我的需求。)
谢谢!
使用消耗性可跟踪资源插件(https://slurm.schedmd.com/cons_res.html)而不是默认的节点分配插件,您可以将
DefCpuPerGPU
设置为4(请参阅有关设置此变量和启用的详细信息) cons_tres
在您的 slurm.conf
文档中:https://slurm.schedmd.com/cons_res.html#using_cons_tres)
我找到了一个解决方案,虽然有点笨拙,但确实完成了工作。我有一个集群,其中的节点具有不同数量的 CPU。我需要一个分区,它可以使用大多数节点的所有 CPU,但只能使用另一个节点的 CPU 子集。据我所知,这个具体的描述是不可能用 Slurm 来完成的。
但是,如果我创建两个分区:
Nodes=n1,n2,n3,n4
Nodes=n5 MaxCPUsPerNode=15
然后使用
--partition=mostnodes,limitednode
提交作业,调度程序会将作业调度到第一个能够运行作业的分区上。用手册页的话来说:
如果作业可以使用多个分区,请在一个分区中指定它们的名称 逗号分隔列表,提供最早启动的列表将是 使用时不考虑分区名称顺序(尽管 将首先考虑优先级较高的分区)。当工作是 启动时,所使用的分区的名称将首先放置在 作业记录分区字符串。
这不是一个完美的解决方案,但据我所知,这是目前可用的最佳解决方案。