正确的方法指向ATLAS/BLAS/LAPACK库用于numpy构建?

7

我正在CentOS 6.5上构建源代码中的numpy,没有root权限(python -V=2.7.6)。我从git获取了最新的numpy源代码。但我无法让numpy承认atlas库。我已经:

ls -1 /usr/lib64/atlas

libatlas.so.3
libatlas.so.3.0
libcblas.so.3
libcblas.so.3.0
libclapack.so.3
libclapack.so.3.0
libf77blas.so.3
libf77blas.so.3.0
liblapack.so.3
liblapack.so.3.0
libptcblas.so.3
libptcblas.so.3.0
libptf77blas.so.3
libptf77blas.so.3.0

我不知道这些库是如何产生的,但我可以假设 atlas 构建速度比我能制作的任何标准 BLAS/LAPACK 构建速度都要快。
正确的方法是什么?我应该将 numpy 指向这些库吗?我需要设置每个对应路径的 ATLAS、BLAS 和 LAPACK 吗?还是我需要编辑一个 site.cfg 文件,将其包含类似以下内容:
[default]
library_dirs = /usr/lib64/atlas

[atlas]
library_dirs = /usr/lib64/atlas
atlas_libs = lapack, cblas, f77blas, atlas

我尝试了上述的各种变化,每次运行python setup.py config时,它告诉我无法在我指定的路径以及一些其他默认搜索路径中找到每个库。我已经将运行python setup.py config的结果与上面的site.cfg以及没有设置环境变量的情况粘贴在这里:http://pastebin.com/EL9CfaR7。任何帮助都将不胜感激。
1个回答

8

好的,这个很简单,基本上就是按照安装指南进行操作。我想这更多是关于共享库后面编号的问题,而不是关于numpy或atlas的问题。无论如何,我只需要创建一些符号链接:

ln -s /usr/lib64/atlas/___.so.3.0 $HOME/local/lib/___.so

然后删除了site.cfg中的所有配置,并更新了我的.bashrc文件:

export ATLAS=$HOME/local/lib/libatlas.so
export BLAS=$HOME/local/lib/libptf77blas.so
export LAPACK=$HOME/local/lib/liblapack.so

运行python setup.py install后,一切就妥当了:
>>> import numpy.distutils.system_info as si
>>> si.get_info('atlas')
    ATLAS version 3.8.4 built by mockbuild on Wed Mar 21 01:43:44 GMT 2012:
   UNAME    : Linux c6b6.bsys.dev.centos.org 2.6.32-44.2.el6.x86_64 #1 SMP Wed Jul 21 12:48:32 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux
   INSTFLG  : -1 0 -a 1
   ARCHDEFS : -DATL_OS_Linux -DATL_ARCH_PII -DATL_CPUMHZ=2261 -DATL_SSE2 -DATL_SSE1 -DATL_USE64BITS -DATL_GAS_x8664
   F2CDEFS  : -DAdd_ -DF77_INTEGER=int -DStringSunStyle
   CACHEEDGE: 163840
   F77      : gfortran, version GNU Fortran (GCC) 4.4.6 20110731 (Red Hat 4.4.6-3)
   F77FLAGS : -fomit-frame-pointer -mfpmath=387 -O2 -falign-loops=4 -g -Wa,--noexecstack -fPIC -m64
   SMC      : gcc, version gcc (GCC) 4.4.6 20110731 (Red Hat 4.4.6-3)
   SMCFLAGS : -fomit-frame-pointer -mfpmath=387 -O2 -falign-loops=4 -g -Wa,--noexecstack -fPIC -m64
   SKC      : gcc, version gcc (GCC) 4.4.6 20110731 (Red Hat 4.4.6-3)
   SKCFLAGS : -fomit-frame-pointer -mfpmath=387 -O2 -falign-loops=4 -g -Wa,--noexecstack -fPIC -m64
{'libraries': ['lapack', 'f77blas', 'cblas', 'atlas'], 'library_dirs': ['~/local/lib'], 'define_macros': [('ATLAS_INFO', '"\\"3.8.4\\""')], 'language': 'f77'}

这似乎非常复杂。你尝试过使用virtualenv吗?你可以在家目录中拥有完整的Python堆栈,因此无需为任何事情获取root访问权限。然后你可以使用pip来完成所有操作。 - Davidmh
我不熟悉virtualenv,但是从简单浏览它的功能来看,我不确定它是否有用。我已经在本地安装了Python / Numpy / Scipy(虽然现在遇到了其他问题)。我并不想安装多个版本的Numpy - 我只是告诉它使用特定的Atlas库版本,这个版本应该是针对我正在运行的架构进行了优化。 - Matt Hancock
(是的,我知道这很老)你需要安装-devel包。由于你没有root权限,无法进行安装,但你应该向管理员提出请求。-devel包含头文件和.so符号链接。 - Rich Homolka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接