【问题标题】:Unintended multithreading in Python (scikit-learn)Python 中的意外多线程(scikit-learn)
【发布时间】:2013-10-15 22:17:45
【问题描述】:

我正在为高斯混合模型使用 sklearn 模块的混合子模块...当我在多核系统上运行我的代码时,它使用多个内核,即使我没有在代码中要求它。这是默认行为吗?更重要的是,如何禁用它?

谢谢

【问题讨论】:

  • 您的 numpy 安装是否可能是多线程的?
  • 嗯。可能是。我怎样才能检查它?以及如何在不重新安装的情况下强制它为单线程?
  • 尝试乘以 2 个巨型矩阵(A.dot(B) 不是 A * B),例如 5000x5000,看看是否有多核使用。多线程取决于您的 numpy 编译时所针对的库。
  • 好吧,你是对的。我已经尝试了您推荐的方法,它可以在多核上运行。有什么办法可以禁用这种行为?
  • 你是如何安装你的 numpy 库的?看看这个:stackoverflow.com/questions/17053671/…

标签: python multithreading scikit-learn


【解决方案1】:

如果您使用的是 MKL,请尝试

export MKL_NUM_THREADS=1

对于带有 OpenBLAS 的 Numpy:

export OPENBLAS_NUM_THREADS=1

对于某些版本的 Numpy,建议使用此变体:

export NUMEXPR_NUM_THREADS=1

必须在脚本运行之前设置环境变量(在脚本内部设置并没有预期的效果)。运行时设置线程见:Set max number of threads at runtime on numpy/openblas

请参阅以下内容以确定您的 numpy 是如何设置的:How to check blas/lapack linkage in numpy/scipy?

【讨论】:

  • 谢谢你先生救了我的命
【解决方案2】:

感谢@prgao

答案就在那里Python: How do you stop numpy from multithreading?

设置“export MKL_NUM_THREADS=1”似乎有效

【讨论】:

  • 只有在 numpy use use 的版本与 BLAS / LAPACK 的 MKL 实现链接时才有效。对于 OpenBLAS,它将改为 export OPENBLAS_NUM_THREADS=1。对于 ATLAS,您必须重新编译 ATLAS 以禁用线程。
  • 感谢我们快疯了!
猜你喜欢
  • 2018-12-21
  • 2012-09-03
  • 2019-07-21
  • 2014-08-09
  • 2016-02-11
  • 2021-04-01
  • 2020-02-24
  • 2023-03-25
  • 2016-05-10
相关资源
最近更新 更多