在并行p中运行n_jobs>1的sklearn函数的简单方法

2024-05-14 09:13:27 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有一些方法可以在并行循环中运行sklearn(支持n_jobs参数)?当我尝试运行sklearn函数时,其中有n_jobs>;1多处理.池,我收到警告了

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

那么是否存在允许嵌套并行化的并行库?在


Tags: 方法函数gt警告参数paralleljobsbe
1条回答
网友
1楼 · 发布于 2024-05-14 09:13:27

此警告来自joblib,它是sklearn中使用的多处理库。 它的并行机制依赖于multiprocessing.Pool,后者使用了不能生成子进程的daemonic工作线程。在

我不认为有任何简单的方法可以通过sklearn来绕过这个限制。 您可能需要手动创建和管理流程。 如果你知道你在做什么,你可以创建你的Process并用它们来运行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]

请注意,所有进程都是同时运行的,这可能导致比顺序实现更糟糕的性能。在

也就是说,在使用嵌套并行是一个好主意的情况下,它们的用例并不多。 所有的核心都应该用于时间消耗较多的任务,其他任务按顺序运行。在

相关问题 更多 >

    热门问题