slurm:如何从目录中并行地为不同的$arg运行相同的python脚本

noj0wjuj  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(522)

我必须为大约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行),并以这种方式运行整个目录。
有什么建议吗?谢谢

qpgpyjmq

qpgpyjmq1#

您可以将其设置为数组作业。将循环的内部部分放入 something.slurm 文件,并设置 i 等于数组元素id( $SLURM_ARRAY_TASK_ID )在这个文件的顶部(一个.slurm文件只是一个普通的shell脚本,其作业信息编码在注解中)。然后使用 sbatch array=1-$totrow something.slurm 启动工作。
这将把每个python调用安排为一个单独的任务,并将它们从1到1进行编号 $totrow . slurm将在下一个可用的cpu上运行它们中的每一个,可能同时运行所有cpu。

相关问题