我在i,j
上运行一个双嵌套循环,并在内部循环中使用sklearn的PCA函数。虽然我没有使用任何并行处理包,但任务管理器告诉我,我所有的CPU都在80%-100%之间运行。我对此感到惊喜,有两个问题:
1) 这是怎么回事?python是如何决定使用多个CPU的?它是如何打破循环的?打印出i,j
值,它们仍在按顺序完成。
2) 通过显式地将代码与包并行化,代码的速度会更快吗?还是差异可以忽略不计?
"几个scikit学习工具…内部依赖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
。看看