python - 使用 tensorflow 数据集的 GPU 使用率

标签 python tensorflow dataset

TF Trace

在我的数据训练过程中,我的 GPU 利用率约为 40%,我清楚地看到有一个基于 tensorflow profiler 的数据复制操作占用了大量时间(见附图)。我假设“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()

最佳答案

预取到单个 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)

关于python - 使用 tensorflow 数据集的 GPU 使用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48351883/

相关文章:

tensorflow - 低密度区域中神经网络的回归精度

opencv - 如何找到 facemark-> OpenCV_Contrib 加载模型的模型文件?

c# - 使用 LINQ 在两个表之间选择不同的值

c# - 将数据库转换/转换为 C# 的数据集

Python:如何检查unicode字符串是否包含大小写字符?

python - scrapy response.xpath 在具有默认命名空间的 xml 文档上返回空数组,而 response.re 有效

python - Django QuerySet 与原始查询性能

python - for 循环如何在元组中工作

tensorflow - 将 tf.data.Dataset.from_tensor_slices 转换为 pytorch

tensorflow - 如何在tensorflow keras中访问自定义层的递归层