Python 修改Tensorflow代码,将预处理放在CPU上,将培训放在GPU上

Python 修改Tensorflow代码,将预处理放在CPU上,将培训放在GPU上,python,tensorflow,google-cloud-platform,tensorflow-gpu,google-cloud-ml-engine,Python,Tensorflow,Google Cloud Platform,Tensorflow Gpu,Google Cloud Ml Engine,我正在阅读这篇关于优化GPU TensorFlow代码的最佳实践的文章。他们的一个建议是将预处理操作放在CPU上,以便GPU专用于培训。试图了解在实验中如何实际实现这一点(即,learn_runner.run())。为了进一步讨论,我想考虑将这一策略应用到自定义估计普查样本提供的最佳方式。 本文建议在预处理操作周围放置和tf.device('/cpu:0')。然而,当我查看自定义估计器时,“预处理”似乎是分多个步骤完成的: inputs=tf.feature\u column.input\u l

我正在阅读这篇关于优化GPU TensorFlow代码的最佳实践的文章。他们的一个建议是将预处理操作放在CPU上,以便GPU专用于培训。试图了解在实验中如何实际实现这一点(即,learn_runner.run())。为了进一步讨论,我想考虑将这一策略应用到自定义估计普查样本提供的最佳方式。 本文建议在预处理操作周围放置
和tf.device('/cpu:0')
。然而,当我查看自定义估计器时,“预处理”似乎是分多个步骤完成的:

  • inputs=tf.feature\u column.input\u layer(features,transformed\u columns)&label\u values=tf.constant(LABELS)
    ——如果我用tf.device('/cpu:0')在这两行周围包装
    ,是否足以覆盖本例中的“预处理”
  • -还有一个
    generate_input_fn
    parse_csv
    功能,用于设置输入数据队列。是否有必要将带有tf.device('/cpu:0')
    也放在这些函数中,或者基本上是通过包装输入和标签值来实现的
  • 主要问题:以上哪项实施建议足以将所有预处理正确地放置在CPU上

    文章中未提及的其他一些问题:

  • 如果机器有多个核怎么办?“cpu:0”是否会受到限制
  • 这篇文章向我暗示,通过在cpu上包装预处理,GPU将自动用于其余部分。真的是这样吗
  • 分布式ML发动机实验 作为后续,我想了解如何在分布式ML引擎实验中进一步调整这一点——如果有2个工作GPU、1个主CPU和一个参数服务器,上述任何建议是否需要更改?我的理解是,分布式培训将是数据并行异步培训,因此每个工作人员将独立地迭代数据(并异步地将梯度传递回PS),这向我表明,如果您以这种方式进行培训,则不需要对上面的单个GPU进行进一步修改。然而,这似乎有点容易成为事实。

    主要问题:

    您放置的两个代码实际上是训练的两个不同部分,在我的选项中,第282/294行被称为“预处理”部分,因为它将原始输入数据解析为张量,此操作不适合GPU加速,因此如果在CPU上分配就足够了

    第152/152行是训练模型的一部分,用于将原始特征处理为不同类型的特征

  • “cpu:0”表示此部分的操作将在cpu上分配,但不会绑定到指定的核心。CPU上分配的操作将在多线程中运行,并使用多核

  • 如果您正在运行的计算机具有GPU,则如果未指定设备,TensorFlow将更愿意在GPU上分配操作

  • 主要问题:

    您放置的两个代码实际上是训练的两个不同部分,在我的选项中,第282/294行被称为“预处理”部分,因为它将原始输入数据解析为张量,此操作不适合GPU加速,因此如果在CPU上分配就足够了

    第152/152行是训练模型的一部分,用于将原始特征处理为不同类型的特征

  • “cpu:0”表示此部分的操作将在cpu上分配,但不会绑定到指定的核心。CPU上分配的操作将在多线程中运行,并使用多核

  • 如果您正在运行的计算机具有GPU,则如果未指定设备,TensorFlow将更愿意在GPU上分配操作


  • 前面的答案准确地描述了设备的位置。请允许我回答有关分布式TF的问题

    首先要注意的是,只要有可能,我们都会选择一台具有大量GPU的机器,而不是多台具有单个GPU的机器。在同一台机器上(甚至更好,在GPU上),RAM中参数的带宽比通过网络传输快几个数量级


    也就是说,有时您需要分布式培训,包括远程参数服务器。在这种情况下,您不一定需要从单机设置更改代码中的任何内容

    前面的答案准确地描述了设备的位置。请允许我回答有关分布式TF的问题

    首先要注意的是,只要有可能,我们都会选择一台具有大量GPU的机器,而不是多台具有单个GPU的机器。在同一台机器上(甚至更好,在GPU上),RAM中参数的带宽比通过网络传输快几个数量级


    也就是说,有时您需要分布式培训,包括远程参数服务器。在这种情况下,您不一定需要从单机设置更改代码中的任何内容

    澄清一下#2:如果GPU内核存在,它将放在GPU上。还请注意,如果您使用的计算机具有多个GPU,则需要使用显式设备语句,否则它们将全部放在/GPU:0 hanks!这些评论有助于解决我的一些澄清问题,但我希望得到对主要问题的确认,即“tf.device('cpu:0')需要包装在哪里?仅将其包装在模型中的输入层(建议在1行152/153中)是否足够,或者是否也需要将其放置在其他位置(如第282/294行输入的一部分)?我已更新了我的问题,以使此“主要问题”更清晰,以确保“安全”,您应将所有