问题描述
我需要将此数据集分为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)
但是要说模型本身需要产生流程,例如,如果模型是包含交叉验证(例如gridsearchcv
或HyperBandSearchCV
)的管道。
然后如何运作?
我应该如何并行化此代码?
我不清楚如何使它工作,特别是如果我使用sklearn
或gridsearchcv
之类的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,它满足了您的许多需求。