处理我的 ML 模型的批处理需要太多时间,因此我正在考虑将它们并行化。
现在预处理例程从SSD中获取数据,进行预处理并形成用于学习的数据结构。机器学习训练过程一直在等待。然后机器学习过程获取这些数据并用它来训练模型。现在等待预处理。然后他们就转了一圈。这种等待时间很快就会累积起来并延迟模型训练。
计划如下:单个数据结构将存储一堆数据点。训练算法的每一步都会采用它们的随机子集来训练模型(SGD 和 GPU 上的 TensorFlow)。
与此同时,我希望另一个线程对下一组数据点进行预处理。当预处理准备就绪时,它将用新的数据结构对象替换旧的数据结构对象。等等。
由于这是我在 Python 中实现并行化的第一个方法,我想知道这是否可行。全局解释器锁会阻止系统以真正并行的方式执行这些任务吗?
最佳答案
TensorFlow 的 Python 绑定(bind)非常勤奋,希望尽快释放全局解释器锁。例如,当控制权在 tf.Session
的 run
方法中转移到 C++ 库时,它不会持有锁。您所描述的是 TensorFlow 中非常常见的模式。输入数据预处理和使用预处理数据训练 ML 模型在 TensorFlow 中使用 queues 解耦。 。 Inception model 中有一个说明性示例,说明输入预处理和训练如何并行化。 .
关于Python:并行化 GPU 和 CPU 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38206695/