python - Python 无需我询问就使用多核
问题描述
我正在运行一个双嵌套循环,i,j
并在内循环中使用 sklearn 的 PCA 函数。虽然我没有使用任何并行处理包,但任务管理器告诉我我所有的 CPU 都在 80%-100% 之间运行。我对此感到惊喜,并有两个问题:
1)这里发生了什么?python是如何决定使用多个CPU的?它是如何打破循环的?打印出i,j
值,它们仍在按顺序完成。
2) 通过显式地将代码与包并行化,代码是否会更快,或者差异可以忽略不计?
解决方案
“几个 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
.
一探究竟
推荐阅读
- javascript - 获取烧瓶中的下拉选择值
- html - 如何在导航栏中留出空白
- kotlin - 每次应用重启时 onActivityCreated() 中的函数调用都会触发 Observer
- java - 无法解析符号“dispactCommand”错误
- xcode - 在 react-native 中发出网络请求的问题 - iOS 和 Android
- c++ - 如果更改 2 个部分中的线程数,OpenMP 线程的 SPID 是否应该更改?
- javascript - 如何创建一个半场景?
- python - ROS Melodic python版本冲突(--unmet dependencies)
- html - 有没有办法强制 HTML换行而不是全宽显示?
- php - PHPmailer 和 Google reCapcha V2 验证问题