【问题标题】:Python: Parallelizing GPU and CPU workPython:并行化 GPU 和 CPU 工作
【发布时间】:2016-11-07 11:35:52
【问题描述】:

为我的 ML 模型处理批处理需要太多时间,因此我正在考虑将它们并行化。

现在预处理例程从 SSD 中获取数据,进行预处理并形成用于学习的数据结构。 ML 训练过程一直在等待。然后 ML 过程获取这些数据并使用它来训练模型。现在预处理等待。然后他们转了一圈。这种等待时间很快就会累积起来,并且会延迟模型训练。

计划如下:单个数据结构将存储一堆数据点。训练算法的每一步都将采用其中的随机子集来训练模型(SGD 与 GPU 上的 TensorFlow)。

与此同时,我希望另一个线程对下一组数据点进行预处理。当预处理准备好时,它将用新的数据结构对象替换旧的数据结构对象。以此类推。

由于这是我在 Python 中进行并行化的第一种方法,我想知道这是否可行。全局解释器锁会阻止系统以真正并行的方式执行这些任务吗?

【问题讨论】:

  • 您是否找到了在 Python、Keras/Tensorflow 中执行此操作的方法?这可以通过多处理库来完成吗?
  • 从那时起,我转向了 PyTorch,发现它更方便。他们说,新版本的 TF 和 Keras 也不错,但我已经三年没有使用它们了。
  • 所以您找到的解决方案不是使用 Python 中的多处理库,而是 PyTorch 固有的东西?
  • 是的,PyTorch 提供了 Dataset 类,它与 DataLoader 类结合使用,完全符合我的需要。

标签: python multithreading concurrency parallel-processing tensorflow


【解决方案1】:

TensorFlow 的 Python 绑定对于尽快释放全局解释器锁非常勤奋。例如,当控件在tf.Sessionrun 方法中转移到C++ 库时,它不会持有锁。您所描述的是 TensorFlow 中非常常见的模式。输入数据预处理和使用预处理数据训练 ML 模型在 TensorFlow 中使用 queues 解耦。 Inception model 中有一个说明性示例说明如何并行处理输入预处理和训练。

【讨论】:

  • 对于多线程,你认为TensorFlow可以让threading真正的并行,不管Python中的GIL吗?或者 Python 运行 TF 代码时,TF 可以让它并行吗?
猜你喜欢
  • 2018-04-06
  • 2019-01-11
  • 2017-04-12
  • 2013-08-06
  • 2011-11-23
  • 2018-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多