【问题标题】:How to make best use of GPU for TensorFlow Estimators?如何为 TensorFlow Estimators 充分利用 GPU?
【发布时间】:2018-03-20 18:47:56
【问题描述】:

我在深度学习模型中使用了 Tensorflow(CPU 版本)。特别是使用 DNNRegressor Estimator 进行训练,使用给定的参数集(网络结构、隐藏层、alpha 等)虽然我能够减少损失,但模型花费了非常长的时间来学习(大约 3 天。)时间是每 100 步耗时 9 秒。

我偶然发现了这篇文章:- https://medium.com/towards-data-science/how-to-traine-tensorflow-models-79426dabd304 并发现 GPU 可以更快地学习。所以我从 AWS(单核 GPU) 用 4(vCPU)、12(ECU)和 61(MiB)获取了 p2.xlarge gpu。

但学习率相同,每 100 步需要 9 秒。我正在使用与 CPU 上的 Estimators 相同的代码,因为我读到 Estimators 自己使用 GPU。这是我的“nvidia-smi”命令输出。

  • 显示正在使用 GPU 内存,但我的 Volatile GPU-Util 为 1%。无法弄清楚,我错过了什么。它的设计目的是相同的还是我遗漏了什么,因为 Estimators 的 CPU 和 GPU 实现每秒的全局步数相同。
  • 我是否必须明确更改 DNNRegressor Estimator 代码中的某些内容?

【问题讨论】:

  • tensorflow启动需要一些时间,你检查了多长时间?
  • @kev1n91 这个时间对于所有步骤都是恒定的。所以用了这么多时间。
  • 看起来 GPU 正在等待慢速 CPU 操作。您如何输入数据?
  • @maxim,它的一次 csv 读取并将它们转换为 pandas。在此转换之后,我对数字列和分类列使用不同的 tf.feature_column 函数。然后将这些特征列的数组提供给 DNNRegressor 估计器中的 input_fn。
  • @user3457384 在某些情况下,输入批处理准备(在 CPU 中运行)比 GPU 操作慢。没有完整的代码就不能肯定地说。请尝试按照以下问题中的建议描述您的操作并提供摘要 - stackoverflow.com/questions/34293714/…

标签: python tensorflow neural-network tensorflow-gpu


【解决方案1】:

听起来您可能正在从 csv 读取数据并转换为 pandas DataFrame,然后使用 tensorflow 的 pandas_input_fn。这是 pandas_input_fn 实现的一个已知问题。您可以在https://github.com/tensorflow/tensorflow/issues/13530 跟踪问题。

为了解决这个问题,您可以对 i/o 使用不同的方法(例如,从 TFRecords 读取)。如果您想继续使用 pandas 并增加您的步数/秒,您可以减少您的 batch_size,尽管这可能会对您的估算器的学习能力产生负面影响。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-16
    • 2019-03-03
    • 2019-09-26
    • 1970-01-01
    • 2017-03-05
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    相关资源
    最近更新 更多