【问题标题】:Correct way to point to ATLAS/BLAS/LAPACK libraries for numpy build?指向 ATLAS/BLAS/LAPACK 库以进行 numpy 构建的正确方法?
【发布时间】:2014-04-27 15:29:39
【问题描述】:

我正在 CentOS 6.5 上从源代码构建 numpy,没有 root 访问权限 (python -V=2.7.6)。我有来自 git 的最新 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 指向这些库的正确方法是什么?我 export 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。任何帮助表示赞赏。

【问题讨论】:

    标签: numpy lapack blas atlas


    【解决方案1】:

    好的,这很简单,基本上完全遵循安装指南。我想这更多的是关于共享库之后的编号的问题,而不是关于 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 做所有事情了。
    • 我对virtualenv不熟悉,但看了一眼,我不确定它是否有用。我已经在本地安装了(好吧——我遇到了其他一些问题)python/numpy/scipy。我不是要安装多个版本的 numpy - 只是告诉一个版本使用(我假设)针对我正在运行的架构优化的特定 atlas 库。
    • (是的,我知道这是旧的)您需要 -devel 包。由于您没有 root,因此无法安装它,但您应该要求您的管理员这样做。 -devel 包有头文件和 .so 符号链接
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    相关资源
    最近更新 更多