如何在 numpy Python 中启用和禁用英特尔 MKL?
How to enable and disable Intel MKL in numpy Python?
我想测试和比较使用英特尔 MKL 和不使用英特尔 MKL 的 Numpy 矩阵乘法和特征分解性能。
我使用 pip install mkl
(Windows 10(64 位),Python 3.8)安装了 MKL。
然后我使用 here 中的示例进行 matmul 和特征分解。
我现在如何启用和禁用 MKL,以便在使用和不使用 MKL 时检查 numpy 性能?
参考代码:
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)
您可以使用不同的环境来比较有无 MKL 的 Numpy。在每个环境中,您都可以使用包安装程序安装所需的包(带或不带 MKL 的 numpy)。然后在该环境中,您可以 运行 您的程序来比较使用和不使用 MKL 时 Numpy 的性能。
NumPy 不依赖于任何其他 Python 包,但是,它确实依赖于加速线性代数库 - 通常是 Intel MKL 或 OpenBLAS。
PyPI 上的 NumPy wheels,即 pip 安装的,是用 OpenBLAS 构建的。
在 conda 默认通道中,NumPy 是针对 Intel MKL 构建的。 MKL 是一个单独的包,将在用户安装 NumPy 时安装在用户环境中。
当用户从 conda-forge 安装 NumPy 时,该 BLAS 包将与实际的 library.But 一起安装,它也可以是 MKL(来自默认频道),甚至是 BLIS或参考 BLAS。
请参考this link了解安装Numpy的详细信息。
您可以创建两个不同的环境来比较使用 MKL 和不使用 MKL 的 NumPy 性能。第一个环境安装独立的NumPy(即没有MKL的NumPy),第二个环境安装有MKL的。
在没有 MKL 的情况下使用 NumPy 创建环境。
conda create -n <env_name_1> python=<version>
conda activate <env_name_1>
pip install numpy
但根据您的 OS,可能没有可用的分配 (Windows)。
在 Windows 上,我们一直在 link 对抗 MKL。但是,随着 Anaconda 2.5 的发布,我们将 MKL 运行time 分离到它自己的 conda 包中,以便在所有平台上统一执行操作。
一般来说你可以创建一个新的环境:
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
在 和 这些环境中,您可以单独 运行 您的程序,以便您可以分别比较没有 MKL 和有 MKL 的 Numpy 的性能。
我想测试和比较使用英特尔 MKL 和不使用英特尔 MKL 的 Numpy 矩阵乘法和特征分解性能。
我使用 pip install mkl
(Windows 10(64 位),Python 3.8)安装了 MKL。
然后我使用 here 中的示例进行 matmul 和特征分解。
我现在如何启用和禁用 MKL,以便在使用和不使用 MKL 时检查 numpy 性能?
参考代码:
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)
您可以使用不同的环境来比较有无 MKL 的 Numpy。在每个环境中,您都可以使用包安装程序安装所需的包(带或不带 MKL 的 numpy)。然后在该环境中,您可以 运行 您的程序来比较使用和不使用 MKL 时 Numpy 的性能。
NumPy 不依赖于任何其他 Python 包,但是,它确实依赖于加速线性代数库 - 通常是 Intel MKL 或 OpenBLAS。
PyPI 上的 NumPy wheels,即 pip 安装的,是用 OpenBLAS 构建的。
在 conda 默认通道中,NumPy 是针对 Intel MKL 构建的。 MKL 是一个单独的包,将在用户安装 NumPy 时安装在用户环境中。
当用户从 conda-forge 安装 NumPy 时,该 BLAS 包将与实际的 library.But 一起安装,它也可以是 MKL(来自默认频道),甚至是 BLIS或参考 BLAS。
请参考this link了解安装Numpy的详细信息。
您可以创建两个不同的环境来比较使用 MKL 和不使用 MKL 的 NumPy 性能。第一个环境安装独立的NumPy(即没有MKL的NumPy),第二个环境安装有MKL的。
在没有 MKL 的情况下使用 NumPy 创建环境。
conda create -n <env_name_1> python=<version>
conda activate <env_name_1>
pip install numpy
但根据您的 OS,可能没有可用的分配 (Windows)。
在 Windows 上,我们一直在 link 对抗 MKL。但是,随着 Anaconda 2.5 的发布,我们将 MKL 运行time 分离到它自己的 conda 包中,以便在所有平台上统一执行操作。
一般来说你可以创建一个新的环境:
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
在