首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >部分拟合在sklearn.decomposition.IncrementalPCA中并行运行吗?

部分拟合在sklearn.decomposition.IncrementalPCA中并行运行吗?
EN

Stack Overflow用户
提问于 2019-04-05 09:08:41
回答 1查看 1.1K关注 0票数 1

我遵循伊曼诺鲁安戈回答构建了sklearn.decomposition.IncrementalPCA的部分拟合和转换。但出于某种原因,它似乎最大限度地使用了所有的CPU核心。我既找不到n_jobs参数,也找不到与多处理相关的任何东西。我的问题是:如果这是这些函数的默认行为,我如何设置CPU的数量以及在哪里可以找到有关它的信息?如果不是,显然我在前面的代码中做了错误的事情。

PS:我需要限制CPU内核的数量,因为使用服务器中的所有内核会给其他人带来很多麻烦。

附加信息和调试代码:--所以,已经有一段时间了,我仍然无法弄清楚这种行为的原因或如何限制一次使用的CPU核的数量。我决定提供一个示例代码来测试它。注意,这个代码片段是从滑雪板网站中提取的。唯一的区别是增加数据集的大小,这样就可以很容易地看到行为。

代码语言:javascript
复制
from sklearn.datasets import load_digits
from sklearn.decomposition import IncrementalPCA
import numpy as np

X, _ = load_digits(return_X_y=True)

#Copy-paste and increase the size of the dataset to see the behavior at htop.
for _ in range(8):
    X = np.vstack((X, X))

print(X.shape)

transformer = IncrementalPCA(n_components=7, batch_size=200)
transformer.partial_fit(X[:100, :])
X_transformed = transformer.fit_transform(X)

print(X_transformed.shape)

产出如下:

代码语言:javascript
复制
(460032, 64)
(460032, 7)

Process finished with exit code 0

htop显示:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-14 13:39:14

我在我的另一个职位中寻找一个解决这个问题的方法,我发现这并不是因为scikit学习实现错误,而是因为numpy库使用的BLAS库(特别是OpenBLAS),该库用于sklearn的IncrementalPCA函数。默认情况下,OpenBLAS设置为使用所有可用线程。详细信息可以找到这里

TL:DR通过在导入numpy之前设置BLAS环境变量或通过下面的代码导入numpy的任何库来解决这个问题。详细信息可以找到这里

代码语言:javascript
复制
import os
os.environ["OMP_NUM_THREADS"] = 1 # export OMP_NUM_THREADS=1
os.environ["OPENBLAS_NUM_THREADS"] = 1 # export OPENBLAS_NUM_THREADS=1
os.environ["MKL_NUM_THREADS"] = 1 # export MKL_NUM_THREADS=1
os.environ["VECLIB_MAXIMUM_THREADS"] = 1 # export VECLIB_MAXIMUM_THREADS=1
os.environ["NUMEXPR_NUM_THREADS"] = 1 # export NUMEXPR_NUM_THREADS=1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55531880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档