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

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

我在 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/

相关文章:

python - 将项目保存到只读存储时是否应该包含 .pyc 字节代码?

python - 在内存中存储一​​个大的稀疏矩阵来计算特征值

python - OpenCV Python 错误 : Unsupported data type (=4) in function 'cv::opt_AVX2::getMorphologyRowFilter'

python - TensorFlow中有没有相当于python的reduce函数?

python - Keras 层仅将输入张量的符号更改为特定元素

python - 在 python 中解析文本文件并输出到 CSV

python - 将UTC时间字符串转换为日期时间对象

python - python 会给你一个无限解线性系统的答案吗?

Tensorflow 无法为动态批量大小初始化 tf.Variable

python - 将空白分隔数字列表转换为 float 列表