如何使用ATLAS/MKL优化Numpy库的安装

如何使用ATLAS/MKL优化Numpy库的安装

Numpy是Python语言中一个很重要的科学计算库,被广泛应用于数据处理、科学计算和机器学习等领域。Numpy提供了许多高效的数组操作方法,能够让用户轻松地进行数据处理和计算。

Numpy库的安装通常是通过pip或conda等包管理器实现的,但是在安装的过程中,Numpy库会默认连接BLAS和LAPACK两个库来进行线性代数计算。但是这些库并不是CPU优化的,因此Numpy算法的性能并不能得到最佳发挥,为了解决这个问题,我们可以使用ATLAS/MKL这些优秀的数学库来替代默认的BLAS/LAPACK库,这样我们就可以进一步提升Numpy的性能。

在本文中,我们将介绍如何使用ATLAS/MKL优化Numpy库的安装。

阅读更多:Numpy 教程

安装ATLAS/MKL

在开始使用ATLAS/MKL来替代Numpy的默认库之前,我们首先需要安装ATLAS/MKL。

ATLAS

ATLAS是自动调节线性代数软件包的一种。它使用一个特殊的汇编程序生成工具,从而生成最优的CPU和系统特征的特定版本。ATLAS安装非常容易,只需要运行以下命令:

sudo apt-get install libatlas-base-dev
Python

MKL

MKL是英特尔公司发布的数学库,支持多个平台架构,不仅仅可以加速Numpy库,同时也支持OpenMP、CUDA等加速计算库。

若当前系统中缺失MKL,可以到英特尔官方网站上下载MKL并安装,也可以通过Anaconda进行安装。以下是通过Anaconda进行安装的命令:

conda install mkl
Python

Numpy与ATLAS/MKL的链接

安装ATLAS/MKL之后,我们就可以使用这些库来替代Numpy的默认BLAS/LAPACK库了。我们可以通过以下命令来查看Numpy默认链接的库:

import numpy as np

print(np.__config__.show())
Python

查看显示结果如下:

blas_mkl_info:
    NOT AVAILABLE
blis_info:
    NOT AVAILABLE
openblas_info:
    NOT AVAILABLE
lapack_mkl_info:
    NOT AVAILABLE
openblas_lapack_info:
    NOT AVAILABLE
lapack_opt_info:
    NOT AVAILABLE
lapack_info:
    NOT AVAILABLE
blas_opt_info:
    NOT AVAILABLE
b
Python

由于我们当前没有使用任何数学库来链接Numpy,因此以上结果显示默认链接的库都为“NOT AVAILABLE”。

现在我们可以使用以下命令来链接ATLAS/MKL库和Numpy:

import numpy.distutils.system_info as sysinfo

blas_info = sysinfo.get_info('blas')
if (blas_info) and ('NO_ATLAS_INFO' not in blas_info) and \ ('NO_ATLAS_PATH_INFO' not in blas_info):
    libraries = blas_info.get('libraries', [])
    if ('mkl_rt' in libraries) and ('pthread' in libraries):
        print('MKL found')
Python

如果上述代码输出“MKL found”,则说明MKL已经被成功链接到Numpy中。

测试性能

为了说明ATLAS/MKL可以提高Numpy线性代数算法的性能,我们可以通过如下代码来测试Numpy在使用默认BLAS/LAPACK库时和使用ATLAS/MKL库时的差异。

import numpy as np
import time

n = 2000

a = np.random.rand(n, n)
b = np.random.rand(n, n)

start = time.perf_counter()
c = np.matmul(a, b)
end = time.perf_counter()

print("Time elapsed without MKL:", end - start)

import mkl

mkl.set_num_threads(4)

start = time.perf_counter()
c = np.matmul(a, b)
end = time.perf_counter()

print("Time elapsed with MKL:", end - start)
Python

经过测试,我们可以看到,在使用MKL时,Numpy的性能有了数量级的提升。这也证明了ATLAS/MKL是很好的加速Numpy库性能的方法。

总结

本文介绍了如何使用ATLAS/MKL来替代Numpy的默认BLAS/LAPACK库来提升Numpy的性能。通过安装和链接ATLAS/MKL,我们可以大大提高Numpy库的性能。同时,我们也介绍了如何测试性能以证明ATLAS/MKL的优势。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册