1

为我的ML模型处理批次需要太多时间,所以我正在考虑将它们并行化。Python:并行化GPU和CPU工作

现在预处理程序从SSD获取数据,进行预处理并形成一个数据结构以供学习。所有这一次ML培训过程等待。然后ML过程获取这些数据并用它来训练模型。现在预处理等待。然后他们转过身来。这个等待时间很快加总,并延误模型训练。

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

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

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

回答

1

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