【发布时间】:2021-09-04 11:08:41
【问题描述】:
问题
我有数百个文件,对于每个文件,我想运行一个具有固定数量核心的作业(比如说-c4),这样任何时候都不会有超过一个这些作业在任何节点上运行。
(如果您感兴趣,原因是:复杂的作业设置超出了我的控制。每个作业都会在硬编码端口上启动一堆服务器。如果在一个节点上同时运行,这些会发生冲突:-/(是的,不要告诉我,我知道。))
MVCE
我已经尝试过-N1、-n1、--ntasks-per-node=1 和内部srun 与--exclusive 的各种组合,但遗憾的是没有成功:
sbatch -N1 -n1 -c4 --ntasks-per-node=1 --array=1-128 --wrap \
'echo "$(hostname) $(date) $(sleep 15) $(date)"'
或
sbatch -N1 -n1 -c4 --ntasks-per-node=1 --array=1-128 --wrap \
'srun --exclusive -n1 -c4 --ntasks-per-node=1 -- \
bash -c '\''echo "$(hostname) $(date) $(sleep 15) $(date)"'\'
但是,如果您查看输出 (cat slurm-*.out),您将在所有情况下快速发现重叠运行:-/
问题
有没有办法限制一个数组作业在任何节点上永远不会同时运行超过 1 个作业?
我们的集群非常异构。每个节点中的 CPU(范围从 32 到 256),所以简单的解决方法(例如要求足够高的-c 以便没有 2 可以在节点上运行)会导致非常长的等待时间和低利用率。
任何想法/指针? 有没有办法为每个作业保留某个端口?
【问题讨论】: