使 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.7
和 ipython
,系统具有 4 个内核。拟合scikit-learn
模型时,CPU 使用率为 50%,python
为 25%,Chrome
为 25%。
为什么chrome
使用与python
一样多的CPU 资源?
是否有scikit-learn
模型拟合函数的多线程版本,因此使用多核可以像设置变量一样简单?喜欢...
grid_search = GridSearchCV(pipeline, parameters, n_jobs=-1)
【问题讨论】:
【参考方案1】:很少有 sklearn 模型可以自行并行运行。 GridSearchCV
与n_jobs=-1
或n_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 内核