【问题标题】:Tensorflow: How to run many training minibatch steps?Tensorflow:如何运行许多训练小批量步骤?
【发布时间】:2017-04-11 23:35:52
【问题描述】:

我正在尝试加快前馈网络的训练速度(层大小:20-80-40-20-2。)我的数据集有大约 100 000 个数据点。我正在使用以下代码来训练模型:

for ep in range(epochs):
    for i in range(0, N, mini_batch_sz):
        j = i + mini_batch_sz
        sess.run(train_op, feed_dict={vX:X[i:j], vY:Y[i:j]})

其中 epochs 和 mini_batch_sz 分别为 10000 和 25。这个循环只会在每个 python 循环中执行一个小批量步骤。我在训练期间的 GPU 负载仅为 15%。我想知道是否可以将多个小批量训练数据传递给tensorflow,以减少python与底层tensorflow引擎的交互?

【问题讨论】:

  • 瓶颈通常不是python和底层tensorflow引擎的交互。这里有几件事你可以尝试加速代码:tensorflow.org/performance/performance_guide
  • 谢谢,我知道提到的页面并尝试了其中的一些,不幸的是,没有任何帮助。我注意到的另一件事是,我的训练作业在 CPU(有 6 个内核)上运行的速度比在具有超过 2K cuda 单元的 GPU 上运行得快得多(快 2 倍)。此外,我的训练数据集只有几 MB 大小,所有内容都已加载并预处理到主内存中。
  • 在您发布的内容中,除非您的数据 X 和 Y 在列表中而不是 numpy 数组中,否则我并没有发现任何问题。所以我建议你添加一个计时器并打印出你在sess.run 的通话中花费了多长时间以及在sess.run 之外花费了多长时间。如果你不是(我怀疑你不是),你应该在sess.run 之外花费微不足道的时间,找出原因,GPU 将一直处于空闲状态。

标签: session optimization tensorflow neural-network


【解决方案1】:

20-80-40-20-2 不是一个特别大的矩阵乘法集以使 GPU 饱和。此外,由于您在每个训练步骤中都从numpy(或列表)提供数据,因此从 Python 到 C++ 以及从 CPU 到 GPU 的副本都是关键路径的一部分。既然你提到你的训练数据只有几个MB的大小,你可以考虑将整个训练数据作为tf.constant放在GPU内存中,在GPU上做切片,只通过i和@987654326 @ 每个训练步骤。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    • 2017-01-19
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多