librerias dinamicas crear como linux numpy shared-libraries blas atlas

linux - como crear librerias dinamicas en java



¿Cómo asegurarse de que las bibliotecas BLAS estén disponibles como bibliotecas que se pueden cargar dinámicamente? (5)

Con ubuntu, en el administrador de paquetes, libblas.so viene con el paquete libblas3gf. Si de alguna manera no crea libblas.so, pero crea libblas.so.X, crea manualmente un enlace simbólico como:

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

NB: Esto me ha funcionado bien, pero lea el comentario a continuación. Y tenga en cuenta que este paquete no se optimizará para su hardware específico (lea otras respuestas que sugieren ATLAS, por ejemplo).

La documentación de instalación de theano indica que, de forma predeterminada, usará las bibliotecas BLAS desde numpy, si las "bibliotecas BLAS están disponibles como bibliotecas de carga dinámica". Esto parece no estar funcionando en mi máquina, ver mensaje de error.

  • ¿Cómo puedo saber si las bibliotecas de BLAS numpy están disponibles como cargables dinámicamente?
  • ¿Cómo puedo volver a compilar las bibliotecas de BLAS numpy, si no se pueden cargar dinámicamente?

Por favor indique, si necesita más información!

Mensaje de error

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 compile it with dynamics library. /usr/bin/ld: cannot find -lblas

Apéndice

La biblioteca theano necesita, entre otras cosas, adormecer y una biblioteca BLAS. Me di cuenta de que numpy viene con BLAS si lo instalas con sudo apt-get install python-numpy python-scipy bajo Ubuntu.

Esta es la lista de archivos 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

Esta es la salida de distutils.__config__.show() es la siguiente

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


Después de descargar la distribución Anaconda de las bibliotecas de Python, acabo de encontrar el mismo problema en Ubuntu 12.04 LTS de 64 bits. Señalando a Theano al directorio que contenía libblas.so se encargó de ello.

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


En su caso, debe buscar en /usr/lib64 y ver si libblas , etc. están disponibles como archivos .so.X o .so.X .

Recompilar BLAS no es trivial, pero puede intentar instalar los paquetes ATLAS relevantes para su distribución.


Si se instaló una versión reciente suficiente de numpy, theano funcionará correctamente en todos los casos.

A partir de ahí, la única razón para preocuparse por las blas utilizadas es la velocidad. El blas por defecto es muy lento. Muchos distro compilan numpy de nuevo esta versión lenta de blas.

Una forma fácil / rápida de tener una implementación de blas más rápida es instalar el paquete de distribución sobre atlas y atlas devel. Esta es una implementación optimizada de blas.

En la versión más reciente de Unbuntu, la instalación del atlas se realiza de tal manera que Numpy comenzará a usarlo. Así que no hay necesidad de cambiar nada en Theano sobre esto. No sé si otras distro hacen esto.

La mejor manera de verificar el blas que utiliza Theano es rápido o no es cronometrarlo. Para hacerlo, ejecuta esto bajo bash:

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

Luego compare la velocidad que tomó correr con algún otro resultado de comparación impreso.


Su pregunta principal es esencialmente una de si los mantenedores de la distribución tienen las dependencias instaladas correctamente o no, y para eso no tengo una respuesta o una solución.

Sin embargo, tengo una recomendación. ATLAS no es muy difícil de construir. Obtenga la fuente, descomprima, asegúrese de que ha satisfecho sus dependencias, luego inicie los pasos de configuración y realización. La parte de dependencia es probablemente la parte manual del proceso que consume más tiempo.

Por supuesto, entonces tienes que volver a vincularlo con numpy, theano, etc. Aunque reconozco que es un dolor (créeme, lo revisé tanto para Theano como para Hannes Shulz y Andy Mueller CSV), el beneficio que obtienes es un BLAS sintonizado para Ejecutar óptimamente en su hardware.