0

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

4

1 回答 1

3

如果您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
于 2020-03-05T06:56:40.500 回答