我的主要问题是here。由于还没有人给出解决办法,我决定找个解决办法。我正在寻找一种方法,用python代码限制python脚本的CPU使用率(不是优先级,而是CPU核数)。我知道我可以用多处理库(池等)来实现这一点,但我不是用多处理来运行它的人。所以,我不知道该怎么做。我也可以通过终端来完成,但是这个脚本正在被另一个脚本导入。不幸的是,我没有机会通过终端机打电话。在
tl;dr:如何限制python脚本的CPU使用率(内核数),该脚本正被另一个脚本导入,我甚至不知道它为什么并行运行,而不通过终端运行它。(请检查下面的代码片段,是的,英语不是我的母语)
导致此问题的代码段: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)
#PARTIAL FIT RUNS IN PARALLEL! GOD WHY?
---------------------------------------
transformer.partial_fit(X[:100, :])
---------------------------------------
X_transformed = transformer.fit_transform(X)
print(X_transformed.shape)
版本:Python 3.6
作业库0.13.2
scikit学习0.20.2
数字1.16.2
更新:不起作用。感谢您的澄清@Darkonaut。可悲的是,我早就知道这行不通,而且我已经清楚地说明了问题的标题,但我猜人们不会读。
我想我做错了。我更新了基于@Ben Chaliah Ayoubanswer的代码片段。似乎什么都没有改变。我还想指出一点:我不想在多个核心上运行这段代码。这一行transformer.partial_fit(X[:100, :])运行在多个核心上(出于某种原因),它没有n_jobs或任何东西。另外请注意,我的第一个示例和我的原始代码不是用池或类似的东西初始化的。我不能在一开始设置核心的数量(因为没有这样的地方)。但现在有了它的位置,但它仍然运行在多个核心上。你可以自己测试一下。(代码如下)这就是为什么我要寻找一个解决办法。在
^{pr2}$
更新:因此,在导入numpy之前,我曾尝试在代码中使用this设置blas线程,但没有成功(再次)。还有其他建议吗?下面是代码的最新阶段。在
学分:@Amirfrom sklearn.datasets import load_digits
from sklearn.decomposition import IncrementalPCA
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
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)