Parallel processing SLURM sbatch并行处理多个父作业,每个父作业都有多个子作业
我想在SLURM上运行一个名为Parallel processing SLURM sbatch并行处理多个父作业,每个父作业都有多个子作业,parallel-processing,process,subprocess,parent-child,slurm,Parallel Processing,Process,Subprocess,Parent Child,Slurm,我想在SLURM上运行一个名为orbits\u 01的fortran代码。我想同时运行多个作业(即在多个核上并行)。运行多个作业后,每个orbits\u 01程序将调用另一个名为optimizer的可执行文件,而optimizer将不断调用另一个名为relax.py的Python脚本。当我通过sbatch python main1.py将作业提交给SLURM时,作业甚至未能调用优化器。然而,当我在本地运行时,整个方案运行良好。本地进程状态如下所示: USER PID %CPU %ME
orbits\u 01
的fortran代码。我想同时运行多个作业(即在多个核上并行)。运行多个作业后,每个orbits\u 01
程序将调用另一个名为optimizer
的可执行文件,而optimizer
将不断调用另一个名为relax.py
的Python脚本。当我通过sbatch python main1.py
将作业提交给SLURM时,作业甚至未能调用优化器
。然而,当我在本地运行时,整个方案运行良好。本地进程状态如下所示:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
shuha 39395 0.0 0.0 161540 3064 ? S Oct22 0:19 sshd: shuha@pts/72
shuha 39396 0.0 0.0 118252 5020 pts/72 Ss Oct22 0:11 \_ -bash
shuha 32351 0.3 0.0 318648 27840 pts/72 S 02:08 0:00 \_ python3 main1.py
shuha 32968 0.0 0.0 149404 1920 pts/72 R+ 02:10 0:00 \_ ps uxf
shuha 32446 0.0 0.0 10636 1392 pts/72 S 02:08 0:00 ../orbits_01.x
shuha 32951 0.0 0.0 113472 1472 pts/72 S 02:10 0:00 \_ sh -c ./optimizer >& log
shuha 32954 0.0 0.0 1716076 1376 pts/72 S 02:10 0:00 \_ ./optimizer
shuha 32955 0.0 0.0 113472 1472 pts/72 S 02:10 0:00 \_ sh -c python relax.py > relax.out
shuha 32956 99.6 0.0 749900 101944 pts/72 R 02:10 0:02 \_ python relax.py
shuha 32410 0.0 0.0 10636 1388 pts/72 S 02:08 0:00 ../orbits_01.x
shuha 32963 0.0 0.0 113472 1472 pts/72 S 02:10 0:00 \_ sh -c ./optimizer >& log
shuha 32964 0.0 0.0 1716076 1376 pts/72 S 02:10 0:00 \_ ./optimizer
shuha 32965 0.0 0.0 113472 1472 pts/72 S 02:10 0:00 \_ sh -c python relax.py > relax.out
shuha 32966 149 0.0 760316 111992 pts/72 R 02:10 0:01 \_ python relax.py
shuha 32372 0.0 0.0 10636 1388 pts/72 S 02:08 0:00 ../orbits_01.x
shuha 32949 0.0 0.0 113472 1472 pts/72 S 02:10 0:00 \_ sh -c ./optimizer >& log
shuha 32950 0.0 0.0 1716076 1376 pts/72 S 02:10 0:00 \_ ./optimizer
shuha 32952 0.0 0.0 113472 1472 pts/72 S 02:10 0:00 \_ sh -c python relax.py > relax.out
shuha 32953 100 0.0 749892 101936 pts/72 R 02:10 0:03 \_ python relax.py
我有一个名为
main1.py
的主Python脚本,它执行for循环,以同时运行多个orbits\u 01
作业。然后主脚本将等待所有作业完成。这里有3个父轨道\u 01
作业并行运行,每个父作业都有多个子作业。繁重的计算是由python代码relax.py完成的,因此每个作业应该只能使用一个内核运行。我想知道在SLURM的一个节点上提交多个父作业并将多个子作业与所有核心上的多个子作业并行化的最佳方法是什么?我的怀疑是,您尝试在SLURM上运行的进程数超过了核心数。由于您运行的是python脚本,因此可以使用Slurm上使用的cpu数量进行多处理
import os
from multiprocessing import Pool
pool = Pool(os.cpu_count()) # or change to the number of cores to parallelize
pool.map(your_function, range(os.cpu_count()))
如何提交作业?使用提交脚本或Python软件包?作业只需提交Python脚本
main1.py
,即可提交,该脚本在每个作业中创建多个目录并调用操作系统('./orbits_01.x