Как убедиться, что библиотеки BLAS Numpy доступны в виде динамически загружаемых библиотек? - PullRequest
22 голосов
/ 22 июля 2011

В документации по установке theano указано, что theano будет по умолчанию использовать библиотеки BLAS из numpy, если "библиотеки BLAS доступны как динамически загружаемые библиотеки".Похоже, что это не работает на моем компьютере, см. Сообщение об ошибке.

  • Как мне узнать, доступны ли библиотеки nummy BLAS как динамически загружаемые?
  • Как мнеперекомпилировать numpy библиотеки BLAS, если они не загружаются динамически?

Укажите, если вам потребуется дополнительная информация!

Сообщение об ошибке

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

Приложение

Библиотека theano помимо прочего нуждается в numpy и библиотеке BLAS.Я полагал, что numpy поставляется с BLAS, если вы устанавливаете его с sudo apt-get install python-numpy python-scipy под Ubuntu.

Это список файлов /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

Это вывод distutils.__config__.show() выглядит следующим образом

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

Ответы [ 5 ]

12 голосов
/ 07 ноября 2013

После загрузки дистрибутива Anaconda библиотек Python я только что столкнулся с той же проблемой в 64-битной Ubuntu 12.04 LTS. Об этом позаботился указатель Theano на каталог, содержащий libblas.so.

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

3 голосов
/ 16 сентября 2011

В ubuntu в менеджере пакетов libblas.so поставляется с пакетом libblas3gf. Если каким-то образом он не создает libblas.so, но создает libblas.so.X, вручную создайте символическую ссылку, например:

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

NB. Для меня это работает нормально, но прочитайте комментарий ниже. И имейте в виду, что этот пакет не будет оптимизирован для вашего конкретного оборудования (см., Например, другие ответы, которые предлагают ATLAS).

2 голосов
/ 16 сентября 2011

В вашем случае вы должны заглянуть в /usr/lib64 и посмотреть, доступны ли libblas и т. Д. В виде .so или .so.X файлов.

Перекомпиляция BLAS не тривиальна, но вы можете попробовать установить соответствующие пакеты ATLAS для вашего дистрибутива.

1 голос
/ 16 сентября 2011

Ваш главный вопрос, по сути, заключается в том, правильно ли устанавливаются зависимости у сопровождающих дистрибутивов, и для этого у меня нет ответа или решения.

Однако у меня есть рекомендация. ATLAS не очень сложно построить. Получите исходный код, распакуйте его, убедитесь, что вы удовлетворили его зависимости, затем начните шаги настройки и выполнения. Часть зависимости, вероятно, является самой трудоемкой ручной частью процесса.

Конечно, тогда вам придется заново связать NumPy, Theano и т. Д. Хотя я признаю, что это боль (поверьте мне, я прошел через нее и для Theano, и для Ханнеса Шульца и CSV Энди Мюллера), вы получаете выгоду от BLAS настроен для оптимальной работы на вашем оборудовании.

1 голос
/ 16 сентября 2011

Если установлена ​​последняя версия numpy, theano будет работать корректно во всех случаях.

Оттуда единственная причина, по которой следует заботиться об используемом бласе, - это скорость.Блаз по умолчанию очень медленный.Многие дистрибутивы снова компилируют numpy в этой медленной версии.

Простой / быстрый способ получить более быструю реализацию blas - это установить пакет дистрибутивов об атлас и атлас devel.Это оптимизированная реализация blas.

Более новая версия Unbuntu, установка atlas in done - это способ, которым numpy начнет его использовать.Так что нет необходимости что-либо менять на Theano по этому поводу.Я не знаю, делают ли это другие дистрибутивы.

Лучший способ проверить, насколько быстро работает Theano или нет, - это рассчитать время.Для этого запустите команду bash:

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

Затем сравните скорость, с которой он работал, с другим напечатанным результатом сравнения.

...