部分拟合是否在 sklearn.decomposition.IncrementalPCA 中并行运行?

2024-05-05

我已经关注了伊马诺·卢恩戈 https://stackoverflow.com/users/764322/imanol-luengo's answer https://stackoverflow.com/a/44335148/10183880建立部分拟合和变换sklearn.分解.增量PCA https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.IncrementalPCA.html#sklearn.decomposition.IncrementalPCA.partial_fit。但由于某种原因,看起来(来自 htop)它最大程度地使用了所有 CPU 核心。我既找不到 n_jobs 参数,也找不到与多处理相关的任何内容。我的问题是:如果这是这些函数的默认行为,我该如何设置 CPU 的数量以及在哪里可以找到有关它的信息?如果没有,显然我在代码的前面部分做错了一些事情。

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

附加信息和调试代码:所以,已经有一段时间了,我仍然无法弄清楚这种行为的原因或如何限制一次使用的 CPU 核心数量。我决定提供示例代码来测试它。请注意,此代码片段取自sklearn 的网站 https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.IncrementalPCA.html。唯一的区别是增加了数据集的大小,因此人们可以轻松地看到行为。

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)

输出是:

(460032, 64)
(460032, 7)

Process finished with exit code 0

And the htop shows: htop shows...


TL:DR 通过设置 BLAS 环境变量解决了该问题在导入 numpy 或任何导入 numpy 的库之前与下面的代码。详细信息可以查到here https://stackoverflow.com/a/56126088/10183880.

很长的故事: 我正在寻找解决此问题的方法另一个帖子 https://stackoverflow.com/q/55746872/10183880我发现这不是因为 scikit-learn 实现错误,而是因为 numpy 库使用的 BLAS 库(特别是 OpenBLAS),该库在 sklearn 的 IncrementalPCA 函数中使用。默认情况下,OpenBLAS 设置为使用所有可用线程。详细信息可以查到here https://stackoverflow.com/a/56126088/10183880.

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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

部分拟合是否在 sklearn.decomposition.IncrementalPCA 中并行运行? 的相关文章

随机推荐