1

由于 Matlab 将如何利用计算集群上的资源的限制,我想创建几个作业,每个作业都使用给定节点上的所有内核。我可以将 --array 选项与其他参数结合使用,以确保我在单独的节点上获得每个作业。但是,由于某种原因,我们集群上的 slurm 计划将我的作业放在已经在使用的节点上,即使我正在尝试使用 -c 选项最大化给定节点上的核心:

#SBATCH --array=1-2
#SBATCH -t 24:00:00
#SBATCH -n 1
#SBATCH -c 20
#SBATCH -N 1
#SBATCH --exclusive
#SBATCH --mem-per-cpu 4000

module add ~/matlab/2014a

srun matlab -nodisplay -r "myfun($SLURM_ARRAY_TASK_ID);quit"

使用 --exclusive 选项似乎并没有改变任何东西。我在单个任务上也遇到了同样的问题,我的解决方法是检查哪些节点未在使用中,并使用 --nodelist 选项专门请求这些节点。有没有办法将 --array 与 --nodelist 结合使用,以便列表中的每个作业和节点都以一一对应的方式匹配?现在 SLURM 正在尝试为每个作业使用所有节点。

4

1 回答 1

1

三种可能:

  1. 要么节点有幽灵作业在 Slurm 的控制之外运行,要么是因为以前的作业终止不当,要么是因为其他用户不公平地使用集群。由于 Slurm 在分配节点之前不会检查节点的负载,因此您可能会遇到您所描述的情况。

  2. 或者,可以将Shared参数slurm.conf设置为Force' to deny you the use of--exclusive 并且可以启用超线程,导致 Slurm 认为它每个节点有 40 个 CPU

  3. 或者,Shared参数 ofslurm.conf可以设置为其他值,Exclusive而不是节点位于两个不同的分区中,这种配置会导致节点超额订阅。

使用该scontrol show config命令获取有关配置的更多信息。

于 2014-09-07T21:35:36.437 回答