如何在numpy Python中启用或禁用Intel MKL?

6

我想要测试和比较Numpy矩阵乘法和Eigen分解在使用和未使用Intel MKL的性能。

我已经使用pip install mkl安装了MKL(Windows 10 (64-bit), Python 3.8)。

然后我使用这里的示例来进行矩阵乘法和Eigen分解。

我现在该如何启用和禁用MKL以便检查Numpy在使用MKL和不使用MKL时的性能?

参考代码:

import numpy as np
from time import time

def matrix_mul(size, n=100):
    # reference: https://markus-beuckelmann.de/blog/boosting-numpy-blas.html
    np.random.seed(112)
    a, b = np.random.random((size, size)), np.random.random((size, size))
    t = time()
    for _ in range(n):
        np.dot(a, b)
    delta = time() - t
    print('Dotted two matrices of size %dx%d in %0.4f ms.' % (size, size, delta / n * 1000))


def eigen_decomposition(size, n=10):
    np.random.seed(112)
    a = np.random.random((size, size))
    t = time()
    for _ in range(n):
        np.linalg.eig(a)
    delta = time() - t
    print('Eigen decomposition of size %dx%d in %0.4f ms.' % (size, size, delta / n * 1000))

#Obtaining computation times: 

for i in range(20): 
    eigen_decomposition(500)

for i in range(20): 
    matrix_mul(500)

1
我建议使用两个环境。一个连接了MKL的numpy环境,另一个则没有。当然,您也可以创建多个环境,以便与其他BLAS库进行比较。 - max9111
不确定这个可以在Windows上完成。还可以参考例如 https://dev59.com/9KTja4cB1Zd3GeqPA2T9,https://stackoverflow.com/q/34830050,https://dev59.com/TKXja4cB1Zd3GeqPW9Lv#46656407。 - djvg
1个回答

5
您可以使用不同的环境来比较带有和不带有MKL的Numpy。在每个环境中,您可以使用软件包安装程序安装所需的软件包(numpy带有MKL或没有)。然后在这些环境中,您可以运行程序来比较带有和不带有MKL的Numpy的性能。
NumPy不依赖于任何其他Python软件包,但它确实依赖于加速线性代数库 - 通常是Intel MKL或OpenBLAS。
  • PyPI上的NumPy wheels(pip安装的内容)是使用OpenBLAS构建的。

  • 在conda默认渠道中,NumPy是针对Intel MKL构建的。当用户安装NumPy时,MKL是将安装在用户环境中的单独软件包。

  • 当用户从conda-forge安装NumPy时,该BLAS软件包会与实际库一起安装。但它也可以是MKL(来自默认渠道),甚至是BLIS或参考BLAS。

请参阅this链接以了解详细的Numpy安装信息。

您可以创建两个不同的环境来比较使用MKL和不使用MKL时NumPy的性能。在第一个环境中安装独立的NumPy(即没有MKL的NumPy),在第二个环境中安装带有MKL的NumPy。 创建使用不带MKL的NumPy的环境。
conda create -n <env_name_1> python=<version>
conda activate <env_name_1>
pip install numpy

但根据您的操作系统,可能没有可用的发行版(Windows)。

在Windows上,我们一直在链接MKL。然而,随着Anaconda 2.5的发布,我们将MKL运行时分离成自己的conda包,以便在所有平台上统一处理。

通常情况下,您可以创建一个新的env:

conda create -n wheel_based python
activate wheel
pip install numpy-1.13.3-cp36-none-win_amd64.whl  # or whatever the file is named

在另一个环境中,使用以下命令安装带有MKL的NumPy。
conda create -n <env_name_2> python=<version>
conda activate <env_name_2>
pip install intel-numpy

在这些环境 <env_name_1> 和 <env_name_2> 中,您可以分别运行程序,以便比较 Numpy 在未安装 MKL 和已安装 MKL 时的性能差异。

2
这看起来像是从 numpy 文档 复制粘贴的内容... - djvg
不确定在使用Windows时是否有效:https://docs.anaconda.com/mkl-optimizations/#uninstalling-mkl 还请参阅 https://dev59.com/TKXja4cB1Zd3GeqPW9Lv,https://dev59.com/zafja4cB1Zd3GeqPy6Ry - djvg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接