我必须为大约10000个对象运行一系列python脚本。在我的目录中,每一个对象都有一行参数。在我的计算机上,为了测试脚本,我只需使用一个bash文件,如:
totrow=`wc -l < catalogue.txt`
for (( i =1; i <= ${totrow}; i++ )); do
arg1=$(awk 'NR=='${i}' ' catalogue.txt)
arg2=$(awk 'NR=='${i}'' catalogue.txt)
arg3=$(awk 'NR=='${i}'' catalogue.txt)
python3 script1.py ${arg1} ${arg2} ${arg3}
done
为目录的每一行运行脚本。现在我想在一台超级计算机上运行一切(使用slurm系统)。我想做的是,它同时在20个CPU上运行20个对象(因此同时运行20行),并以这种方式运行整个目录。
有什么建议吗?谢谢
1条答案
按热度按时间qpgpyjmq1#
您可以将其设置为数组作业。将循环的内部部分放入
something.slurm
文件,并设置i
等于数组元素id($SLURM_ARRAY_TASK_ID
)在这个文件的顶部(一个.slurm文件只是一个普通的shell脚本,其作业信息编码在注解中)。然后使用sbatch array=1-$totrow something.slurm
启动工作。这将把每个python调用安排为一个单独的任务,并将它们从1到1进行编号
$totrow
. slurm将在下一个可用的cpu上运行它们中的每一个,可能同时运行所有cpu。