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



theano安装文档说明,如果"BLAS库作为可动态加载的库可用",theano将默认使用numpy中的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

下载了Anaconda发行版的python库后,我在Ubuntu 12.04 LTS 64位上遇到了同样的问题。将Theano指向包含libblas的目录。所以我照顾它。

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

对于ubuntu,在包管理器中,libblas。libblas3gf包也是如此。如果它不创建libblas。但是创建了libblass . So。X,手动创建一个符号链接,如:

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

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

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

重新编译BLAS并不简单,但是您可以尝试为您的发行版安装相关的ATLAS包。

你的主要问题本质上是发行版维护者是否正确安装了依赖项——对于这个问题,我没有答案或解决方案。

但是,我有一个建议。制造ATLAS并不难。获取源代码,解包,确保你已经满足了它的依赖,然后启动configure &制作步骤。依赖性部分可能是流程中最耗时的手动部分。

当然,然后你必须重新链接numpy, theano等。虽然我承认这是一种痛苦(相信我,我也经历过Theano和Hannes Shulz &;Andy Mueller的CSV),您获得的好处是BLAS经过调优,可以在您的硬件上最佳运行。

如果安装了最新的numpy版本,那么在任何情况下都可以正常工作。

从这里开始,关心所用blas的唯一原因就是速度。默认blas非常慢。许多发行版再次编译numpy这个缓慢的blas版本。

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

新版本的Unbuntu, atlas的安装是这样的,numpy将开始使用它。所以没有必要在Theano上对此进行任何更改。我不知道其他发行版是否这样做。

检查Theano使用的blas是否快的最好方法是计时。为此,在bash下运行:

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

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

最新更新