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

Posted

技术标签:

【中文标题】Scikit-Learn with Dask-Distributed 使用嵌套并行?【英文标题】:Scikit-Learn with Dask-Distributed using nested parallelism? 【发布时间】:2017-06-30 23:06:58 【问题描述】:

例如假设我有代码:

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】:

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

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

【讨论】:

以上是关于Scikit-Learn with Dask-Distributed 使用嵌套并行?的主要内容,如果未能解决你的问题,请参考以下文章

K-Means clusternig example with Python and Scikit-learn(推荐)

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

Hands-On Machine Learning with Scikit-Learn and TensorFlow---读书笔记

Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow ——Chapter 2

Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow ——Chapter 1 Machine Learning Land

Scikit-learn kmeans 聚类