Slurm多处理Python作业

时间:2015-09-15 20:08:25

标签: python python-2.7 multiprocessing 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()

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

我显然不明白这里有什么......?

1 个答案:

答案 0 :(得分:0)

好的,我明白了。

我需要更好地了解SBATCH和SRUN之间的关系。主要是,SBATCH可以作为SRUN调用的全局工作容器。

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