首页 > 解决方案 > Python 无需我询问就使用多核

问题描述

我正在运行一个双嵌套循环,i,j并在内循环中使用 sklearn 的 PCA 函数。虽然我没有使用任何并行处理包,但任务管理器告诉我我所有的 CPU 都在 80%-100% 之间运行。我对此感到惊喜,并有两个问题:

1)这里发生了什么?python是如何决定使用多个CPU的?它是如何打破循环的?打印出i,j值,它们仍在按顺序完成。

2) 通过显式地将代码与包并行化,代码是否会更快,或者差异可以忽略不计?

标签: pythonmultithreadingscikit-learnmultiprocessing

解决方案


“几个 scikit-learn 工具......内部依赖 Python 的多处理模块,通过传递 n_jobs > 1 作为参数来并行执行多个 Python 进程。”

因此,一种解释是代码n_jobs中的某处是 sklearn 进程的有效参数。不过我有点困惑,因为只有专门的 PCA 工具在文档中有这个论点。

https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html(否n_jobs

https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.KernelPCA.html(有n_jobs

https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.MiniBatchSparsePCA.html(有n_jobs

Numpy 也可能是罪魁祸首,但您必须深入研究实现才能开始检查在何处sklearn使用numpy并行工具。

Sklearn 有一个专门用于优化现有sklearn工具(和编写自己的工具)的登录页面。他们提供了各种建议,并特别提到了joblib. 一探究竟


推荐阅读