不使用Intel MKL/BLAS/ATLAS/LAPACK编译numpy

5
我正在使用 py2exe 将一个使用 numpy 的脚本转换,但生成的文件夹非常大,而且似乎很多大文件来自于我没有使用的 numpy 包的部分,比如 numpy.linalg
为了减小创建的文件夹的大小,我被告知应该编译没有 Intel MKL/BLAS/ATLAS/LAPACK 的 numpy
我该如何做出这个更改?
编辑 在 C:\Python27\Lib\site-packages\numpy\linalg 中,我找到了以下文件:_umath_linalg.pyd(34MB)和 lapack_lite.pyd(18MB),当使用 py2exe 时,它们被复制到分发文件夹中。如果可能的话,我想删除对它们的依赖,同时仍然能够使用 numpy 数组。另一个大文件包含在 C:\Python27\Lib\site-packages\numpy\core 中,名为 _dotblas.pyd(12MB)。是否也可以将其删除?
1个回答

9

根据官方文档

Disabling ATLAS and other accelerated libraries

Usage of ATLAS and other accelerated libraries in Numpy can be disabled via:

  BLAS=None LAPACK=None ATLAS=None python setup.py build
然而,这些信息似乎已经过时,因为我发现即使使用这些选项,numpy v1.9.2 仍然可以自动找到 libopenblas.so:
numpy_source_dir/$ BLAS=None LAPACK=None ATLAS=None python setup.py config
...
openblas_info:
  FOUND:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/opt/OpenBLAS/lib']
    language = f77

  FOUND:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/opt/OpenBLAS/lib']
    language = f77
...

一种解决方法是将site.cfg.example复制到site.cfg,然后编辑它使得与相关的BLAS/LAPACK库的路径无效:

[openblas]
libraries =
library_dirs =
include_dirs =

当您随后调用 BLAS=None LAPACK=None ATLAS=None python setup.py config 时,您应该得到包含以下内容的输出:
...
openblas_info:
/home/alistair/src/python/numpy/numpy/distutils/system_info.py:594: UserWarning: Specified path  is invalid.
  warnings.warn('Specified path %s is invalid.' % d)
  libraries  not found in []
  NOT AVAILABLE
...

我认为这种方法也适用于ATLAS和MKL,虽然我没有安装这些库来进行适当的测试。

当然,您应该知道,没有加速的BLAS / LAPACK库将对线性代数运算的性能产生巨大的不利影响。


更新

如下评论所述,您实际上并没有"编译"当前版本的numpy,而是从二进制分发中安装的。我给出的方法需要您从源代码构建numpy,在Windows中这并不容易(尽管官方有说明here)。

一个更简单的选项是从Christoph Gohlke网站here安装其中一个未经优化的numpy二进制文件。


很抱歉,我已经看过文档了,但是当它说可以通过 BLAS=None LAPACK=None ATLAS=None python setup.py build 禁用时,我甚至不知道它的含义 - 我以为这意味着在命令行中输入它,但那并没有起作用。另外,我在哪里可以找到 site.cfg.example?我根本不使用任何线性代数模块,只使用数组,我想这不会受到影响(至少不会太多吧?)。 - Siwel
setup.pysite.cfg.example是numpy源代码目录中的文件。您使用的是哪个平台?您目前是如何构建numpy的? - ali_m
是的,你需要。更重要的是:你最初是如何安装numpy的? 鉴于你使用的是Windows,我敢打赌你可能使用了.exe安装程序。然而,为了在没有BLAS/LAPACK的情况下重新构建numpy(如我的答案所示),你需要能够从源代码编译numpy。这在Windows中并不容易(尽管有官方说明在这里)。 - ali_m
1
你最好的选择可能是从Christoph Gohlke提供的未优化二进制文件之一重新安装numpy 这里 - ali_m
我认为我使用了优化后的二进制文件。如果没有简单的方法在不同的名称下安装它,我可能会接受更大的文件大小,直到我有时间删除numpy依赖项,因为我将来可能想要使用线性代数操作。感谢您的解释。 - Siwel
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接