向 OpenBlas for Python 添加自定义更改

向 OpenBlas for Python 添加自定义更改

我的问题:如何让 Python 使用我自己编译的 OpenBLAS 版本?

背景

Theano安装指南建议通过以下命令测试相关的 BLAS 库组件是否正确优化:

THEANO_FLAGS=floatX=float32,device=cpu python `python -c "import os, theano; print os.path.dirname(theano.__file__)"`/misc/check_blas.py 
THEANO_FLAGS=floatX=float32,device=gpu python `python -c "import os, theano; print os.path.dirname(theano.__file__)"`/misc/check_blas.py

结果是:

显卡:GTX 770
CPU 0.62s 和 GPU 0.11s 上的结果

不确定这些结果是否好,我决定比较不同的库,就像在这个帖子。由于科学计算需要尽可能地加速,所以这似乎是个好主意。

从 GitHub 编译并安装 OpenBLAS

为了测试最新版本我:

  1. 克隆 gitgit clone https://github.com/xianyi/OpenBLAS.git
  2. 进入目录并创建一个make TARGET=HASWELL(TARGET 不是真正必要的,因为它会自动检测)
  3. 其次是make PREFIX=/opt/OpenBLAS install
  4. 将 lib 下的文件(libopenblas.a libopenblas_haswellp-r0.2.14.a libopenblas_haswellp-r0.2.14.so libopenblas.so libopenblas.so.0)复制到/usr/lib/openblas-haswell_cstm/
  5. 通过添加替代方案sudo update-alternatives --install /usr/lib/libblas.so.3 libblas.so.3 /usr/lib/openblas-haswell_cstm/libopenblas.so.0 30

不幸的是这会产生一个错误:

$ sudo update-alternatives --config libblas.so.3 
There are 4 choices for the alternative libblas.so.3 (providing /usr/lib/libblas.so.3).

  Selection    Path                                             Priority   Status
------------------------------------------------------------
  0            /usr/lib/openblas-base/libblas.so.3               40        auto mode
* 1            /usr/lib/atlas-base/atlas/libblas.so.3            35        manual mode
  2            /usr/lib/libblas/libblas.so.3                     10        manual mode
  3            /usr/lib/openblas-base/libblas.so.3               40        manual mode
  4            /usr/lib/openblas-haswell_cstm/libopenblas.so.0   30        manual mode

Press enter to keep the current choice[*], or type selection number: 4
update-alternatives: using /usr/lib/openblas-haswell_cstm/libopenblas.so.0 to provide /usr/lib/libblas.so.3 (libblas.so.3) in manual mode
max@MaxLin:~/tutorials$ python
Python 2.7.8 (default, Oct 20 2014, 15:05:19) 
[GCC 4.9.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/numpy/__init__.py", line 153, in <module>
    from . import add_newdocs
  File "/usr/lib/python2.7/dist-packages/numpy/add_newdocs.py", line 13, in <module>
    from numpy.lib import add_newdoc
  File "/usr/lib/python2.7/dist-packages/numpy/lib/__init__.py", line 18, in <module>
    from .polynomial import *
  File "/usr/lib/python2.7/dist-packages/numpy/lib/polynomial.py", line 19, in <module>
    from numpy.linalg import eigvals, lstsq, inv
  File "/usr/lib/python2.7/dist-packages/numpy/linalg/__init__.py", line 50, in <module>
    from .linalg import *
  File "/usr/lib/python2.7/dist-packages/numpy/linalg/linalg.py", line 29, in <module>
    from numpy.linalg import lapack_lite, _umath_linalg
ImportError: /usr/lib/liblapack.so.3: undefined symbol: gotoblas

我不确定这是否与编译版本不是.so.3 版本我尝试过使用 libopenblas_haswellp-r0.2.14.so 和 创建的 libopenblas.somake但是对错误没有任何影响。

答案1

如果你想构建自定义 Debian 软件包,我建议你从现有openblas软件包开始,然后如何下载、修改、构建和安装 Debian 源包?

如果您觉得您的包不能完全替代所提供的包,您可以修改包名称和库文件名。

相关内容