numpy.dot很慢,但blas和lapack已安装,如何解决?

3

我正在运行ArchLinux,我的Python版本是2.7.8,并且已经安装了BLASLAPACK

% pacman -Qs blas; pacman -Qs lapack
local/blas 3.5.0-1
    Basic Linear Algebra Subprograms
local/lapack 3.5.0-1
    Linear Algebra PACKage

Numpy已通过sudo pip2 install numpy安装,并确认它同时看到了BLASLAPACK

>>> numpy.show_config()
blas_info:
    libraries = ['blas']
    library_dirs = ['/usr/lib64']
    language = f77
lapack_info:
    libraries = ['lapack']
    library_dirs = ['/usr/lib64']
    language = f77
atlas_threads_info:
  NOT AVAILABLE
blas_opt_info:
    libraries = ['blas']
    library_dirs = ['/usr/lib64']
    language = f77
    define_macros = [('NO_ATLAS_INFO', 1)]
atlas_blas_threads_info:
  NOT AVAILABLE
openblas_info:
  NOT AVAILABLE
lapack_opt_info:
    libraries = ['lapack', 'blas']
    library_dirs = ['/usr/lib64']
    language = f77
    define_macros = [('NO_ATLAS_INFO', 1)]
openblas_lapack_info:
  NOT AVAILABLE
atlas_info:
  NOT AVAILABLE
lapack_mkl_info:
  NOT AVAILABLE
blas_mkl_info:
  NOT AVAILABLE
atlas_blas_info:
  NOT AVAILABLE
mkl_info:
  NOT AVAILABLE

然而,我的np.dot操作的速度测试超过30秒,但我知道在一台类似的机器上它运行时间不到10秒。如何解决速度问题?在安装numpy时是否错过了支持BLASLAPACK的部分?

2个回答

6
好的,这是整个故事。首先,初始设置很慢,因为BLAS是一个不设计快速的参考实现。我再次重申,截至今日,ArchLinux Extra软件库中的blas包是参考实现。详情请参见此处Presentation部分。
其次,有优化过的BLAS版本(实际上有相当多:ATLAS、OpenBlas、Goto BLAS、MKL等等)。它们安装起来相当棘手。我最终安装了OpenBlas,在ArchLinux上进行了以下步骤概述:
  1. 从AUR安装openblas-lapack软件包
  2. 从AUR安装python2-numpy-openblas软件包。据我所知,它与普通的python2-numpy软件包不同之处在于site.cfg配置文件,该文件指示numpy搜索我们在第1步安装的openblas库。
这些操作解决了我的问题,速度现在快多了——对于我在问题中提到的测试,不到1秒。此外,numpy显示它已经使用openblas编译:
>>> np.show_config()
lapack_opt_info:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/usr/lib']
    language = f77
blas_opt_info:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/usr/lib']
    language = f77
openblas_info:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/usr/lib']
    language = f77
openblas_lapack_info:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/usr/lib']
    language = f77
blas_mkl_info:
  NOT AVAILABLE

我认为为Python3设置基于openblasnumpy过程看起来非常相似。


-1
我的建议是从源代码构建 'numpy' 并将其与 BLAS 和 LAPACK 进行链接。

1
谢谢,但这正是 sudo pip2 install numpy 所做的:它获取 numpy 包,配置它,构建并安装。我的下一个代码片段显示 numpy 知道 BLASLAPACK - alisianoi
我开始怀疑我的 BLAS 实际上是一个参考实现,而不是优化实现。这可以从阅读这里的“Presentation”部分得出。 - alisianoi
1
@all3fox,你可能想看看 ATLAS。http://math-atlas.sourceforge.net。ATLAS试图引导一个快速的`BLAS`实现,以适应你的系统。 - cel
@cel 谢谢,我一直在尝试编译它,但是我现在已经一个小时无法关闭限流了。 - alisianoi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接