相关疑难解决方法(0)

Python:你如何阻止多线程的numpy?

我知道这可能看起来像一个荒谬的问题,但我必须定期在计算服务器上运行工作,我与部门中的其他人分享,当我开始10个工作时,我真的希望它只需要10个核心而不是更多; 我不关心每次运行一个核心需要多长时间:我只是不希望它侵占其他人的领域,这需要我重新安排工作等等.我只想拥有10个实心核心,就是这样.

更具体地说,我在Redhat上使用Enthought 7.3-1,它基于Python 2.7.3和numpy 1.6.1,但问题更为笼统.我一直在谷歌搜索这个问题的某种答案几个小时无济于事,所以如果有人知道numpy的转换可以关闭多线程,请告诉我.

python multithreading numpy

47
推荐指数
4
解决办法
1万
查看次数

为什么 numpy 矩阵乘法计算时间在 100x100 时增加一个数量级?

当使用 numpy 计算A @ a其中A是随机 N × N 矩阵并且 a 是具有 N 个随机元素的向量时,计算时间在 N=100 时会跳跃一个数量级。这有什么特别的原因吗?作为比较,在CPU上使用torch进行相同的操作有更逐渐的增加矩阵向量乘法计算时间

\n

用 python3.10 和 3.9 和 3.7 尝试过,具有相同的行为

\n

用于生成绘图的 numpy 部分的代码:

\n
import numpy as np\nfrom tqdm.notebook import tqdm\nimport pandas as pd\nimport time\nimport sys\n\ndef sym(A):\n    return .5 * (A + A.T)\n\nresults = []\nfor n in tqdm(range(2, 500)):\n    for trial_idx in range(10):\n        A = sym(np.random.randn(n, n))\n        a = np.random.randn(n)        \n        \n        t = time.time()\n        for i in range(1000):\n            A @ a\n …
Run Code Online (Sandbox Code Playgroud)

python numpy linear-algebra numerical-computing

19
推荐指数
1
解决办法
759
查看次数

具有不同BLAS实现的NumPy的性能

我正在运行一个用Python实现并使用NumPy的算法.算法中计算成本最高的部分涉及求解一组线性系统(即调用numpy.linalg.solve().我想出了这个小基准:

import numpy as np
import time

# Create two large random matrices
a = np.random.randn(5000, 5000)
b = np.random.randn(5000, 5000)

t1 = time.time()
# That's the expensive call:
np.linalg.solve(a, b)
print time.time() - t1
Run Code Online (Sandbox Code Playgroud)

我一直在运行:

  1. 我的笔记本电脑,2013年末MacBook Pro 15",2核4芯(sysctl -n machdep.cpu.brand_string给我Intel(R)Core(TM)i7-4750HQ CPU @ 2.00GHz)
  2. Amazon EC2 c3.xlarge实例,具有4个vCPU.亚马逊宣称它们为"高频英特尔至强E5-2680 v2(Ivy Bridge)处理器"

底线:

  • 在Mac上,它运行约4.5秒
  • 在EC2实例上,它运行大约19.5秒

我也在其他基于OpenBLAS/Intel MKL的设置上尝试过它,运行时总是与我在EC2实例上得到的(模块化硬件配置)相当.

任何人都可以解释为什么Mac(使用Accelerate Framework)的性能提高了4倍?下面提供了有关NumPy/BLAS设置的更多详细信息.

笔记本设置

numpy.show_config() 给我:

atlas_threads_info:
  NOT AVAILABLE
blas_opt_info:
    extra_link_args = ['-Wl,-framework', '-Wl,Accelerate']
    extra_compile_args …
Run Code Online (Sandbox Code Playgroud)

numpy amazon-ec2 blas accelerate-framework openblas

12
推荐指数
1
解决办法
1594
查看次数

如何在没有终端或多处理库的情况下限制 python 脚本使用的 CPU 数量?

我的主要问题是在这里发布。由于还没有人给出解决方案,我决定找到一种解决方法。我正在寻找一种使用python 代码限制 python 脚本 CPU 使用率(不是优先级,而是 CPU 内核数)的方法。我知道我可以使用多处理库(池等)来做到这一点,但我不是使用多处理运行它的人。所以,我不知道该怎么做。而且我也可以通过终端来做到这一点,但是这个脚本是由另一个脚本导入的。不幸的是,我没有通过终端调用它的奢侈。

tl; dr:如何限制由另一个脚本导入的 python 脚本的CPU 使用率(核心数),我什至不知道为什么它并行运行,而不是通过终端运行它。请检查下面的代码片段。

导致问题的代码片段:

from sklearn.datasets import load_digits
from sklearn.decomposition import IncrementalPCA
import numpy as np

X, _ = load_digits(return_X_y=True)

#Copy-paste and increase the size of the dataset to see the behavior at htop.
for _ in range(8):
    X = np.vstack((X, X))

print(X.shape)

transformer = IncrementalPCA(n_components=7, batch_size=200)

#PARTIAL FIT RUNS IN PARALLEL! GOD WHY?
---------------------------------------
transformer.partial_fit(X[:100, :])
---------------------------------------
X_transformed = transformer.fit_transform(X)

print(X_transformed.shape)
Run Code Online (Sandbox Code Playgroud)

版本:

  • 蟒蛇 …

python unix multiprocessing python-3.x python-multiprocessing

8
推荐指数
2
解决办法
7660
查看次数

R 是否在启动时创建了太多线程

每次调用 R 都会创建 63 个子进程

Rscript --vanilla  -e 'Sys.sleep(5)' &  pstree -p $! | grep -c '{R}'
# 63
Run Code Online (Sandbox Code Playgroud)

哪里pstree看起来像这样

R(2562809)???{R}(2562818)                                                                                                                                                     
           ??{R}(2562819)
           ...
           ??{R}(2562878)
           ??{R}(2562879)
           ??{R}(2562880)
Run Code Online (Sandbox Code Playgroud)

这是预期的行为吗?

这是一台带有 debian 9.3、R 3.4.3、blas 3.7.0 和 openmp 2.0.2 的 72 核机器

dpkg-query -l '*blas*' 'r-base' '*lapack*' '*openmp*'|grep ^ii
ii  libblas-common     3.7.0-2                    amd64        Dependency package for all BLAS implementations
ii  libblas-dev        3.7.0-2                    amd64        Basic Linear Algebra Subroutines 3, static library
ii  libblas3           3.7.0-2                    amd64        Basic Linear Algebra Reference implementations, shared library
ii …
Run Code Online (Sandbox Code Playgroud)

parallel-processing r blas lapack

5
推荐指数
1
解决办法
886
查看次数

Scipy最小化函数似乎自己创建了多个线程?

我正在使用 scipy 最小化函数。它调用的函数是用 Cython 编译的,并且具有我编写的底层 C++ 实现,但这并不重要。由于某种原因,当我运行程序时,它会创建尽可能多的线程来填充我的所有 CPU。例如,如果我运行 top,我会看到 800% 的 cpu 正在被使用,或者在 htop 上,我可以看到 8 个单独的处理器正在被使用,而我只创建了要在一个处理器上运行的程序。我认为 scipy 甚至没有并行处理功能,而且我找不到任何与此相关的文档。可能发生什么情况,有什么方法可以控制它吗?

python multithreading scipy

4
推荐指数
1
解决办法
1632
查看次数

numpy matmul 是否并行化以及如何停止它?

在执行脚本期间查看资源监视器,我注意到我的 PC 的所有核心都在工作,即使我没有实现任何形式的多处理。numpy为了查明原因,我发现使用's matmult(或者如下例中的二元运算符@)时代码是并行的。

import numpy as np

A = np.random.rand(10,500)
B = np.random.rand(500,50000)
while True:
    _ = A @ B
Run Code Online (Sandbox Code Playgroud)

看看这个问题,看起来原因是numpy调用了BLAS/LAPACK确实并行的例程。

尽管我的代码运行得更快并且使用了所有可用资源,这很好,但当我在PBS队列管理器管理的共享集群上提交代码时,这给我带来了麻烦。与集群 IT 经理一起,我们注意到,即使我在集群节点上请求 N 个 CPU,numpy仍然会产生与该节点上的 CPU 数量相等的线程数。

这导致节点过载,因为我使用的 CPU 数量多于分配给我的 CPU 数量。

有没有办法“控制”这种行为并告诉numpy它可以使用多少个CPU?

python numpy multiprocessing

1
推荐指数
1
解决办法
492
查看次数