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
然后将运行速度与打印的其他比较结果进行比较。