SLURM:如何仅在特定节点上运行30个作业?

19
您需要运行30个srun作业,但要确保每个作业在特定节点列表中的一个节点上运行(这些节点具有相同的性能,以便公平比较时间)。 你该怎么做?
我尝试过:
- srun --nodelist=machineN[0-3] <some_cmd> :同时在所有节点上运行<some_cmd>(我需要在可用节点列表中的一个节点上运行<some_cmd>) - srun -p partition 似乎可行,但需要包含恰好machineN[0-3]的分区,而这并不总是情况。
有什么想法吗?
2个回答

24
更新:版本23.02已修复此问题,详见发布说明:允许--nodelist包含比--nodes所需的节点更多。
你可以选择相反的方向,并使用sbatch--exclude选项:
srun --exclude=machineN[4-XX] <some_cmd>

然后slurm只会考虑不在排除列表中的节点。如果列表很长且复杂,可以将其保存在文件中。
另一个选项是检查Slurm配置是否包含具有“特性”的内容。
sinfo  --format "%20N %20f"

如果“features”列显示了每个节点具有的逗号分隔的功能列表(可能是CPU系列、网络连接类型等),您可以使用特定功能选择节点的子集。
srun --constraint=<some_feature> <some_cmd>

9
您可以使用-w选项。它在Slurm版本17.11.10中进行了测试。
例如:
srun -p partition  -w node10 hostname

使用您的方法,是否可以指定一个节点列表?(而不是一个特定的节点) - Ayrat
是的,srun -p partition -w node10,node11 hostname 命令会返回这两个计算节点的主机名。您也可以使用正则表达式“-w node[10-11]”。 - Fırat Yilmaz
...但我不需要在_两个_节点上运行它,只需要从列表中选择一个节点运行即可。??谢谢。(不幸的是,我现在无法测试它,因为无法访问srun) - Ayrat
如果您知道要在哪个计算节点上运行作业的$hostname,则srun -p partition -w $hostname命令就足够了。如果您必须定义一个nodelist,例如srun -p partition --nodelist /path/to/nodelist,并且想从该nodelist中选择1个节点,那对我来说似乎是一种不方便的方式,我从未尝试过是否存在任何机制。实际上,当您选择分区时,您正在使用在该分区中定义的nodelist。然后,-w让您选择要使用的一个或多个计算节点。 - Fırat Yilmaz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接