【问题标题】:How do you stop numpy from multithreading? [duplicate]你如何阻止 numpy 多线程? [复制]
【发布时间】:2013-06-07 20:48:50
【问题描述】:

我必须在与部门其他人共享的计算服务器上定期运行作业,当我开始 10 个作业时,我真的希望它只占用 10 个内核而不是更多;我不在乎每次运行单个内核是否需要更长的时间:我只是不希望它侵占其他人的领土,这将需要我放弃工作等等。我只想拥有 10 个实心核心,仅此而已。

我在 Redhat 上使用 Enthought 7.3-1,它基于 Python 2.7.3 和 numpy 1.6.1,但问题更笼统。

【问题讨论】:

  • 我很确定 numpy 不做任何多线程,没有什么可以关掉的。
  • 为进程设置 cpu 亲和性
  • @WinstonEwert:不正确。在多核 cpu 上使用大型矩阵尝试 np.dot。它使用的库可能会使用多个 cpu
  • 非常感谢。现在我知道要搜索什么,我找到了另一个似乎回答了我的问题的页面:stackoverflow.com/questions/1575067/…

标签: python multithreading numpy


【解决方案1】:

只希望这可以修复您可能使用的所有场景和系统。

  1. 使用numpy.__config__.show() 查看您使用的是OpenBLAS 还是MKL

从现在开始,您可以通过几种方法来做到这一点。

2.1。终端路由export OPENBLAS_NUM_THREADS=1export MKL_NUM_THREADS=1

2.2(这是我的首选方式)在您的 python 脚本 import os 中添加行 os.environ['OPENBLAS_NUM_THREADS'] = '1'os.environ['MKL_NUM_THREADS'] = '1'

注意 在设置os.environ[VAR] 时,线程数必须是字符串!此外,您可能需要在导入 numpy/scipy 之前设置此环境变量

除了 openBLAS 或 MKL 之外,可能还有其他选项,但第 1 步将帮助您解决这个问题。

【讨论】:

  • 太棒了。当尝试使用 multiprocessing.Pool 并行化一批 fftpack+odeint 模拟时,这给了我高达 600 倍的加速!然而,甚至在我开始使用笔记本的多处理部分之前,加速就已经生效。关于那些 OpenBLAS 线程的某些东西显然阻碍了正确的矢量化。
  • 另一个令人惊奇的是,htop 报告的利用率在更改后实际上更低,因此看起来确实必须使用一些不同的代码路径;也许可以更好地利用我的 Xeon E5-1660v4 的矢量扩展。
【解决方案2】:

MKL_NUM_THREADS 环境变量设置为 1。您可能已经猜到,此环境变量控制数学内核库的行为,该库包含在 Enthought 的 numpy 构建中。

我只是在我的启动文件 .bash_profile 中使用export MKL_NUM_THREADS=1 执行此操作。您还应该能够从脚本内部执行此操作,以使其特定于进程。

【讨论】:

【解决方案3】:

如果您想动态设置线程数,而不是通过环境变量全局设置,您也可以这样做:

import mkl
mkl.set_num_threads(2)

【讨论】:

  • linux/OpenBLAS 怎么样?
【解决方案4】:

在更新的 numpy 版本中,我发现有必要同时设置 NUMEXPR_NUM_THREADS=1

在我的手中,不设置MKL_NUM_THREADS=1就足够了,但在某些情况下你可能需要同时设置两者。

【讨论】:

【解决方案5】:

对我来说,解决方案很简单,因为我停止使用numpy.dot

import numpy as np

a = np.random.rand(1e6)
b = np.random.rand(1e6, 10)

# potentially uses multiple threads
dotted = np.dot(a, b)

# single-thread
summed = np.sum(a[:, np.newaxis] * b, axis=0)

assert np.all(dotted == summed)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    • 2021-05-04
    • 1970-01-01
    • 2015-10-22
    • 2015-02-28
    • 2011-05-03
    • 2013-11-22
    相关资源
    最近更新 更多