Как убедиться, что библиотеки BLAS numpy доступны в виде динамически загружаемых библиотек?
документация по установке anano утверждает, что theano будет по умолчанию использовать библиотеки BLAS из numpy, если "библиотеки BLAS доступны в виде динамически загружаемых библиотек". Это, похоже, не работает на моей машине, см. Сообщение об ошибке.
- Как узнать, могут ли библиотеки numys BLAS быть динамически загружаемыми?
- Как перекомпилировать библиотеки BLAS с numpy, если они не являются динамически загружаемыми?
Просьба указать, если вам нужна дополнительная информация!
Сообщение об ошибке
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
Ответы
Ответ 1
После загрузки дистрибутива библиотек Anaconda из библиотеки python я столкнулся с той же проблемой на 64-битной версии Ubuntu 12.04 LTS. Указание Theano на каталог, содержащий libblas.so, позаботился об этом.
$ THEANO_FLAGS=blas.ldflags="-L/usr/lib/ -lblas" python rbm.py
Ответ 2
С ubuntu, в менеджере пакетов, libblas.so поставляется с пакетом libblas3gf.
Если каким-то образом он не создает libblas.so, но создает libblas.so.X, вручную создайте символическую ссылку вроде:
cd /usr/lib64
sudo ln -s libblas.so.3gf libblas.so
NB: Это отлично работает для меня, но прочитайте комментарий ниже. И имейте в виду, что этот пакет не будет оптимизирован для вашего конкретного оборудования (прочитайте другие ответы, которые предлагают ATLAS, например).
Ответ 3
В вашем случае вы должны посмотреть /usr/lib64
и посмотреть, доступны ли libblas
и т.д. в виде файлов .so
или .so.X
.
Повторная компиляция BLAS не является тривиальной, но вы можете попробовать установить соответствующие пакеты ATLAS для своего распространения.
Ответ 4
Если установлена последняя версия numpy, установленная достаточно, theano будет работать правильно во всех случаях.
Оттуда единственная причина, по которой нужно заботиться о бласах, - это скорость. Блаз по умолчанию очень медленный. Многие distro компилируют numpy снова эту медленную версию blas.
Легкий/быстрый способ ускорить внедрение blas - установить дистрибутив на атлас и атлас devel. Это оптимизированная реализация blas.
Более новая версия Unbuntu, установка атласа в готовом виде - это способ, которым numpy начнет использовать его. Поэтому нет необходимости что-то менять на Theano. Я не знаю, сделает ли это другой дистрибутив.
Лучший способ проверить блавы, которые использует Anano быстро или нет, - это время. Для этого запустите это под bash:
Х = python -c "import theano;import os.path; print os.path.split(theano.__file__)[0]"
python ${X}/misc/check_blas.py
Затем сравните скорость, которую нужно выполнить, чтобы напечатать другой результат сравнения.
Ответ 5
Ваш основной вопрос по существу состоит в том, имеют ли поддерживающие дистрибутивы правильные установки или нет, и для этого у меня нет ответа или решения.
Однако у меня есть рекомендация. ATLAS не очень сложно построить. Получите исходный код, распакуйте, убедитесь, что вы удовлетворены его зависимостями, затем запустите настройку и выполните шаги. Часть зависимостей, вероятно, является самой трудоемкой ручной частью процесса.
Конечно, тогда вам нужно пережить numpy, theano и т.д. Хотя я понимаю, что это боль (поверьте, я прошел через нее как для Theano, так и для Hannes Shulz и Andy Mueller CSV), вы получите BLAS настроен для оптимальной работы на вашем оборудовании.