找出 Numpy 是否/使用哪个 BLAS 库

新手上路,请多包涵

我在不同的环境(MacOS、Ubuntu、RedHat)中使用 numpy 和 scipy。通常我使用可用的包管理器(例如,mac ports、apt、yum)来安装 numpy。

但是,如果您不手动编译 Numpy,如何确定它使用 BLAS 库?使用 mac 端口,ATLAS 作为依赖项安装。但是,我不确定它是否真的被使用过。当我执行一个简单的基准测试时, numpy.dot() 函数需要大约。时间是使用 Eigen C++ 库计算的点积的 2 倍。我不确定这是否是一个合理的结果。

原文由 Apoptose 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

numpy.show_config() 并不总是提供可靠的信息。例如,如果我在 Ubuntu 14.04 上 apt-get install python-numpy ,则 np.show_config() 的输出如下所示:

 blas_info:
    libraries = ['blas']
    library_dirs = ['/usr/lib']
    language = f77
lapack_info:
    libraries = ['lapack']
    library_dirs = ['/usr/lib']
    language = f77
atlas_threads_info:
  NOT AVAILABLE
blas_opt_info:
    libraries = ['blas']
    library_dirs = ['/usr/lib']
    language = f77
    define_macros = [('NO_ATLAS_INFO', 1)]
atlas_blas_threads_info:
  NOT AVAILABLE
openblas_info:
  NOT AVAILABLE
lapack_opt_info:
    libraries = ['lapack', 'blas']
    library_dirs = ['/usr/lib']
    language = f77
    define_macros = [('NO_ATLAS_INFO', 1)]
...

看起来 numpy 正在使用标准 CBLAS 库。但是,我知道 numpy 正在使用 OpenBLAS,这是我通过 libopenblas-dev 包安装的。


检查 *nix 的最明确方法是使用 ldd 找出在运行时针对哪些共享库 numpy 链接(我没有 Mac,但我认为您可以使用 otool -L 代替 ldd )。

  • 对于早于 v1.10 的 numpy 版本:
   ~$ ldd /<path_to_site-packages>/numpy/core/_dotblas.so

如果 _dotblas.so 不存在,这可能意味着 numpy 在最初编译时未能检测到任何 BLAS 库,在这种情况下,它根本不会构建任何与 BLAS 相关的组件。

  • 对于 numpy v1.10 及更高版本:

_dotblas.so 已被删除,但您可以检查 multiarray.so 的依赖关系:

   ~$ ldd /<path_to_site-packages>/numpy/core/multiarray.so


查看我通过 apt-get 安装的 numpy 版本:

 ~$ ldd /usr/lib/python2.7/dist-packages/numpy/core/_dotblas.so
    linux-vdso.so.1 =>  (0x00007fff12db8000)
    libblas.so.3 => /usr/lib/libblas.so.3 (0x00007fce7b028000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fce7ac60000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fce7a958000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fce7a738000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fce7ca40000)

/usr/lib/libblas.so.3 实际上是符号链接链的开始。如果我使用 readlink -e 跟随他们到达最终目标,我看到他们指向我的 OpenBLAS 共享库:

 ~$ readlink -e /usr/lib/libblas.so.3
/usr/lib/openblas-base/libblas.so.3

原文由 ali_m 发布,翻译遵循 CC BY-SA 3.0 许可协议

numpy.show_config() 只是告诉我的信息在我的 Debian Linux 上不可用。

但是 /usr/lib/python3/dist-packages/scipy/lib 有一个 blas 的子目录,它可能会告诉你你想要什么。在子目录测试中有几个 BLAS 测试程序。

希望这可以帮助。

原文由 Jorgen 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏