【问题标题】:numpy.dot is slow yet blas and lapack are installed, how to fix?numpy.dot 很慢,但安装了 blas 和 lapack,如何解决?
【发布时间】:2014-11-29 07:05:15
【问题描述】:

我在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 秒。如何解决速度问题?在安装带有BLASLAPACK 支持的numpy 时,我错过了什么吗?

【问题讨论】:

    标签: python numpy installation lapack blas


    【解决方案1】:

    好的,这就是整个故事。首先,初始设置很慢,因为BLAS 是一个参考实现,它的设计初衷并不快。我再说一遍,截至今天,ArchLinux Extra 存储库中的包blas 是参考实现。有关详细信息,请参阅Presentation 部分here

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

    1. 安装openblas-lapackpackage from the AUR
    2. 安装python2-numpy-openblas package from the 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
    

    我相信为python3设置openblas面向numpy的过程看起来很相似。

    【讨论】:

      【解决方案2】:

      我的建议是从源代码构建“numpy”并将其与 BLAS 和 LAPACK 链接。

      【讨论】:

      • 谢谢,但这正是sudo pip2 install numpy 所做的:它获取numpy 包,对其进行配置、构建和安装。我的下一个代码摘录显示numpy 知道BLASLAPACK
      • 我开始怀疑我的BLAS 实际上是一个参考实现,而不是一个优化的实现。可以通过阅读Presentation 部分here 推断出
      • @all3fox,您可能想看看ATLASmath-atlas.sourceforge.net。 ATLAS 尝试引导针对您的系统量身定制的快速 BLAS 实现。
      • @cel 谢谢,我一直在尝试编译它,但现在一个小时无法关闭节流。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-27
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      • 2015-03-09
      相关资源
      最近更新 更多