web-dev-qa-db-fra.com

Ajout de modifications personnalisées à OpenBlas pour Python

Ma question: Comment puis-je obtenir Python pour utiliser ma propre version OpenBLAS compilée?

Contexte

Le Theano guide d'installation suggère que l'on devrait tester que les composants de la bibliothèque BLAS associés sont correctement optimisés via ces commandes:

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

Les résultats sont:

Carte: GTX 770
Résultats sur CPU 0.62s et GPU 0.11s

Je ne sais pas si ces résultats étaient bons, j'ai décidé de comparer différentes bibliothèques comme dans ce post . Le calcul scientifique nécessitant toutes les accélérations possibles, cela semblait être une bonne idée.

Compiler et installer OpenBLAS depuis GitHub

Afin de tester la dernière version, j'ai:

  1. cloné le git git clone https://github.com/xianyi/OpenBLAS.git
  2. entré dans le répertoire et fait un make TARGET=HASWELL (le TARGET n'est pas vraiment nécessaire car il le détecte automatiquement)
  3. suivi par make PREFIX=/opt/OpenBLAS install.
  4. copié les fichiers sous lib (libopenblas.a libopenblas_haswellp-r0.2.14.a libopenblas_haswellp-r0.2.14.so libopenblas.so libopenblas.so.0) vers /usr/lib/openblas-haswell_cstm/
  5. a ajouté une alternative via Sudo update-alternatives --install /usr/lib/libblas.so.3 libblas.so.3 /usr/lib/openblas-haswell_cstm/libopenblas.so.0 30

Malheureusement, cela donne une erreur:

$ 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

Je ne sais pas si cela a à voir avec la version compilée n'étant pas une version . So. . J'ai essayé d'utiliser le libopenblas_haswellp-r0.2.14.so et le libopenblas.so créé par le make mais cela n'a aucun effet sur l'erreur.

1
Max Gordon

si vous voulez construire un paquet Debian personnalisé, je vous recommande de commencer par le paquet openblas existant et Comment télécharger, modifier, construire et installer un paquet source Debian? .

Vous pouvez modifier le nom du package et les noms des fichiers de bibliothèque, si vous pensez que votre package ne remplace pas complètement celui fourni.

0
David Foerster