python - 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 有多快。
现在我尝试使用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。
有 bench 函数(例如np.lib.bench()
or np.random.bench()
),但文档不是很清楚,我不明白如何使用它们。
总而言之,我的问题是(是的,2个问题,但它们密切相关,我不明白为什么应该将它们分开):
当我们关心性能时,依赖轮子(尤其是对于 Numpy)是一个好习惯吗?它会比使用(例如)conda 构建的 Numpy 慢吗?
是否有简单的命令来对 Numpy 安装进行基准测试并很好地了解它们的整体性能?
解决方案
这真的取决于你正在做什么样的数学。PyPI 上的 Wheels 是使用 OpenBLAS 构建的,而默认的 conda 包使用 MKL。两者之间的表现相当具有竞争力。英特尔最近在一些低级 numpy 的东西上做了更多的工作,conda 包将从中受益,而轮子目前不会。
我们最近运行了您可能感兴趣的基准测试:https ://www.anaconda.com/blog/developer-blog/improved-security-performance-in-anaconda-distribution-5/
推荐阅读
- angular - 如何使用 Angular 或 Django 制作可打印的报告(几个图表)
- ios - 如何在没有中间目录的画廊中编写视频?
- android - 将数据片段传递给活动时出错
- checksum - 什么是最“位高效”的错误检测方法?
- javascript - 使用复选框过滤带有 JSON 的元素
- javascript - 网页上多行文本的省略号 + 引号
- c# - C# - Signalr 客户端连接导致性能问题 Windows 服务
- python - 解析 Pandas 作为列表返回
- angular - Angular 中的 Firebase 身份验证
- webpack - 使用 webpack 提供 index.html 以外的服务