【问题标题】:Is there a way to keep a Tensorflow record file in memory?有没有办法将 Tensorflow 记录文件保存在内存中?
【发布时间】:2018-07-25 19:00:05
【问题描述】:

情况如下:我正在处理一个大型 Tensorflow 记录文件。大约 50 GB。但是,我正在进行此培训的机器具有 128 GB 的 RAM。 50 小于 128,因此即使这是一个大文件,您也会认为可以将其保存在内存中并节省慢 I/O 操作符。但是我正在使用 TFRecordDataset 类,似乎整个 TFRecord 系统是专门设计为不这样做的,而且我看不出有任何方法可以强制它将记录保存在内存中。由于它在每个 epoch 都会重新加载它们,因此我在从该 50 GB 文件读取的缓慢 I/O 操作上浪费了大量时间。

我想我可以将记录加载到 python 中的内存中,然后使用 feed_dict 将它们一一加载到我的模型中,绕过整个 Dataset 类。但这似乎是一种不太优雅的处理方式,需要重新设计。如果我可以强制 TFRecordDataset 将所有内容加载到内存中并在不同时期之间保持它,那么一切都会简单得多......

【问题讨论】:

  • 解决问题的另一种方法可能是在您的操作系统中创建一个 ramdisk 并将 Tensorflow 文件复制到 ramdisk 并让程序从那里读取它。完成后,删除 ramdisk。

标签: tensorflow tensorflow-datasets tfrecord


【解决方案1】:

您需要tf.data.Dataset.cache() 操作。要达到预期的效果(将文件保存在内存中),请将其放在 TFRecordDataset 之后,并且不要为其提供任何参数:

  dataset = tf.data.TFRecordDataset(filenames)
  dataset = dataset.cache()

cache() 操作不带参数调用时,缓存在内存中完成。

此外,如果您对这些记录进行了一些后处​​理,例如使用dataset.map(...),那么将cache() 操作放在输入管道的末尾可能会更有益。

更多信息可以在“输入管道性能指南”Map and Cache section中找到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-05
    • 2021-12-18
    • 2014-05-11
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-11
    相关资源
    最近更新 更多