【问题标题】:GPU under utilization using tensorflow dataset使用 tensorflow 数据集的 GPU 利用率低下
【发布时间】:2018-06-29 07:56:51
【问题描述】:

在我的数据训练期间,我的 GPU 利用率约为 40%,并且我清楚地看到有一个基于 tensorflow 分析器的数据复制操作占用了大量时间(见附图)。我认为“MEMCPYHtoD”选项正在将批处理从 CPU 复制到 GPU,并阻止 GPU 被使用。无论如何将数据预取到GPU?还是有其他我没有看到的问题?

这里是数据集的代码:

X_placeholder = tf.placeholder(tf.float32, data.train.X.shape)
y_placeholder = tf.placeholder(tf.float32, data.train.y[label].shape)

dataset = tf.data.Dataset.from_tensor_slices({"X": X_placeholder, 
                                              "y": y_placeholder})
dataset = dataset.repeat(1000)
dataset = dataset.batch(1000)
dataset = dataset.prefetch(2)
iterator = dataset.make_initializable_iterator()
next_element = iterator.get_next()

【问题讨论】:

标签: python tensorflow dataset


【解决方案1】:

我相信您现在可以使用prefetch_to_device 解决此问题。而不是行:

dataset = dataset.prefetch(2)

dataset = dataset.apply(tf.contrib.data.prefetch_to_device('/gpu:0', buffer_size=2))

【讨论】:

    【解决方案2】:

    预取到单个 GPU

    • 考虑使用比prefetch_to_device 更灵活的方法,例如通过使用tf.data.experimental.copy_to_device(...) 显式复制到GPU,然后预取。这允许避免 prefetch_to_device 必须是管道中的最后一个转换的限制,并允许结合进一步的技巧来优化 Dataset 管道性能(例如通过覆盖线程池分布)。李>
    • 试用实验性的tf.contrib.data.AUTOTUNE 预取选项,它允许tf.data 运行时根据您的系统和环境自动调整预取缓冲区大小。

    最后,你可能会做这样的事情:

    dataset = dataset.apply(tf.data.experimental.copy_to_device("/gpu:0"))
    dataset = dataset.prefetch(tf.contrib.data.AUTOTUNE)
    

    【讨论】:

      猜你喜欢
      • 2019-09-26
      • 1970-01-01
      • 1970-01-01
      • 2019-09-25
      • 1970-01-01
      • 2016-09-28
      • 2023-02-24
      • 2020-02-05
      • 1970-01-01
      相关资源
      最近更新 更多