gpt4 book ai didi

python - numpy OpenBLAS 设置最大线程数

转载 作者:太空狗 更新时间:2023-10-29 20:24:18 37 4
gpt4 key购买 nike

我正在使用 numpy,我的模型涉及密集的矩阵-矩阵乘法。为了加快速度,我使用 OpenBLAS 多线程库来并行化 numpy.dot 函数。

我的设置如下,

  • 操作系统:CentOS 6.2 服务器 #CPUs = 12, #MEM = 96GB
  • python版本:Python2.7.6
  • numpy : numpy 1.8.0
  • OpenBLAS + IntelMKL

$ OMP_NUM_THREADS=8 python test_mul.py

代码,我从 https://gist.github.com/osdf/ 中获取的代码

test_mul.py :

import numpy
import sys
import timeit

try:
import numpy.core._dotblas
print 'FAST BLAS'
except ImportError:
print 'slow blas'

print "version:", numpy.__version__
print "maxint:", sys.maxint
print

x = numpy.random.random((1000,1000))

setup = "import numpy; x = numpy.random.random((1000,1000))"
count = 5

t = timeit.Timer("numpy.dot(x, x.T)", setup=setup)
print "dot:", t.timeit(count)/count, "sec"

当我使用 OMP_NUM_THREADS=1 python test_mul.py 时,结果是

dot: 0.200172233582 sec

OMP_NUM_THREADS=2

dot: 0.103047609329 sec

OMP_NUM_THREADS=4

dot: 0.0533880233765 sec

一切顺利。

但是,当我设置 OMP_NUM_THREADS=8.... 代码开始“偶尔有效”。

有时它可以工作,有时它甚至不运行并给我核心转储。

OMP_NUM_THREADS > 10 时。代码似乎一直在中断..我想知道这里发生了什么?是否有类似每个进程可以使用的最大线程数的东西?鉴于我的机器中有 12 个 CPU,我可以提高该限制吗?

谢谢

最佳答案

首先,我不太明白“OpenBLAS + IntelMKL”是什么意思。这两个都是 BLAS 库,numpy 应该只在运行时链接到其中一个。您可能应该检查这两个 numpy 中的哪一个正在实际使用。您可以通过调用:

$ ldd <path-to-site-packages>/numpy/core/_dotblas.so

更新: numpy/core/_dotblas.so was removed in numpy v1.10 ,但您可以改为检查 numpy/core/multiarray.so 的链接。

例如,我链接到 OpenBLAS:

...
libopenblas.so.0 => /opt/OpenBLAS/lib/libopenblas.so.0 (0x00007f788c934000)
...

如果您确实链接到 OpenBLAS,您是否从源代码构建它?如果这样做,您应该会在 Makefile.rule 中看到一个注释选项:

...
# You can define maximum number of threads. Basically it should be
# less than actual number of cores. If you don't specify one, it's
# automatically detected by the the script.
# NUM_THREADS = 24
...

默认情况下,OpenBLAS 会尝试设置自动使用的最大线程数,但如果它未正确检测到这一点,您可以尝试取消注释并自行编辑此行。

另外,请记住,您可能会发现使用更多线程在性能方面的 yield 递减。除非您的数组非常大,否则使用超过 6 个线程不太可能显着提高性能,因为线程创建和管理所涉及的开销会增加。

关于python - numpy OpenBLAS 设置最大线程数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22418634/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com