Python:并行化 GPU 和 CPU 工作

标签 python multithreading concurrency parallel-processing tensorflow

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

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

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

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

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

最佳答案

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

关于Python:并行化 GPU 和 CPU 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38206695/

相关文章:

java - 使用多线程下载真的会加快速度吗?

java - 空指针异常和线程

python - 如何解压缩字节数组中的 gzip 数据?

python - Django,织物 : What is the best way to manage secret keys to deploy Django projects?

python - 按ID分组,按时间排序,后除先

multithreading - 用户级线程的好处

python - def form_valid 用于 Django Rest 框架

c# - 如何使用多维数组调用 Parallel.ForEach

Java Happens-Before 和线程安全

java - 使用 RxJava fork 任务并合并结果