有人使用sklearn-class的“n_jobs”吗?我在Anaconda 3.4 64位中使用sklearn。 Spyder版本是2.3.8。在将某些sklearn-class的“n_jobs”参数设置为非零值后,我的脚本无法完成执行。为什么会发生这种情况?
答案 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运行时提供了一个补丁(不是 但已审核)。