Numpy突然使用所有CPU

时间:2016-07-29 12:44:07

标签: python numpy

直到最近,当我使用像np.dot(A,B)这样的numpy方法时,只使用了一个核心。但是,从今天开始,我的linux机器的所有8个核心都被使用了,这是一个问题。

最小的工作示例:

import numpy as np
N = 100

a = np.random.rand(N,N)
b = np.random.rand(N,N)

for i in range(100000):
    a = np.dot(a,b)

在我的另一台笔记本电脑上,它在单个核心上运行良好。这可能是由于一些新的图书馆?

今天早上我通过pip更新了matplotlib和cairocffi,但就是这样。

任何想法如何回归单核?

编辑:

当我跑步时

np.__config__.show()

我得到以下输出

openblas_info:
    libraries = ['openblas', 'openblas']
    define_macros = [('HAVE_CBLAS', None)]
    language = c
    library_dirs = ['/usr/local/lib']
openblas_lapack_info:
    libraries = ['openblas', 'openblas']
    define_macros = [('HAVE_CBLAS', None)]
    language = c
    library_dirs = ['/usr/local/lib']
lapack_opt_info:
    libraries = ['openblas', 'openblas']
    define_macros = [('HAVE_CBLAS', None)]
    language = c
    library_dirs = ['/usr/local/lib']
blas_mkl_info:
  NOT AVAILABLE
blas_opt_info:
    libraries = ['openblas', 'openblas']
    define_macros = [('HAVE_CBLAS', None)]
    language = c
    library_dirs = ['/usr/local/lib']

2 个答案:

答案 0 :(得分:3)

这可能是因为numpy正在链接多线程的openBLAS库。尝试设置全局环境变量以将线程关联设置为:

export OPENBLAS_MAIN_FREE=1

# Now run your python script.

另一种解决方法是使用ATLAS代替OpenBLAS。有关详细信息,请参阅此帖子(https://shahhj.wordpress.com/2013/10/27/numpy-and-blas-no-problemo/)。这篇文章提出了一些其他可能值得尝试的解决方法。

答案 1 :(得分:2)

如果您使用的是OpenBLAS,请尝试将OPENBLAS_NUM_THREADS环境变量设置为1。OpenBLAS使用所有CPU内核,并且在小型矩阵上效率低下。

export OPENBLAS_NUM_THREADS = 1

您可以在此处了解更多信息:https://github.com/numpy/numpy/issues/8120