使用 tensorflow 和 keras 并行化数据准备

Parallelize data preparation with tensorflow and keras

我正在使用 Tensorflow Keras 在 GPU 上训练 LSTM 模型。在调用 model.fit() 开始训练之前,大约需要 30 分钟才能开始训练过程。我认为在这一时期它使用 CPU 的一个核心来准备数据。我对么?如果是,我如何使用多核并行化此数据准备过程?

如果您使用 tf.data.Dataset() 准备数据,则可以在准备数据集时利用一些参数。

  1. 例如,在你的.map()函数中,将num_parallel_calls参数设置为num_parallel_calls=tf.data.experimental.AUTOTUNE;通过这种方式,它将允许您的程序自动选择 CPU 个核心数来准备数据集。
  2. 如果使用 .batch().shuffle() 也可以提高速度 按照这个顺序,而不是 shuffle().batch() 这个顺序。在第一种情况下,你拿了一批数据集并打乱了其中的元素;在第二种情况下,在对整个数据集进行洗牌后,您 batch() 在您的数据集上。人们可以很容易地看出,对一个巨大的数据集进行洗牌会导致花费更多的时间,而不是按此顺序进行批处理和洗牌。
  3. 让我们再看一个案例(与实际训练过程相关)(不是你的案例,因为数据集准备是 在您的情况下非常耗时):prefetch() 操作。 在这种情况下,GPU 在等待 CPU 获取另一批数据。实际上,当反向传播 完成一批后的权重更新,GPU立即 消耗另一批数据。为简单起见,还将其值设置为 tf.data.experimental.AUTOTUNE.