Joblib和内存绑定并行化

时间:2015-04-18 14:39:50

标签: python memory parallel-processing

在Python中,joblib为执行令人尴尬的并行执行提供了一个非常好的工具。我有点新手,我正在试图弄清楚如何处理可能受内存限制的工作。

例如,请考虑以下事项:

from joblib import Parallel, delayed
import numpy as np

num_workers=8
num_jobs=100
memory_range=1000

def my_function(x):
    np.random.seed(x)
    array_length=(np.random.randint(memory_range)+1)**3
    big_list_of_numbers=np.random.uniform(array_length)
    return(np.sum(big_list_of_numbers))

results=Parallel(n_jobs=num_workers)(delayed(my_function)(i) for i in range(num_jobs))

每个作业的内存使用量可能从几百字节到大约0.8 GB不等。

在一个完美的世界中,我想给joblib一些总内存预算(比如“我希望99%确定我所有工作人员的总内存使用量是<8GB”),有joblib估计的分布到目前为止已经看到的作业的内存使用情况,并使用它来动态调整工作池的大小。

不幸的是,似乎(?)调用Parallel()时,静态确定活动worker的数量。如果是这种情况,我可以使用resource.getrusage()来计算几个示例作业的内存使用情况,自己估算分布,并使用固定上限。如果内存使用率变化很大,那么这将是危险的或低效的。

如果我正在并行化一个特定的函数,我只想对它进行分析并完成。但是,对于我的申请,我不会事先知道这个功能。

我不想重新发明这个轮子。所以,我的问题是:

  1. joblib是否支持此功能的任何部分?

  2. 是否有其他(希望是简单的)工具?

0 个答案:

没有答案