在默认conda numpy

时间:2015-12-17 00:45:31

标签: multithreading numpy anaconda blas conda

numpy的某些版本/版本具有某些操作的多线程执行。 StackOverflow上有很多关于如何启用此功能的问题。从理论上讲,它很棒。但是,我想禁用它。

原因是我在使用多处理进行并行化的脚本的上下文中运行了一些numpy代码。默认的numpy多线程看起来并不是很聪明"并且每个进程都会尝试使用我机器上的所有内核,如果我有多个进程在运行,它会快速超载。 (另外,这是一台共享机器,所以一般来说只是粗鲁的行为。)

我使用的numpy版本默认使用conda安装。以下是我最终得到的关于numpy版本的信息:

In [1]: import numpy

In [2]: numpy.__version__
Out[2]: '1.10.2'

In [3]: numpy.__config__.show()
lapack_opt_info:
    libraries = ['openblas']
    library_dirs = ['/home/mwaskom/anaconda/lib']
    define_macros = [('HAVE_CBLAS', None)]
    language = c
blas_opt_info:
    libraries = ['openblas']
    library_dirs = ['/home/mwaskom/anaconda/lib']
    define_macros = [('HAVE_CBLAS', None)]
    language = c
openblas_info:
    libraries = ['openblas']
    library_dirs = ['/home/mwaskom/anaconda/lib']
    define_macros = [('HAVE_CBLAS', None)]
    language = c
openblas_lapack_info:
    libraries = ['openblas']
    library_dirs = ['/home/mwaskom/anaconda/lib']
    define_macros = [('HAVE_CBLAS', None)]
    language = c
blas_mkl_info:
  NOT AVAILABLE

当numpy符合MKL时,可以使用环境变量控制线程数。这就是答案here。但是,使用MKL版本通过conda需要花钱(并且免费的学术选项似乎已经停止)。所以我需要知道如何控制上面显示的conda构建中的多线程行为。

理想情况下,会有一个环境变量,或者其他一些选项让我根据我正在做的事情选择要使用的线程数。或者,有没有办法使用conda来安装一个不会多线程的numpy版本?

1 个答案:

答案 0 :(得分:4)

事实证明,多线程是通过OPENBLAS_NUM_THREADS环境变量控制的,因此将其设置为1会使事物保持连续。