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

Ayr*_*rat 7 slurm

例如,您需要运行30个srun作业,但确保每个作业都在特定节点列表的节点上运行(具有相同的性能,以便公平地比较时间).你会怎么做?

我尝试了什么:

  • srun --nodelist=machineN[0-3] <some_cmd>:同时<some_cmd>所有节点上运行(我需要的是:在列表中的一个可用节点<some_cmd>上运行)

  • srun -p partition 似乎工作,但需要一个包含精确机器N [0-3]的分区,但情况并非总是如此.

想法?

dam*_*ois 9

您可以采用相反的方向并使用以下--exclude选项sbatch:

srun --exclude=machineN[4-XX] <some_cmd>
Run Code Online (Sandbox Code Playgroud)

然后,slurm将仅考虑未在排除列表中列出的节点.如果列表很长且很复杂,则可以将其保存在文件中.

另一种选择是检查Slurm配置是否包含" 功能 "

sinfo  --format "%20N %20f"
Run Code Online (Sandbox Code Playgroud)

如果"features"列显示每个节点具有逗号分隔的功能列表(可能是CPU系列,网络连接类型等),则可以使用特定功能选择具有特定功能的节点的子集

srun --constraint=<some_feature> <some_cmd>
Run Code Online (Sandbox Code Playgroud)


小智 8

您可以使用 -w 选项。它在 slurm 版本 17.11.10 中进行了测试

例如:

srun -p partition  -w node10 hostname
Run Code Online (Sandbox Code Playgroud)