代码之家  ›  专栏  ›  技术社区  ›  paugier

Numpy车轮的效率和Numpy安装的简单基准

  •  1
  • paugier  · 技术社区  · 8 年前

    几个月(或几年?)五年前,我安装了一个小轮子,效率很低。因为,对于计算包,我避免使用轮子,而是更喜欢构建它们或使用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安装进行基准测试,并了解它们的整体性能?

    1 回复  |  直到 8 年前
        1
  •  1
  •   msarahan    8 年前

    这完全取决于你在做什么样的数学。PyPI上的控制盘是用OpenBLAS构建的,而默认的conda软件包使用MKL。两者之间的表现相当有竞争力。英特尔最近在一些低级numpy产品上做了更多的工作,康达软件包将从中受益,而轮子目前不会。

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