首页 > 解决方案 > Numpy 轮子的效率和 Numpy 安装的简单基准

问题描述

几个月(或几年?)前,我安装了一个效率非常低的 Numpy 轮子。因为,我避免使用计算包的轮子,而是更喜欢构建它们或使用 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 有多快。

现在我尝试使用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。

有 bench 函数(例如np.lib.bench()or np.random.bench()),但文档不是很清楚,我不明白如何使用它们。

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

标签: pythonnumpy

解决方案


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

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


推荐阅读