Sci*_*tas 6 python scikit-learn ipython-parallel jupyter jupyter-notebook
我正在尝试并行GridSearchCV化scikit-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)
看起来它最终是顺序执行而不是并行执行。
| 归档时间: |
|
| 查看次数: |
2787 次 |
| 最近记录: |