Adicionando alterações personalizadas ao OpenBlas for Python

0

Minha pergunta: Como faço para o Python usar minha própria versão compilada do OpenBLAS?

Antecedentes

O guia de instalação do Theano sugere que se deve testar se os componentes da biblioteca BLAS associados estão corretamente otimizados através destes comandos :

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

Os resultados são:

Card: GTX 770
Results on CPU 0.62s and GPU 0.11s

Não tenho certeza se esses resultados foram bons. Eu decidi comparar diferentes bibliotecas como feito em este post . Como a computação científica requer toda a aceleração possível, isso pareceu uma boa ideia.

Compilando e instalando o OpenBLAS a partir do GitHub

Para testar a versão mais recente, eu:

  1. clonou o git git clone https://github.com/xianyi/OpenBLAS.git
  2. entrou no diretório e fez um make TARGET=HASWELL (o TARGET não é realmente necessário, pois detecta automaticamente)
  3. seguido por make PREFIX=/opt/OpenBLAS install .
  4. copiou os arquivos em lib (libopenblas.a libopenblas_haswellp-r0.2.14.a libopenblas_haswellp-r0.2.14.so libopenblas.so libopenblas.so.0) para /usr/lib/openblas-haswell_cstm/
  5. adicionou uma alternativa por meio de sudo update-alternatives --install /usr/lib/libblas.so.3 libblas.so.3 /usr/lib/openblas-haswell_cstm/libopenblas.so.0 30

Infelizmente, isso gera um erro:

$ 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

Não tenho certeza se isso tem a ver com a versão compilada não sendo um . so.3 versão . Eu tentei usar o libopenblas_haswellp-r0.2.14.so eo libopenblas.so criado pelo make , mas não tem efeito sobre o erro.

    
por Max Gordon 19.04.2015 / 00:16

1 resposta

0

Se você quer construir um pacote Debian personalizado, eu recomendo que você comece com o pacote openblas existente e Como baixar, modificar, construir e instalar um Pacote fonte Debian? .

Você pode modificar o nome do pacote e os nomes dos arquivos da biblioteca, se achar que o pacote não substitui totalmente o fornecido.

    
por David Foerster 19.04.2015 / 23:31