使 Python 能够利用所有内核来拟合 scikit-learn 模型

Posted

技术标签:

【中文标题】使 Python 能够利用所有内核来拟合 scikit-learn 模型【英文标题】:Enable Python to utilize all cores for fitting scikit-learn models 【发布时间】:2013-04-25 20:35:17 【问题描述】:

我在 Windows 8 64 位系统上运行 python 2.7ipython,系统具有 4 个内核。拟合scikit-learn 模型时,CPU 使用率为 50%,python 为 25%,Chrome 为 25%。

为什么chrome 使用与python 一样多的CPU 资源?

是否有scikit-learn 模型拟合函数的多线程版本,因此使用多核可以像设置变量一样简单?喜欢...

grid_search = GridSearchCV(pipeline, parameters, n_jobs=-1)

【问题讨论】:

【参考方案1】:

很少有 sklearn 模型可以自行并行运行。 GridSearchCVn_jobs=-1n_jobs=4 在非__main__ 交互式python 会话中(例如在脚本中)[1] 应该能够在windows 下进行多处理(只要底层个体fit 调用持续更多例如超过 1s)。

chrome 的东西可能是无关的:如果你不希望它使用任何 CPU,只需关闭 chrome。您可能有一个选项卡在后台执行一些 javascript 或有问题的 flash 应用程序。

[1]http://docs.python.org/2/library/multiprocessing.html#windows

【讨论】:

实际上 n_jobs 在每次 fit 调用时启动单独的 python 实例。它会导致巨大的开销,因此它可以在 fit 花费超过 1 秒的时间时使用。 它应该在 Pool 中启动 n_jobs Python 进程并将 fit 调用调度到这些进程。实际上,这仍然会显着增加开销,并且仅在单个 fit 调用花费超过 1 秒时才有用。 我在 Windows 的任务管理器中看到的肯定不是 python 进程池。

以上是关于使 Python 能够利用所有内核来拟合 scikit-learn 模型的主要内容,如果未能解决你的问题,请参考以下文章

fbprophet/Prophet 拟合函数中止并重新启动 Anaconda/Spyder Python 内核

用Python开始机器学习(3:数据拟合与广义线性回归)

利用Python的scipy包实现曲线的拟合

如何使 numba @jit 使用所有 cpu 内核(并行化 numba @jit)

独家 | 利用Python的混合集成机器学习(附链接)

Fibratus:一款功能强大的Windows内核漏洞利用和跟踪工具