Scikit-Learn with Dask-Distributed使用嵌套并行性?

时间:2017-02-13 03:00:01

标签: parallel-processing scikit-learn data-science dask joblib

例如假设我有代码:

vectorizer = CountVectorizer(input=u'filename', decode_error=u'replace')
classifier = OneVsRestClassifier(LinearSVC())
pipeline = Pipeline([
('vect', vectorizer),
('clf', classifier)])

 with parallel_backend('distributed',    scheduler_host=host_port):
    scores = cross_val_score(pipeline, X, y, cv=10)

如果我执行此代码,我可以在dask webview(通过Bokeh)中看到创建了10个任务(每个折叠1个)。但是,如果我执行:

(我知道X和Y应分为训练和测试,但这仅用于测试目的)。

with parallel_backend('distributed', scheduler_host=host_port):
    pipeline.fit(X,y)

我可以看到每个y类正在创建1个任务(在我的情况下为20个)。有没有办法让cross_val_score并行运行并且底层的OneVsRestClassifier并行运行?或者是

的原始代码
with parallel_backend('distributed', scheduler_host=host_port):
    scores = cross_val_score(pipeline, X, y, cv=10)

并行运行OneVsRestClassifier和cross_val_score,我只是没有看到它?我是否必须使用dask-distributed手动实现它?

1 个答案:

答案 0 :(得分:0)

joblib的并行后端的设计目前太受限制,无法处理嵌套的并行调用。此处跟踪此问题:https://github.com/joblib/joblib/pull/538

我们还需要扩展joblib的分布式后端以使用http://distributed.readthedocs.io/en/latest/api.html#distributed.get_client