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

ali*_*noi 3 python install numpy blas lapack

我正在运行ArchLinux,我的python版本是2.7.8,BLAS并且LAPACK都安装了:

% 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

然而,np.dot当我知道在类似的机器上它在10秒内运行良好时,我对该操作的速度测试超过30秒.如何解决速度问题?在安装numpy BLASLAPACK支持时我是否错过了什么?

ali*_*noi 6

好吧,这是整个故事.首先,初始设置是缓慢的,因为BLAS是一个参考实现它的目的不是要快.我再说一遍,截至今天,blasArchLinux Extra存储库中的包是参考实现.有关详细信息,请参阅此处Presentation部分.

其次,有优化版本BLAS(很多,实际上:ATLAS,OpenBlas,Goto BLAS,MKL等等,毫无疑问).它们安装起来相当棘手.我最终安装了OpenBlas,这是在ArchLinux上执行此操作的分步概述:

  1. 从AUR安装openblas-lapack
  2. python2-numpy-openblas 从AUR安装软件包据我所知,它与普通python2-numpy软件包的不同之处在于site.cfg配置文件,它指示numpy搜索openblas我们在步骤1中安装的库.

这些动作为我解决了问题,速度现在好多了 - 我在问题中提到的测试时间不到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
Run Code Online (Sandbox Code Playgroud)

我认为,建立的过程openblas为导向numpypython3长相非常相似.