【问题标题】:Tensorflow data pipeline: Slow with caching to disk - how to improve evaluation performance?Tensorflow 数据管道:缓存到磁盘很慢 - 如何提高评估性能?
【发布时间】:2019-07-22 20:54:24
【问题描述】:

我已经建立了一个数据管道。伪代码如下:

  1. 数据集->
  2. 数据集 = 扩充(数据集)
  3. dataset = dataset.batch(35).prefetch(1)
  4. dataset = set_from_generator(to_feed_dict(dataset)) # 昂贵的操作
  5. dataset = Cache('/tmp', dataset)
  6. 数据集 = dataset.unbatch()
  7. dataset = dataset.shuffle(64).batch(256).prefetch(1)
  8. to_feed_dict(数据集)

生成预训练模型输出需要 1 到 5 个操作。我缓存它们,因为它们在整个时期都不会改变(预训练的模型权重不会更新)。 5 到 8 个动作为训练准备数据集。

必须使用不同的批量大小,因为预训练模型输入的维度比输出大得多。

第一个 epoch 很慢,因为它必须在每个输入项上评估预训练模型以生成模板并将它们保存到磁盘。后来的 epoch 更快,但仍然很慢 - 我怀疑瓶颈是读取磁盘缓存。

可以在此数据管道中进行哪些改进以减少问题? 谢谢!

【问题讨论】:

    标签: python tensorflow machine-learning tensorflow-datasets


    【解决方案1】:
    1. prefetch(1) 表示只会预取一个元素,我认为您可能希望它与批量大小一样大或更大。
    2. 在第一次缓存之后,您可以尝试第二次放入,但不提供路径,因此它会在内存中缓存一些。
    3. 也许您的硬盘驱动器速度很慢? ;)
    4. 另一个想法是您可以在步骤 1-4 之后手动写入压缩的 TFRecord,然后使用另一个数据集读取它。压缩文件的 I/O 较低,但会导致 CPU 使用率较高。

    【讨论】:

    • 这些想法很棒。我会在试用时报告结果:)
    猜你喜欢
    • 2019-04-24
    • 2020-01-20
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 2014-12-28
    • 2012-04-04
    • 2013-07-16
    • 2020-03-19
    相关资源
    最近更新 更多