在 Slurm/Sbatch 中同时对多个输入文件运行相同的 python 脚本

问题描述 投票:0回答:2

我正在尝试制作一个在数十/数百个输入文件上运行 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

我应该如何更改它以便所有进程可以并行运行?

parallel-processing slurm
2个回答
0
投票

有几种方法可以实现这一点。就个人而言,我使用 Hydra 来参数化我的 python 文件中的任何内容。然后对于并行任务,我使用 Joblib 插件。

这里是最小的。您可以直接从配置文件管理 CPU 和 GPU 的数量、环境变量。


0
投票

尝试以下方法

#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 更优雅地做同样的事情。

© www.soinside.com 2019 - 2024. All rights reserved.