Numpy 链接 ATLAS/MKL 到已安装的 Numpy
阅读更多:Numpy 教程
前言
Numpy 是针对 Python 语言的一个重要计算库,它提供了高效、灵活的便携式数据结构,支持大型多维数组和矩阵计算,更重要的是,它是科学计算领域最为重要的组件之一。
然而,对于大规模数组计算任务来说,Numpy 的性能仍然有待提升。例如:一般情况下,通常用于 Numpy 的 BLAS 和 LAPACK 库都不是特别优化的,不能够发掘运行高性能代码所需的所有资源。
因此,本文将介绍如何通过链接 ATLAS 或者 MKL 库到已安装的 Numpy 实现提高计算性能。
步骤一:检测库是否已安装
在安装 ATLAS 或者 MKL 之前,需要确定当前系统是否已经安装了相应的库。
检测 ATLAS 是否已安装
执行以下命令检查系统是否安装了 ATLAS:
$ ldd `python -c 'import numpy;print(numpy.__file__)'`|grep atlas
如果 ATLAS 在运行库中出现,那么说明系统中已经安装了 ATLAS:
libatlas.so.3 => /usr/lib64/atlas/libatlas.so.3 (0x00007f7d0537d000)
否则,需要先安装 ATLAS 库。
检测 MKL 是否已安装
执行以下命令检查系统是否安装了 MKL:
$ ldd `python -c 'import numpy;print(numpy.__file__)'`|grep mkl
如果 MKL 在运行库中出现,那么说明系统中已经安装了 MKL:
libmkl_rt.so => /usr/lib64/libmkl_rt.so (0x00007f7d0537d000)
否则,需要先安装 MKL 库。
步骤二:安装 ATLAS/MKL 库
安装 ATLAS 库
对于 Ubuntu 18.04 系统,可通过以下命令安装 ATLAS 库:
$ sudo apt-get install libatlas3-base
对于其他的系统,可以通过源代码进行安装,喜欢折腾的朋友可以到官网找到适合自己系统的源代码进行编译安装。
安装 MKL 库
进入 intel 的下载页面,下载合适的 MKL 库文件,可以参考下面的链接:
https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/onemkl.html
然后执行以下安装命令进行安装:
$ sudo /bin/sh install.sh
安装完毕之后,需要连接库到 Python,才能够让 Numpy 使用到 MKL 库。
$ echo "export LD_PRELOAD=$MKLROOT/lib/intel64/libmkl_core.so:$MKLROOT/lib/intel64/libmkl_sequential.so:$MKLROOT/lib/intel64/libmkl_intel_lp64.so" >>~/.bashrc
$ source ~/.bashrc
步骤三:重新编译 Numpy
现在,我们需要重新编译 Numpy 以便让它链接到 ATLAS / MKL 库。
编译 Numpy 链接 ATLAS
$ sudo pip uninstall numpy
$ sudo apt-get install gfortran libopenblas-dev liblapack-dev libblas-dev
$ sudo pip install numpy --no-binary :all: -v
在编译 Numpy 命令时,--no-binary :all:
选项会强制重新编译 Numpy。
其中,
gfortran
是 Fortran 编译器;liblapack-dev
是基于 Fortran 的 LAPACK库;libopenblas-dev
是用于 BLAS 库的开发库;libblas-dev
是 C 语言的基于 BLAS 库的开发库。
编译 Numpy 链接 MKL
$ sudo pip uninstall numpy
$ sudo apt-get install gfortran libopenblas-dev liblapack-dev libblas-dev
$ sudo pip install numpy scipy mkl-service --no-binary :all: -v
由于 MKL 是基于 Fortran 编写的,因此我们需要安装 Fortran 编译器(gfortran
)。此外,为了能够编译 MKL,我们还需要安装 LAPACK 和 BLAS 库。
mkl-service
库是用来链接 MKL 的。
总结
通过本文我们了解了链接 ATLAS / MKL 库到已安装的 Numpy 中提高计算性能的方法。
需要注意的是,在执行此操作之前,最好备份您的环境以便出现问题时可以还原。此外,还可能需要花费一些时间来调整您的代码以更好地利用这些库。