编译numpy没有英特尔MKL / BLAS / ATLAS / LAPACK

时间:2015-08-26 14:08:07

标签: python numpy py2exe lapack blas

我正在使用py2exe转换使用numpy的脚本并获得一个非常大的结果文件夹,似乎很多大文件来自numpy的部分内容我不使用的套餐,例如numpy.linalg

为了减少创建的文件夹的大小,我被认为应该在没有英特尔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 个答案:

答案 0 :(得分:6)

根据official documentation

  

禁用ATLAS和其他加速库

     

在Numpy中使用ATLAS和其他加速库可以   通过以下方式禁用:

  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提供的unoptimized numpy二进制文件之一。