Disable/configure 默认 conda numpy 中的多线程
Disable/configure multithreading in default conda numpy
某些versions/builds numpy 的某些操作具有多线程执行。 Whosebug 上有很多关于如何启用此功能的问题。从理论上讲,它很棒。但是,我想禁用它。
原因是我 运行 在使用多处理进行并行化的脚本上下文中使用一些 numpy 代码。默认的 numpy 多线程似乎不是很 "smart",并且每个进程都会尝试使用我机器上的所有内核,如果我有多个进程 运行,这会很快使事情过载。 (另外,这是一台共享机器,所以一般都是粗鲁的行为)。
我使用的 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。但是,通过 conda
使用 MKL
构建需要花费金钱(而且免费的学术选项似乎已经停止)。所以我需要知道如何控制上面显示的 conda 构建中的多线程行为。
理想情况下,会有一个环境变量或其他一些选项,让我 select 根据我正在做的事情使用线程数。或者,有没有办法使用 conda 安装不会多线程的 numpy 版本?
事实证明,多线程是通过 OPENBLAS_NUM_THREADS
环境变量控制的,因此将其设置为 1
将使事情保持串行。
某些versions/builds numpy 的某些操作具有多线程执行。 Whosebug 上有很多关于如何启用此功能的问题。从理论上讲,它很棒。但是,我想禁用它。
原因是我 运行 在使用多处理进行并行化的脚本上下文中使用一些 numpy 代码。默认的 numpy 多线程似乎不是很 "smart",并且每个进程都会尝试使用我机器上的所有内核,如果我有多个进程 运行,这会很快使事情过载。 (另外,这是一台共享机器,所以一般都是粗鲁的行为)。
我使用的 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。但是,通过 conda
使用 MKL
构建需要花费金钱(而且免费的学术选项似乎已经停止)。所以我需要知道如何控制上面显示的 conda 构建中的多线程行为。
理想情况下,会有一个环境变量或其他一些选项,让我 select 根据我正在做的事情使用线程数。或者,有没有办法使用 conda 安装不会多线程的 numpy 版本?
事实证明,多线程是通过 OPENBLAS_NUM_THREADS
环境变量控制的,因此将其设置为 1
将使事情保持串行。