比方说,我想提交一个slurm作业,只是分配总的任务量(--ntasks=someNumber),而不指定节点数量和每个节点的任务。有没有办法在启动的slurm脚本中知道slurm为每个保留的节点分配了多少个核心?我需要知道这些信息,以便为我要启动的程序正确地创建一个machinefile,它必须是这样的结构。
node02:7 node06:14 node09:3
一旦工作启动,我想出的唯一方法就是使用命令来查看节点上分配了哪些核心:
scontrol show jobid -dd
在它的输出中存储了上述信息(以及大量的其他细节).是否有更好的方法来获得这些信息?
先谢谢你,Lorenzo
的方式。srun
文档中说明了创建机器文件的方法是运行 srun hostname
. 要得到你想要的输出,你可以运行
srun hostname -s | sort | uniq -c | awk '{print $2":"$1}' > $MACHINEFILE
你应该检查你的程序文档,看看它是否接受一个有重复而不是后缀数的机器文件。如果是,你可以将命令简化为
srun hostname -s > $MACHINEFILE
当然,第一步其实是先确定你确实需要一个机器文件,因为很多并行程序库都支持Slurm,可以从Slurm在作业启动时设置的环境变量中收集所需信息。