在默认conda-numpy中禁用/配置多线程



numpy的某些版本/构建具有某些操作的多线程执行。关于如何启用此功能,StackOverflow上有许多问题。理论上,这是伟大的。但是,我想禁用它。

原因是我在使用多处理进行并行化的脚本上下文中运行了一些numpy代码。默认的numpy多线程似乎不是很"智能",每个进程都会尝试使用我机器上的所有核心,如果我有多个进程在运行,这会很快过载。(而且,这是一台共享机器,所以一般来说这只是一种粗鲁的行为)。

我使用的是当前默认使用conda安装的numpy版本。以下是我最终使用的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时,线程的数量可以通过环境变量来控制。这就是答案。然而,通过conda使用MKL构建需要花钱(而且免费学术选项似乎已经停止)。因此,我需要知道如何在上面显示的conda构建中控制多线程行为。

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

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

相关内容

  • 没有找到相关文章

最新更新