【问题标题】:What am I missing in python-multiprocessing/multithreading?我在 python-multiprocessing/multithreading 中缺少什么?
【发布时间】:2017-09-06 19:05:05
【问题描述】:

我在 numpy.xml 中创建、相乘然后求和两个大矩阵的所有元素。我用两种方法做了几百次,一个循环和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)

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

我开始尝试多线程,因为我需要将图像、标签、边界框等转换为 tfrecord。为此,我正在研究来自 tensorflow/inception 的文件(如果您想了解build_imagenet_data.py, line 453)。我相信多线程在这里起作用,这就是他们使用它的原因。

说到这里,我的问题可以如下提出,

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

【问题讨论】:

    标签: python-2.7 numpy tensorflow python-multiprocessing python-multithreading


    【解决方案1】:

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

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

    因此,如果 BLAS 能够占用您的所有内核(大尺寸更容易),您只会看到开销。

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

    【讨论】:

    • 并回答第二个问题,除非您正在做一些繁重的 I/O 绑定工作,否则不建议将多处理或多线程与 numpy 或 tensorflow 一起使用。 Tensorflow 实际上通过队列运行器支持这种意外情况。至于实际计算,tensorflow 和 numpy 都已经能够将负载分散到您拥有的每个核心上。
    • 据我所知,tensorflow 使用 Eigen,它默认使用它自己的(高度优化的)低级例程。当然,这不会改变 sascha 回答的主旨。
    • @dseuss 很有趣。看来你是对的,尽管支持所有这些 BLAS-libs 并且更新的基准似乎表明这些更快(这是预期的),尽管 Eigen 的官方常见问题解答(具有过时的基准并且在某种程度上仅限于单核)。
    • @sascha 我不知道这有多准确,但我认为纯特征非常适合小型矩阵运算,例如需要3D 图形。对于我们在 tensorflow 中遇到的实例,BLAS 肯定更胜一筹,尤其是在多核架构上。这可能是从 Eigen 链接到 BLAS 的一大动力。
    • 单线程函数只使用一个线程;可以在 ubuntu 的系统监视器中清楚地看到。多进程函数使用了我所有的 cpu 线程,但平均为 30%,完成所需的时间更长,约为 6%。
    猜你喜欢
    • 2011-01-29
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2012-10-01
    • 2010-10-29
    相关资源
    最近更新 更多