几个月(或几年?)五年前,我安装了一个小轮子,效率很低。因为,对于计算包,我避免使用轮子,而是更喜欢构建它们或使用conda。
我所说的“非常低效”,是指使用这个轮子的代码比平常慢10倍左右。我猜这个Numpy没有正确使用系统(Debian)上安装的Blas和/或Lapack实现。看见
https://docs.scipy.org/doc/numpy/user/building.html
请注意,对于Linux,轮子是在旧的CentOS上构建的(
https://github.com/pypa/manylinux
).
但是,一般编译的Numpy(一个轮子)也可能比机器上编译的Numpy效率低,因为它没有使用以下选项进行编译:
march=native
,所以我猜它只使用最通用的处理器指令。
这就是为什么我认为当我们真正关心性能时,需要能够检查安装的Numpy有多快。
现在我试着用
pyenv
和
pipenv
,这似乎非常方便,但使用不带轮子的pipenv将非常缓慢和不方便。
我想知道Numpy(和其他计算包)的轮子有多高效。
请注意,我在Numpy和Scipy的安装页面中没有发现任何关于轮子效率的信息(
https://docs.scipy.org/doc/numpy/user/install.html
和
https://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()
)但是文档不是很清楚,我不知道如何使用它们。
总而言之,我的问题是(是的,有两个问题,但它们密切相关,我不明白为什么应该分开):
-
当我们关心性能时,依赖轮子(尤其是Numpy)是一种好的做法吗?它会比使用(例如)康达制造的Numpy慢吗?
-
是否有简单的命令来对Numpy安装进行基准测试,并了解它们的整体性能?