我必须使用不同的参数(或随机数生成器种子)对同一模型进行多次仿真。以前,我在具有许多核心的服务器上工作,在这里我将python多处理库与apply_async一起使用。这非常方便,因为我可以决定要占用的最大内核数,而仿真将排入队列。
现在,我搬到了带有pb的hpc集群的地方。从反复试验和不同的答案看来,多处理仅在一个节点内起作用。有没有一种方法可以使它在多个节点上运行,或者可以在几行中使用相同的易用性的其他任何具有相同功能的库?
为了让您了解我的代码类型:
import functions_library as L
import multiprocessing as mp
if __name__ == "__main__":
N = 100
proc = 50
pool = mp.Pool(processes = proc)
seed = 342
np.random.seed(seed)
seeds = np.random.randint(low=1,high=100000,size=N)
resul = []
for SEED in seeds:
SEED = int(SEED)
resul.append(pool.apply_async(L.some_function, args = (some_args)))
print(SEED)
results = [p.get() for p in resul]
database = pd.DataFrame(results)
database.to_csv("prova.csv")
编辑
据我了解,由于与pb自然交互,mpi4py可能会有所帮助。那是对的吗?如何使我的代码适应mpi4py?
[我发现schwimmbad
包非常方便,只需很少的更改即可在MPI集群中运行为schwimmbad
编写的代码。
希望对您有帮助!