【发布时间】:2017-09-01 14:04:39
【问题描述】:
我正在阅读performance guide,了解为 GPU 优化 TensorFlow 代码的最佳实践。他们的一个建议是将预处理操作放在 CPU 上,以便 GPU 专用于训练。尝试了解如何在实验中实际实现这一点(即 learn_runner.run())。为了进一步讨论,我想考虑将此策略应用于 here 提供的自定义估算器人口普查样本的最佳方式。
文章建议在预处理操作周围放置with tf.device('/cpu:0')。但是,当我查看自定义估算器时,“预处理”似乎是通过多个步骤完成的:
-
Line 152/153
inputs = tf.feature_column.input_layer(features, transformed_columns) & label_values = tf.constant(LABELS)-- 如果我将with tf.device('/cpu:0')包裹在这两行周围,是否足以涵盖本示例中的“预处理”? -
Line 282/294 - 还有一个
generate_input_fn和parse_csv函数用于设置输入数据队列。是否有必要将with tf.device('/cpu:0')也放在这些函数中,或者这基本上是通过包装输入和标签值来强制执行的?
主要问题:以上哪些实现建议足以将所有预处理正确地放在 CPU 上?
帖子中未解决的一些其他问题:
- 如果机器有多个内核怎么办? 'cpu:0' 会受到限制吗?
- 该帖子向我暗示,通过将预处理封装在 cpu 上,GPU 将自动用于其余部分。真的是这样吗?
分布式机器学习引擎实验 作为后续,我想了解如何在分布式 ML 引擎实验中进一步调整它——如果有 2 个工作 GPU、1 个主 CPU 和一个参数服务器,上述任何建议是否需要更改?我的理解是分布式训练将是数据并行的异步训练,因此每个工作人员将独立地迭代数据(并将梯度异步传递回 PS),这向我表明,上面的单个 GPU 没有进一步的修改是如果您以这种方式训练,则需要。然而,这似乎有点容易成为现实。
【问题讨论】:
标签: python tensorflow google-cloud-platform tensorflow-gpu google-cloud-ml-engine