【问题标题】:How can I make NumPy use OpenBlas in Ubuntu?如何让 NumPy 在 Ubuntu 中使用 OpenBlas?
【发布时间】:2015-04-30 23:35:09
【问题描述】:

我同时安装了 BLAS 和 OpenBLAS:

$ dpkg -l \*blas\* | grep ^i
ii  libblas-dev                                           1.2.20110419-7                                      amd64        Basic Linear Algebra Subroutines 3, static library
ii  libblas3                                              1.2.20110419-7                                      amd64        Basic Linear Algebra Reference implementations, shared library
ii  libopenblas-base                                      0.2.8-6ubuntu1                                      amd64        Optimized BLAS (linear algebra) library based on GotoBLAS2
ii  libopenblas-dev                                       0.2.8-6ubuntu1                                      amd64        Optimized BLAS (linear algebra) library based on GotoBLAS2

但是,NumPy 仍然说 OpenBLAS 不可用:

>> np.__config__.show()
blas_info:
    libraries = ['blas']
    library_dirs = ['/usr/lib']
    language = f77
lapack_info:
    libraries = ['lapack']
    library_dirs = ['/usr/lib']
    language = f77
atlas_threads_info:
  NOT AVAILABLE
blas_opt_info:
    libraries = ['blas']
    library_dirs = ['/usr/lib']
    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/lib']
    language = f77
    define_macros = [('NO_ATLAS_INFO', 1)]
atlas_info:
  NOT AVAILABLE
lapack_mkl_info:
  NOT AVAILABLE
blas_mkl_info:
  NOT AVAILABLE
atlas_blas_info:
  NOT AVAILABLE
mkl_info:
  NOT AVAILABLE

我该如何解决这个问题?

我不认为我可以卸载libblas3,因为很多东西都依赖它,包括libblas-dev,甚至libopenblas-dev也依赖它。

我试过了

$ sudo apt-get install --reinstall python-numpy

但这没有帮助。

这尤其令人惊讶,因为numpy 中的所有*.so 文件都链接到OpenBLAS:

$ ldd `find /usr/lib/python2.7/dist-packages/numpy -name \*\.so` | grep libblas
        libblas.so.3 => /usr/lib/libblas.so.3 (0x00007fba2ac96000)
        libblas.so.3 => /usr/lib/libblas.so.3 (0x00007f04f7f54000)
        libblas.so.3 => /usr/lib/libblas.so.3 (0x00007f9a941a9000)

$ ls -l /usr/lib/libblas.so.3 /etc/alternatives/libblas.so.3
lrwxrwxrwx 1 root root 35 Oct 22  2014 /etc/alternatives/libblas.so.3 -> /usr/lib/openblas-base/libblas.so.3
lrwxrwxrwx 1 root root 30 Oct  6  2014 /usr/lib/libblas.so.3 -> /etc/alternatives/libblas.so.3

【问题讨论】:

    标签: numpy ubuntu-14.04 blas openblas


    【解决方案1】:

    在 Ubuntu 16.10 上你可以

    $ apt install libopenblas-base
    

    并使用

    激活您首选的 BLAS 实现
    $ update-alternatives --config libblas.so.3
    

    我做到了,然后跑了

    import numpy as np
    a1 = np.random.rand(10000, 10000)
    a2 = np.random.rand(10000, 10000)
    np.dot(a1, a2)
    

    带有 libblas(2m38s,仅单核负载)和 libopenblas(0m18s,多核负载)

    编辑:这是通过 Ubuntu 的官方存储库安装的 Python 和 numpy,而不是 pip。

    【讨论】:

      【解决方案2】:

      根据ldd 输出,NumPy 必须已经与 OpenBLAS 链接。它只是不知道它,因为它是通过/usr/lib/libblas* 链接的,它认为这是通用的 BLAS。

      【讨论】:

      • 这个答案虽然被接受,但没有提到具体该怎么做。如何让 NumPy “知道”它与 OpenBLAS 相关联?
      • 虽然我很好奇答案是什么,但在我的情况下可能并不相关。我的输出几乎与这篇文章中的相同,除了提示这个被接受的解决方案的一行 - ldd 'find /usr/lib/python2.7/dist-packages/numpy -name *\.so' | grep libblas 就我而言,它在该目录中没有找到任何此类文件。那么这对我来说意味着什么?最重要的是,我该怎么办?
      • @Rafael_Espericueta 在我的情况下不需要做任何事情。在您的情况下,假设您描述正确,您可能甚至没有从 apt 安装 python blas。 (我真的不想猜测你可能做了什么,或者你的目标是什么)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-22
      • 2018-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-24
      • 1970-01-01
      相关资源
      最近更新 更多