【问题标题】:Nested processes with Dask and Machine learning models使用 Dask 和机器学习模型的嵌套流程
【发布时间】:2020-10-04 14:50:26
【问题描述】:

我有一个包含 100000 个样本的数据集。

我需要将此数据集拆分为 100 个子集,并为每个子集训练一个 ML 模型。 由于训练的模型是独立的,因此很容易将这部分并行化,例如

from dask import compute, delayed
from sklearn.linear_model import Lasso

X, y = load_data()
n_windows = 100
model = Lasso()

results = []
for i in range(0, len(X), n_windows):
    results.append(delayed(model.fit)(X, y))
    
results = compute(results)

但是假设模型本身需要产生进程,例如,如果模型是一个包含交叉验证的管道,例如 GridSearchCVHyperBandSearchCV

那么它是如何工作的呢? 我应该如何并行化这段代码? 我不清楚如何使它工作,特别是如果我使用 sklearn 估计器,例如 GridSearchCVColumnTransformer,它们使用 joblib 而不是 dask 来并行化计算。

实际上,取决于我是否使用Client 或不这样:

from dask.distributed import Client
client = Client()

根据这个实例化的client 是在主脚本中创建还是从其他模块导入,我会收到警告或错误。

在第一种情况下,代码已成功执行,但我收到一条警告:

Multiprocessing-backed parallel loops cannot be nested, setting n_jobs=1

在第二种情况下,代码永远不会完成,解释器堆栈和我得到这个错误:

daemonic processes are not allowed to have children

任何帮助如何解决这个问题将不胜感激。 谢谢

【问题讨论】:

    标签: python multiprocessing dask dask-distributed dask-ml


    【解决方案1】:

    看看Dask ML,它有很多你需要的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-27
      • 1970-01-01
      • 2022-12-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多