如何解决与MPISLURM一起运行,Python代码花费的时间比单个过程要长
我有一些python代码,大约需要12个小时才能在笔记本电脑(MacOS 16GB 2133 MHz LPDDR3)上运行。该代码循环了数千次迭代,并在每个步骤进行了一些密集的处理,因此将问题与MPI处理并行化是有意义的。我可以访问Slurm群集,在该群集中,我已经使用mpicc针对他们的OpenMPI实现构建了mpi4py(用于python 2.7)。然后,我使用sbatch --exclusive mysub.sbatch
提交以下提交脚本:
#!/bin/bash
#SBATCH -p par-multi
#SBATCH -n 50
#SBATCH --mem-per-cpu=8000
#SBATCH -t 48:00:00
#SBATCH -o %j.log
#SBATCH -e %j.err
module add eb/OpenMPI/gcc/3.1.1
mpirun python ./myscript.py
应将任务拆分为50个处理器,每个处理器分配8GB内存。 我的代码如下所示:
import numpy as np
import pickle
import mpi4py
COMM = MPI.COMM_WORLD
def split(container,count):
return [container[_i::count] for _i in range(count)]
def read():
#function which reads a series of pickle files from my home directory
return data
def function1():
#some process 1
return f1
def function2():
#some process 2
return f2
def main_function(inputs):
#some process which also calls function1 and function2
f1 = function1(inputs)
f2 = function2(f1)
result = #some more processing
return result
### define global variables and read data ###
data = read()
N = 5000
#etc...
selected_variables = range(N)
if COMM.rank == 0:
splitted_jobs = split(selected_variables,COMM.size)
else:
splitted_jobs = None
scattered_jobs = COMM.scatter(splitted_jobs,root=0)
results = []
for index in scattered_jobs:
outputs = main_function(data[index])
results.append(outputs)
results = COMM.gather(results,root=0)
if COMM.rank == 0:
all_results = []
for r in results:
all_results.append(r)
f = open('result.pkl','wb')
pickle.dump(np.array(all_results),f,protocol=2)
f.close()
我可以为我的工作分配的最大运行时间是48小时,这时该工作甚至还没有完成运行。有人可以告诉我提交脚本或代码中是否有某些内容可能会导致它变得很慢?
谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。