我正在尝试制作一个在数十/数百个输入文件上运行 python 脚本的 slurm 文件。每个进程都是单线程的,彼此完全独立,我想通过同时运行它们来加快速度。
目前我在做
#SBATCH --nodes=1 --ntasks-per-node=1 --time=0:20:00
python3 xxx.py -i /path/input1
我想把它改成类似的东西
python3 xxx.py -i /path/*input
我应该如何更改它以便所有进程可以并行运行?
尝试以下方法
#SBATCH --nodes=1 --time=0:20:00
for i in {1..100}
do
srun -n 1 python3 xxx.py -i /path/input$i &
done
wait
这将为以名称 (1-100) 结尾的文件调用您的 python 脚本,即
/path/input1
直到 /path/input100
。此外,指定 --ntasks-per-node
作为允许的最大值(例如:CPU 数量)。
这里的想法是您可以在 sbatch 作业脚本中编写脚本。 for 循环将使用不同的参数多次调用 srun(并确保 srun 将在后台运行而不会阻塞)。
wait
最后将使脚本等待所有后台作业完成。您可以使用多种技术来实现相同的目标。
你也可以使用 job array 更优雅地做同样的事情。