由于 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 正在尝试为每个作业使用所有节点。