n_jobs在sklearn-classes中不起作用

时间:2016-07-12 11:52:46

标签: python scikit-learn

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

1 个答案:

答案 0 :(得分:0)

一些scikit-learn工具,如GridSearchCV和cross_val_score,内部依赖于Python的多处理模块,通过传递n_jobs>将执行并行化到几个Python进程上。 1作为论据。

取自Sklearn文件:

  

问题是Python多处理执行fork系统调用   由于性能原因没有跟随exec系统调用。   许多库喜欢(某些版本)OSX下的Accelerate / vecLib,   (某些版本)MKL,GCC的OpenMP运行时,nvidia的Cuda(和   可能很多其他人),管理自己的内部线程池。一个   调用fork,子进程中的线程池状态已损坏:   线程池认为它有很多线程而只有主线程   线程状态已经分叉。可以更改库   使它们检测叉子何时发生并重新初始化线程   在这种情况下池:我们为OpenBLAS做了那个(在master中合并上游)   从0.2.10开始,我们为GCC的OpenMP运行时提供了一个补丁(不是   但已审核)。