gpt4 book ai didi

python-2.7 - 我在 python-multiprocessing/multithreading 中缺少什么?

转载 作者:行者123 更新时间:2023-12-01 13:30:38 26 4
gpt4 key购买 nike

我在 numpy 中创建、相乘然后对两个大矩阵的所有元素求和。我使用两种方法执行了数百次,一个循环并借助于 multiprocessing 模块(参见下面的代码片段)。

def worker_loop(n):
for i in n:
mul = np.sum(np.random.normal(size=[i,i])*np.random.normal(size=[i,i]))

def worker(i):
mul = np.sum(np.random.normal(size=[i,i])*np.random.normal(size=[i,i]))

n = range(100,300)

pool = ThreadPool(2)
pool.map(worker, n)
pool.close()
pool.join()

worker_loop(n)

测量时间表明循环多处理快。我也尝试过 threading 模块但没有成功(然后我读到这是个坏主意;阅读更多 here )

我开始使用多线程进行这项实验,因为我需要将图像、标签、边界框……转换为 tfrecords。为此,我正在研究来自 tensorflow/inception 的一个文件(如果你想深入了解 build_imagenet_data.py, line 453)。我相信多线程在这里起作用,这就是他们使用它的原因。

说到这里,我的问题可以这样说,

  • 我的代码中缺少什么;是否有可能通过小的修改实现某些目标?
  • inception 中的示例是否有效,因为 tensorflow 是用 c++ 和 CUDA 编写的?
  • 什么时候建议使用 numpy、tensorflow 等多处理或多线程?

最佳答案

总会有一些开销(同步、数据准备、数据复制等)。

但是:如果设置良好,您在 numpy 中的矩阵向​​量和向量向量操作已经是多线程的,使用 BLAS (这是最先进的标准,包括 numpy、matlab 和可能的 tensorflow 的 cpu 后端;尽管有不同的实现)。

因此,如果 BLAS 能够占据您的所有核心(大维度更容易),您只会看到开销。

是的,在它的核心中,tensorflow 将至少由 C/C++/Fortran 和 BLAS 中的一种实现,用于它的 CPU 后端和一些 Cuda-libs,当以 GPU 为目标时。这也意味着,梯度计算和优化计算等核心算法永远不需要外部并行化(在所有用例的 99.9% 中)。

关于python-2.7 - 我在 python-multiprocessing/multithreading 中缺少什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46082610/

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