Numpy轮的效率和Numpy装置的简单基准

时间:2018-05-22 20:30:01

标签: python numpy

几个月(或几年?)之前,我安装了一个非常低效的Numpy轮。因为,我避免使用计算包的轮子,而是喜欢构建它们或使用conda。

“非常低效”,我的意思是使用这个轮子的代码比平常慢10倍。我想这个Numpy没有设法正确使用系统上安装的Blas和/或Lapack实现(Debian)。见https://docs.scipy.org/doc/numpy/user/building.html

请注意,对于Linux,轮子是在旧的CentOS(https://github.com/pypa/manylinux)上构建的。

但是一般编译的Numpy(一个轮子)也可能比在机器上编译的Numpy效率低,因为它没有使用像march=native这样的选项进行编译,所以我猜它只使用最通用的处理器指令。

这就是为什么我认为当我们真正关心性能时,需要能够检查安装Numpy的速度有多快。

现在我尝试使用pyenvpipenv,这看起来非常方便但是使用没有轮子的pipenv会非常缓慢和不方便。

我想知道Numpy(和其他计算软件包)的轮子有多高效。

请注意,我在Numpy和Scipy(https://docs.scipy.org/doc/numpy/user/install.htmlhttps://scipy.org/install.html#installing-via-pip)的安装页面中找不到轮子的效率

我也想知道如何为Numpy装置做准备。我可以使用非常简单的代码(如

)进行基准测试
import numpy as np
a = np.random.rand(1000)
%timeit a @ a

已经提出了一个好主意,但它只是对一个Numpy函数进行基准测试。

我没有发现任何非常简单的事情。例如,有https://github.com/numpy/numpy/tree/master/benchmarks,但需要下载Numpy源。我猜有些命令只使用已安装的Numpy。

有基准功能(例如np.lib.bench()np.random.bench()),但文档不太清楚,我不明白如何使用它们。

总结一下,我的问题是(是的,2个问题,但它们密切相关,我不明白为什么它们应该分开):

  • 当我们关心性能时,依靠车轮(尤其是Numpy)是一个好习惯吗?它会比使用(例如)conda构建的Numpy慢吗?

  • 是否有简单的命令来对Numpy安装进行基准测试并了解其整体性能?

1 个答案:

答案 0 :(得分:1)

这实际上取决于你正在做什么样的数学运算。 PyPI上的轮子是用OpenBLAS构建的,而默认的conda包是使用MKL。两者之间的表现具有相当的竞争力。英特尔最近在一些低级别的东西上做了更多的工作,而conda包将从中受益,而车轮目前不会。

我们最近运行了您可能感兴趣的基准测试:https://www.anaconda.com/blog/developer-blog/improved-security-performance-in-anaconda-distribution-5/