0

是否有一些方法可以在并行循环内运行sklearn(支持n_jobs参数)?当我尝试运行与n_jobs> 1内multiprocessing.Pool sklearn功能,我已经得到了警告在并行池中运行n_jobs> 1的sklearn函数的简单方法

UserWarning: Multiprocessing-backed parallel loops cannot be nested, setting n_jobs=1 
    for s in split_list(seeds, n_jobs)) 

所以确实存在着一些并行库,它允许嵌套并行化?

回答

0

此警告来自joblibsklearn中使用的多处理库。 它的并行机制依赖于multiprocessing.Pool,它使用daemonic工作人员无法产生子进程。

我没有看到任何简单的方法通过与sklearn通过此限制。 您可能想要手动创建和管理您的过程。 如果您知道自己在做什么,则可以创建Process并使用它们以n_jobs > 1运行sklearn函数。
这意味着很多照顾管理过程,而不是一次全部运行。 不要让它们变成daemonic也很重要。 例如:

def target(j): 
    from time import sleep 
    from sklearn.ensemble import RandomForestClassifier 
    rf = RandomForestClassifier(n_jobs=2) 
    rf.fit(np.random.random(size=(100, 100)), np.random.random(100)> .6) 
    print(j, 'done') 
pr = [mp.Process(target=target, args=(i,)) for i in range(10)];\ 
[p.start() for p in pr] 
[p.join() for p in pr] 

注意,所有的过程都同时运行,这可能导致比顺序实现最差表现。

这就是说,他们没有太多的用例,使用嵌套并行是一个好主意。 所有核心应该用于更多时间消耗的任务,其他任务依次运行。

相关问题