Comment vous assurer que les bibliothèques BLAP numpy sont disponibles en tant que bibliothèques à chargement dynamic?

La documentation d’installation de theano indique que les bibliothèques BLAS de numpy seront utilisées par défaut si les “bibliothèques BLAS sont disponibles en tant que bibliothèques à chargement dynamic”. Cela ne semble pas fonctionner sur ma machine, voir le message d’erreur.

  • Comment puis-je savoir si les bibliothèques BLAP numpy sont disponibles comme chargeables dynamicment?
  • Comment recomstackr les bibliothèques BLAP numpy, si elles ne peuvent pas être chargées dynamicment?

Veuillez indiquer si vous avez besoin de plus d’informations!

Message d’erreur

We did not found a dynamic library into the library_dir of the library we use for blas. If you use ATLAS, make sure to comstack it with dynamics library. /usr/bin/ld: cannot find -lblas

annexe

La bibliothèque theano a besoin entre autres d’une numpy et d’une bibliothèque BLAS. J’ai pensé que numpy est livré avec BLAS si vous l’installez avec sudo apt-get install python-numpy python-scipy sous Ubuntu.

Ceci est la liste de fichiers de /usr/lib64/python2.6/dist-packages/scipy/lib/blas

 cblas.so info.py __init__.py scons_support.py setup.py fblas.so info.pyc __init__.pyc scons_support.pyc setup.pyc setupscons.py test setupscons.pyc 

Ceci est la sortie de distutils.__config__.show() est comme suit

 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 lapack_opt_info: libraries = ['lapack', 'blas'] library_dirs = ['/usr/lib64'] 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 

Après avoir téléchargé la dissortingbution Anaconda des bibliothèques Python, je viens de rencontrer le même problème sur Ubuntu 12.04 LTS 64 bits. Pointant Theano sur le répertoire contenant libblas.so s’en est occupé.

$ THEANO_FLAGS=blas.ldflags="-L/usr/lib/ -lblas" python rbm.py

Avec ubuntu, dans le gestionnaire de paquets, libblas.so est fourni avec le paquet libblas3gf. Si d’une manière ou d’une autre il ne crée pas libblas.so, mais crée libblas.so.X, créez manuellement un lien symbolique tel que:

 cd /usr/lib64 sudo ln -s libblas.so.3gf libblas.so 

NB: Cela fonctionne très bien pour moi, mais lisez le commentaire ci-dessous. Et gardez à l’esprit que ce package ne sera pas optimisé pour votre matériel spécifique (lisez d’autres réponses suggérant ATLAS par exemple).

Dans votre cas, vous devriez regarder dans /usr/lib64 et voir si libblas , etc. sont disponibles sous .so.X fichiers .so ou .so.X .

La recompilation de BLAS n’est pas sortingviale, mais vous pouvez peut-être essayer d’installer les packages ATLAS appropriés pour votre dissortingbution.

Si une version assez récente de numpy est installée, theano fonctionnera correctement dans tous les cas.

À partir de là, la seule raison de se préoccuper des blas utilisés est la vitesse. Le blas par défaut est très lent. Beaucoup de distro comstacknt encore cette version lente de blas.

Un moyen facile / rapide d’avoir une implémentation de blas plus rapide consiste à installer le paquet de dissortingbution sur atlas et atlas devel. Ceci est une implémentation optimisée de blas.

Une version plus récente d’Unbuntu, l’installation d’Atlas terminée est telle que numpy commencera à l’utiliser. Il n’y a donc pas besoin de changer quoi que ce soit sur Theano à ce sujet. Je ne sais pas si une autre dissortingbution le fait.

La meilleure façon de vérifier les blas utilisés rapidement par Theano est de le chronométrer. Pour ce faire, lancez ceci sous bash:

X = python -c "import theano;import os.path; print os.path.split(theano.__file__)[0]" python $ {X} /misc/check_blas.py

Ensuite, comparez la vitesse nécessaire à l’exécution avec un autre résultat de comparaison imprimé.

Votre question principale est essentiellement de savoir si les responsables de la dissortingbution ont les dépendances installées correctement ou non – et pour cela je n’ai pas de réponse ou de solution.

Cependant, j’ai une recommandation. ATLAS n’est pas très difficile à construire. Obtenez la source, décompressez-vous, assurez-vous d’avoir satisfait ses dépendances, puis lancez les étapes de configuration et de création. La partie dépendance est probablement la partie manuelle la plus longue du processus.

Bien sûr, alors vous devez relier numpy, theano, etc. Bien que je reconnaisse que c’est une douleur (croyez-moi, je l’ai parcouru pour le CSV de Theano et Hannes Shulz & Andy Mueller), l’avantage est un BLAS Exécuter de manière optimale sur votre matériel.