Slurm 多处理 Python 作业

pri*_*ist 5 python multiprocessing python-2.7 slurm

我有一个 4 节点 Slurm 集群,每个节点有 6 个核心。我想提交一个利用多重处理的测试 Python 脚本(它会生成打印正在运行的节点的主机名的进程),如下所示:

def print_something():
  print gethostname()

# number of processes allowed to run on the cluster at a given time
n_procs = int(environ['SLURM_JOB_CPUS_PER_NODE']) * int(environ['SLURM_JOB_NUM_NODES'])
# tell Python how many processes can run at a time
pool = Pool(n_procs)
# spawn an arbitrary number of processes
for i in range(200):
    pool.apply_async(print_something)
pool.close()
pool.join()
Run Code Online (Sandbox Code Playgroud)

我使用 SBATCH 脚本提交此脚本,该脚本指定 Nodes=4 和 ntasks-per-node=6,但我发现 Python 脚本执行了 4*6 次。我只希望作业执行一次脚本,并允许 Slurm 在整个集群中分发进程生成。

我显然不明白这里的一些东西......?

pri*_*ist 1

好吧,我明白了。

我需要更好地理解 SBATCH 和 SRUN 之间的关系。主要来说,SBATCH 可以充当 SRUN 调用的全局作业容器。

这里最大的因素是从 Python Multiprocessing 更改为 Subprocess。这样,SBATCH可以执行一个python脚本,而该脚本又可以动态调用另一个python脚本的SRUN子进程,并适当地分配集群资源。

  • 这个解释很有帮助,但是您能否更具体一些,也许添加您最终工作的代码片段? (21认同)
  • 如果您包含解决问题中提出的问题的代码示例,那么这个答案会更有用。 (6认同)
  • 如果您确实提供一些代码摘录,那就太好了。它会帮助很多人! (2认同)