我已经关注了伊马诺·卢恩戈 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:
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(使用前将#替换为@)