看来,计算速度会根据用于Numpy的BLAS而变化[Python]

2019年6月4日

在“ numpy”中,称为BLAS的数值计算库负责实际处理。

使用的BLAS取决于您是否使用“ conda install”或“ pip install”安装numpy,并且取决于您使用的BLAS,处理速度不仅会受到numpy的影响,还会受到依赖于numpy的库的影响。

这次,我将介绍BLAS和实际速度差,以及如何检查您使用的是哪个BLAS。

BLAS及其类型

什么是BLAS?

关于BLAS,以下站点上的解释非常容易理解,因此我将引用它。

BLAS是基本线性代数子程序的缩写。坦率地说,它是一个基本的线性运算库,或者简单地说,是一组执行矩阵和向量的基本计算的函数。例如,矩阵乘法,向量范数计算等。这个想法是停止实施这些计算(重新发明轮子),并使用该库进行高效的编码。

易于使用的BLAS

由于BLAS也在numpy后面使用,因此据说计算时间会有所不同,具体取决于执行numpy时调用哪个BLAS。

BLAS类型

已经开发了各种类型的BLAS。让我们看一些典型的例子。

开放式BLAS

BLAS的开源实现。在安装了pip的numpy中,在内部调用OpenBLAS来执行操作。
它与各种CPU兼容,并且据说可以为Intel的Sandy Bridge CPU提供与Intel MKL相同的速度。众所周知,它具有多线程功能,并且内核数似乎与加速成正比。

英特尔MKL(英特尔数学内核库)

英特尔开发的BLAS。 仅支持Intel CPU,不能与其他公司制造的CPU一起使用。 由于它针对Xeon,Core i系列和Atom等Intel CPU进行了优化,因此使用Intel MKL作为使用这些CPU的计算机上的算术库更快。英特尔MKL用于通过Anaconda或Miniconda的“ conda install”安装的numpy。

ATLAS(自动调整的线性代数软件)

免费的BLAS之一。顾名思义,调整为要安装的硬件设置了最佳参数,并实现了高速计算。

由于BLAS的差异而导致计算时间的差异

numpy后面使用的BLAS会影响处理速度,这意味着它与依赖numpy的库的执行速度有关。换句话说,它也会影响scipy,pandas,scikit-learn和tensorflow。

许多技术人员正在比较BLAS差异(conda安装和pip安装之间的差异)的基准,但以在英特尔®开发人员专区中发布的基准为例。
通过scipy进行的矩阵计算显示了向右移动复杂矩阵所需的时间,而intel MKL的处理速度比ATLAS更快。

英特尔MKL和ATLAS中通过scipy进行矩阵计算的比较
英特尔MKL和ATLAS中通过scipy进行矩阵计算的比较
引用自:https://software.intel.com/en-us/articles/numpyscipy-with-intel-mkl/

以下是Anaconda官方提供的信息。 我们将每个深度学习模型中每秒训练的图像数量与通过conda安装或pip安装安装的tensorflow进行比较,两者的差异最大为1倍。

每个深度学习模型中的pip(OpenBLAS)和conda(intel MKL)之间的差异
每个深度学习模型中的pip(OpenBLAS)和conda(intel MKL)之间的差异
(Cpu是Intel®Xeon®Gold 6130)
引用自:https://www.anaconda.com/tensorflow-in-anaconda/

其他比较包括 pandas 和 scikit learn(英特尔与 Anaconda 与 vanilla Python 的性能——我的个人基准)。 由于 conda 有自己的库安装和管理,在很多情况下似乎是一个有利的结果。

如何在Python中检查BLAS

__config__.show()赶紧跑。

将numpy导入为np np .__ config __。show()

>>
mkl_info:库= ['mkl_rt'] library_dirs = ['C:/用户/'] define_macros = [('SCIPY_MKL_H',无),('HAVE_CBLAS',无)] include_dirs = ['C:\\程序文件( 'C:\\ Program Files('x86)\\ IntelSWTools \\ Compilers_and_libraries_2019.0.117 \\ windows \\ mkl','C:\\ Program Files(x86)\\ IntelSWTools \\ Compilers_and_libraries_2019.0.117 \\ windows \\ mkl \\ include','C:\\程序文件(x86)\\ IntelSWTools \\ Compilers_and_libraries_2019.0.117 \\ Windows \\ mkl \\ lib','C:/用户/编程/ Miniconda3 / envs / ML \\库\\包含']

如果显示mkl_info,则使用intel MKL。