Mas*_*ddy 47 python multithreading numpy
我知道这可能看起来像一个荒谬的问题,但我必须定期在计算服务器上运行工作,我与部门中的其他人分享,当我开始10个工作时,我真的希望它只需要10个核心而不是更多; 我不关心每次运行一个核心需要多长时间:我只是不希望它侵占其他人的领域,这需要我重新安排工作等等.我只想拥有10个实心核心,就是这样.
更具体地说,我在Redhat上使用Enthought 7.3-1,它基于Python 2.7.3和numpy 1.6.1,但问题更为笼统.我一直在谷歌搜索这个问题的某种答案几个小时无济于事,所以如果有人知道numpy的转换可以关闭多线程,请告诉我.
SAR*_*ose 29
只有希望这会修复您可能使用的所有方案和系统.
numpy.__config__.show(),看看你正在使用OpenBLAS或MKL从这一点开始,有几种方法可以做到这一点.
2.1.终点路线export OPENBLAS_NUM_THREADS=1或export 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步将帮助您解决这个问题.
Bi *_*ico 28
将MKL_NUM_THREADS环境变量设置为1.您可能已经猜到,此环境变量控制数学内核库的行为,该库包含在Enthought numpy构建中.
我只是在我的启动文件.bash_profile中执行此操作export MKL_NUM_THREADS=1.您还应该能够从脚本内部执行此操作以使其特定于进程.
knu*_*nub 17
如果您想要动态设置线程数,而不是通过环境变量全局设置线程数,您还可以执行以下操作:
import mkl
mkl.set_num_threads(2)
Run Code Online (Sandbox Code Playgroud)
我会留下这个作为对Bi Rico答案的评论,但我没有所需的特权.在numpy的最新版本中,我发现有必要设置NUMEXPR_NUM_THREADS = 1
在我手中,没有设置MKL_NUM_THREADS = 1就足够了,但在某些情况下你可能需要设置两者.
| 归档时间: |
|
| 查看次数: |
11830 次 |
| 最近记录: |