【问题标题】:n_jobs don't work in sklearn-classesn_jobs 在 sklearn-classes 中不起作用
【发布时间】:2016-11-14 15:40:19
【问题描述】:

有人使用 sklearn-classes 的“n_jobs”吗?我在 Anaconda 3.4 64 位中使用 sklearn。 Spyder 版本是 2.3.8。将某些 sklearn-class 的“n_jobs”参数设置为非零值后,我的脚本无法完成执行。为什么会发生这种情况?

【问题讨论】:

  • 如果您使用的是 Windows,请尝试在脚本中包含以下内容:if __name__ == "__main__":。它对我有用。我首先在我的脚本中添加了它,然后我使用缩进添加了我的其余代码。

标签: python scikit-learn


【解决方案1】:

GridSearchCV 和 cross_val_score 等多个 scikit-learn 工具在内部依赖 Python 的多处理模块,通过将 n_jobs > 1 作为参数来并行执行多个 Python 进程。

取自 Sklearn 文档:

问题在于 Python 多处理会进行 fork 系统调用 出于性能原因,无需使用 exec 系统调用来跟踪它。 许多库,例如(某些版本的) Accelerate / vecLib 在 OSX 下, (某些版本)MKL、GCC 的 OpenMP 运行时、nvidia 的 Cuda(和 可能还有很多其他人),管理自己的内部线程池。根据一个 调用fork,子进程中的线程池状态损坏: 线程池认为它有很多线程,而只有主线程 线程状态已分叉。可以更改库 让他们检测何时发生分叉并重新初始化线程 在这种情况下使用池:我们为 OpenBLAS 做到了(在 master 中合并上游 从 0.2.10 开始),我们为 GCC 的 OpenMP 运行时(不是 尚未审核)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-28
    • 2020-10-06
    • 2015-01-29
    • 1970-01-01
    • 2021-01-13
    • 2015-02-08
    • 1970-01-01
    • 2017-08-08
    相关资源
    最近更新 更多