【问题标题】:Why is Keras LSTM on CPU three times faster than GPU?为什么 CPU 上的 Keras LSTM 比 GPU 快三倍?
【发布时间】:2019-02-28 01:32:18
【问题描述】:

我使用this notebook from Kaggle 运行 LSTM 神经网络。

我已经开始训练神经网络,我发现它太慢了。它几乎比 CPU 训练慢三倍。

  • CPU perfomance: 每个 epoch 8 分钟;
  • GPU perfomance: 每个 epoch 26 分钟。

在此之后,我决定在 this question on Stackoverflow 中找到答案,并应用了 CuDNNLSTM (仅在 GPU 上运行) 而不是 LSTM

因此,GPU 性能变得每个 epoch 仅 1 分钟,模型的准确率下降了 3%。

问题:

1) 有人知道为什么 GPU 在经典 LSTM 层中的工作速度比 CPU 慢吗?我不明白为什么会这样。

2) 为什么当我使用CuDNNLSTM 而不是LSTM 时,训练变得更快并且模型的准确率下降了?

附:

My CPU: Intel Core i7-7700 处理器(8M 高速缓存,最高 4.20 GHz)

My GPU: nVidia GeForce GTX 1050 Ti (4 GB)

【问题讨论】:

    标签: python tensorflow machine-learning keras gpu


    【解决方案1】:

    猜测它只是一个不同的更好的实现,如果实现不同,你不应该期望相同的结果。

    一般来说,在 GPU 上高效地实现算法困难,要获得最佳性能需要特定于架构的实现。因此,如果特定于 Nvidia 的 GPU 的实现与 GPU 的通用实现相比具有增强的性能,这并不奇怪。与致力于通用 CNN 实现的团队相比,Nvidia 会投入更多的资源来加速其 GPU 代码,这也不足为奇。

    另一种可能是后端使用的数据类型已经从双精度变为单精度甚至半精度浮点数。较小的数据类型意味着您可以以准确性为代价更快地处理更多数字。对于 NN 应用程序,这通常是可以接受的,因为没有个别数字需要特别准确才能使网络产生可接受的结果。

    【讨论】:

    • 但是为什么 LSTM NN 在 CPU 上的运行速度比在 GPU 上快呢?这看起来很奇怪。
    • @lemon:CPU 运行速度比 GPU 快的情况并不少见。请记住:GPU 上的串行操作比 CPU 慢几倍,并且数据通过一根细吸管流入 GPU。 GPU 通过能够进行大规模并行操作来克服这些缺点。我无法谈论您的特定实现,但是,在您的情况下,您使用的数据或通用 GPU 实现与实际硬件的特定匹配可能很差。
    • 根据我的经验,在较小的批量大小上,CPU 往往比 GPU 运行得更快。使用 CuDNN 总是更快。
    • @from keras import michael,谢谢你的回答!以后我会牢记这一点。学习别人的经验是很愉快的。
    【解决方案2】:

    在 Keras 中,使用 CuDNN 的快速 LSTM 实现。

    model.add(CuDNNLSTM(units, input_shape=(len(X_train), len(X_train[0])), return_sequences=True))
    

    它只能在带有 TensorFlow 后端的GPU 上运行。

    【讨论】:

    • 使用 CuDNNLSTM 并没有改变我的情况。即使使用 CuDNNLSTM,代码在 CPU 上的运行速度也比在 GPU 上快 3.5 倍。
    • 你必须在 GPU 上微调 CuDNNLSTM 的参数和超参数。
    【解决方案3】:

    我今天遇到了类似的问题,发现了两件事可能对其他人有帮助(这是在具有约 2.1MM 行的数据集上的回归问题,在具有 4 个 P100 GPU 的机器上运行):

    1. 在 GPU 机器上使用 CuDNNLSTM 层而不是 LSTM 层将拟合时间从每 epoch 约 13500 秒减少到约 400 秒。
    2. 增加批量大小(约 500 到约 4700)将其减少到每个 epoch 约 130 秒。

    减小批量大小会增加损失和验证损失,因此您需要做出权衡取舍的决定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-08
      • 2016-02-25
      • 2020-03-13
      • 2018-02-13
      • 2022-06-29
      • 2023-03-10
      相关资源
      最近更新 更多