使用Dask和机器学习模型的嵌套流程

问题描述

我有一个包含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)的管道。

然后如何运作? 我应该如何并行化此代码? 我不清楚如何使它工作,特别是如果我使用sklearngridsearchcv之类的ColumnTransformer估计量,而使用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

任何帮助您解决该问题的帮助将不胜感激。 谢谢

解决方法

看看Dask ML,它满足了您的许多需求。