所以基本上我想要的是并行运行 ML Pipelines。我一直在使用 scikit-learn,我决定使用DaskGridSearchCV
.
我有一个gridSearchCV = DaskGridSearchCV(pipeline, grid, scoring=evaluator)
对象列表,我按顺序运行每个对象:
for gridSearchCV in list:
gridSearchCV.fit(train_data, train_target)
predicted = gridSearchCV.predict(test_data)
如果我有 N 个不同的GridSearch
对象,我想尽可能多地利用所有可用资源。如果有资源可以同时并行运行 2、3、4、... 或 N,我想这样做。
所以我开始根据 dask 的文档尝试一些事情。首先我尝试了dask.threaded
,dask.multiprocessing
但它最终变慢了,我不断得到:
/Library/Python/2.7/site-packages/sklearn/externals/joblib/parallel.py:540: UserWarning: Multiprocessing backed parallel loops cannot be nested below threads, setting n_jobs=1
这是代码片段:
def run_pipeline(self, gs, data):
train_data, test_data, train_target, expected = train_test_split(data, target, test_size=0.25, random_state=33)
model = gs.fit(train_data, train_target)
predicted = gs.predict(test_data)
values = [delayed(run_pipeline)(gs, df) for gs in gs_list]
compute(*values, get=dask.threaded.get)
也许我正在以错误的方式接近这个,你对我有什么建议吗?