如何与jupyter和sklearn并行?

Sci*_*tas 6 python scikit-learn ipython-parallel jupyter jupyter-notebook

我正在尝试并行GridSearchCVscikit-learn. 它在一个jupyter (hub) notebook环境中运行。经过一番研究,我发现了这段代码:

from sklearn.externals.joblib import Parallel, parallel_backend, register_parallel_backend
from ipyparallel import Client
from ipyparallel.joblib import IPythonParallelBackend

c = Client(profile='myprofile')
print(c.ids)
bview = c.load_balanced_view()

register_parallel_backend('ipyparallel', lambda : IPythonParallelBackend(view=bview))

grid = GridSearchCV(pipeline, cv=3, n_jobs=4, param_grid=param_grid)

with parallel_backend('ipyparallel'):
    grid.fit(X_train, Y_train)
Run Code Online (Sandbox Code Playgroud)

请注意,我已将n_jobs参数设置为4,机器的 cpu 核心数是多少。(这就是nproc返回的结果)

但它似乎不起作用:ImportError: cannot import name 'register_parallel_backend',尽管我安装了 joblibconda install joblib并且也尝试过pip install -U joblib

那么,在这种环境中并行化的最佳方法是什么GridSearchCV

更新:

不带参数ipyparallel且仅设置n_jobs参数:

grid = GridSearchCV(pipeline, cv=3, n_jobs=4, param_grid=param_grid)
grid.fit(X_train, Y_train)
Run Code Online (Sandbox Code Playgroud)

结果是以下警告消息:

/opt/conda/lib/python3.5/site-  packages/sklearn/externals/joblib/parallel.py:540: UserWarning:

Multiprocessing-backed parallel loops cannot be nested, setting n_jobs=1
Run Code Online (Sandbox Code Playgroud)

看起来它最终是顺序执行而不是并行执行。