如何确保numpy BLAS库可用作可动态加载的库?

时间:2011-07-22 11:33:55

标签: linux numpy shared-libraries blas atlas

theano installation documentation状态,theano默认使用numpy中的BLAS库,如果“BLAS库可用作可动态加载的库”。这似乎不适用于我的机器,请参阅错误消息。

  • 我如何知道numpy 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库。如果你在Ubuntu下用sudo apt-get install python-numpy python-scipy安装它,我认为numpy带有BLAS。

这是/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 个答案:

答案 0 :(得分:12)

下载了Anaconda的python库发行版之后,我刚刚在Ubuntu 12.04 LTS 64位上遇到了同样的问题。将Theano指向包含libblas.so的目录进行处理。

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

答案 1 :(得分:3)

使用ubuntu,在包管理器中,libblas.so附带了libblas3gf包。 如果以某种方式它不创建libblas.so,但创建libblas.so.X,手动创建一个符号链接,如:

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

注意:这对我来说一直很好,但请阅读下面的评论。请记住,此软件包不会针对您的特定硬件进行优化(例如,请阅读建议使用ATLAS的其他答案)。

答案 2 :(得分:2)

在您的情况下,您应该查看/usr/lib64并查看libblas.so.so.X文件是否可用。

重新编译BLAS并非易事,但您可以尝试为您的发行版安装相关的ATLAS软件包。

答案 3 :(得分:1)

如果安装了最新的numpy版本,theano将在所有情况下正常工作。

从那里开始,关心blas的唯一理由是关于速度。默认blas非常慢。许多发行版再次编译numpy这个慢速blas版本。

一个简单/快速的方法来实现更快的blas实现是安装有关atlas和atlas devel的发行版包。这是一个优化的blas实现。

较新版本的Unbuntu,在完成中安装atlas是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

然后将打印所用的速度与打印的其他比较结果进行比较。

答案 4 :(得分:1)

你的主要问题基本上是发行版维护者是否正确安装了依赖项 - 而且我没有答案或解决方案。

但是,我确实有建议。 ATLAS不是很难建立。获取源代码,解压缩,确保您已满足其依赖关系,然后启动配置&做出步骤。依赖性部分可能是该过程中耗时最多的手动部分。

当然,你必须重新考虑numpy,theano等。虽然我认识到这是一种痛苦(相信我,我经历了Theano和Hannes Shulz以及Andy Mueller的CSV),你获得的好处是BLAS经过调整,可在硬件上实现最佳运行。