Parallel processing SLURM sbatch并行处理多个父作业,每个父作业都有多个子作业

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

我想在SLURM上运行一个名为
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