我在 Windows 11 上设置了 WSL2(使用默认的 Ubuntu 发行版),并通过 apt 安装了 Numpy,以及sudo apt install python3-numpy
(和许多其他依赖项)。在 WSL2 下测试 Numpy 的性能时,它的速度慢了约 50 倍。这只是一个使用点积的简单测试(下面的代码,改编自马库斯·贝克尔曼),但根据我在网上看到的内容,这种情况根本不应该发生。随着矩阵越来越大,迭代次数越来越多,情况会变得越来越糟。
我在网上没有发现任何人抱怨此类性能问题;有些人甚至说 WSL2 运行速度比 Windows 更快(!)。我的 WSL2 安装可能存在什么问题?
np.random.seed(0)
size = 1000
A, B = np.random.random((size, size)), np.random.random((size, size))
# Matrix multiplication
N = 5
t = time()
for i in range(N):
np.dot(A, B)
delta = time() - t
print('Dotted two %dx%d matrices in %0.5f s.' % (size, size, delta / N))
del A, B
原生 Windows:~0.01 秒
WSL2:~0.57 秒
答案1
我发现了问题:我没有安装英特尔的 MKL 库来加速低级线性代数运算(BLAS 和 LAPACK)。它们在 Anaconda 安装中已预先配置,我在 Windows 上使用的是 Anaconda。要解决这个问题,要么安装 Anaconda在 WSL2 上(这样它就成为你的默认 Python 环境)或者使用以下命令安装 Intel MKL 的库(并在安装过程中询问时让它们替换 BLAS 和 LAPACK 库):
sudo apt install libmkl-dev
WSL2 中 Numpy 的性能下降现在约为 10%(在某些情况下甚至更少),这对我来说是可以接受的。