不确定我的Python / numpy版本是否使用优化的BLAS / LAPACK库?

时间:2019-03-14 11:28:03

标签: python numpy anaconda lapack blas

我读过here,重要的是“确保numpy在系统上使用BLAS / LAPACK库的优化版本。”

当我输入时:

import numpy as np
np.__config__.show()

我得到以下结果:

blas_mkl_info:
  NOT AVAILABLE
blis_info:
  NOT AVAILABLE
openblas_info:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/home/anaconda3/lib']
    language = c
    define_macros = [('HAVE_CBLAS', None)]
blas_opt_info:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/home/anaconda3/lib']
    language = c
    define_macros = [('HAVE_CBLAS', None)]
lapack_mkl_info:
  NOT AVAILABLE
openblas_lapack_info:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/home/anaconda3/lib']
    language = c
    define_macros = [('HAVE_CBLAS', None)]
lapack_opt_info:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/home/anaconda3/lib']
    language = c
    define_macros = [('HAVE_CBLAS', None)]

这是否意味着我的numpy版本使用的是优化的BLAS / LAPACK库,如果没有,我如何设置numpy使其使用优化的版本?

2 个答案:

答案 0 :(得分:1)

种类。 OpenBLAS很好。我刚上了第一个链接,我可以在Google上找到“ OpenBLAS,ATLAS,MKL比较”。

http://markus-beuckelmann.de/blog/boosting-numpy-blas.html

现在,这还不是全部。根据所需要的算法,差异可能不会/会略有不同/相差很大。实际上,除了运行针对不同实现的链接的自己的代码外,没有什么可以做的。

在各种线性代数问题,SVD,Eig,实数和伪取反,因式分解...在不同操作系统上的单核/多核方面,我的平均偏爱:

MacOS:加速的框架(与OS一起提供) Linux / Windows:

  1. MKL
  2. 距离远,但仍然安静:ATLAS和OpenBLAS相当
  3. 即使在AMD处理器上,ACML始终令我感到失望

TLDR:您的设置很好。但是,如果您想从CPU / RAM /主板组合中挤出最后一滴血,则需要MKL。它当然带有相当大的价格标签,但是如果您得到的硬件回报是价格的一半,也许值得。而且,如果您编写了一个开源软件包,则可以出于开发目的免费使用MKL。

答案 1 :(得分:0)

要跟踪在MacOS上加载了哪些库,

export DYLD_PRINT_LIBRARIES  # see man dyld

并查看库xx.dylibxx.so会依次加载什么,

otool -L xx.dylib

(对不起,不了解其他平台)。


一个不同的问题是,这有关系吗? MacOS Accelerate,Openblas,MKL ...有何不同? 使用不同的用户问题,库, 编译器,多核,内存...是一个很高的要求。 有谁知道网络上的广泛测试平台?

另请参阅:
google openblas benchmark macos python: 31000 ...

numpy-site.cfg (由pip-> setup.py使用)提到了几种BLAS / LAPACK替代方案, 其中“尚未通过NumPy或SciPy进行基准测试”。

Numpy and scipy dropped support for Accelerate 在2018年。