Keras 的“正常”LSTM 使用 GPU?

数据挖掘 喀拉斯 张量流 lstm
2021-09-18 13:08:01

我正在运行 Keras LSTM(不是CuDNNLSTM),但我注意到我的 GPU 负载不足。我需要经常辍学,所以我只能坚持LSTMLSTMGPU是否协助“正常” ?如果是这样,有LSTM什么CuDNNLSTM不同?我认为CuDNNLSTM使用 CUDNN API(LSTM不是吗?

同样,正常LSTM应该在 GPU 或 CPU 上运行得更快吗?

3个回答

不知道你是否发现了这一点,但我最近一直在研究它,这就是我发现的:

“正常”LSTM 是否由 GPU 辅助?

正常的 LSTM 应该在 GPU 或 CPU 上运行得更快吗?

就像@pcko1 所说,LSTM如果您安装了 tensorflow-gpu,则由 GPU 辅助,但它不一定在 GPU 上运行得更快。在我的情况下,它实际上减慢了大约 2 倍,因为LSTM它相对较小,而且 CPU 和 GPU 之间的复制量使训练速度变慢。我认为有了更大的网络,它会加快速度。我还发现LSTM只使用了约 25% 的 GPU,而CuDNNLSTM使用了约 35% 的 GPU,但尚未彻底调查以确定差异来自何处。

LSTM 和 CuDNNLSTM 有何不同?

这个 github 问题讨论了如何将 CuDNNLSTM 层转换为 LSTM 层。我发现 CuDNNLSTM 如何具有 2 倍的权重/偏差作为 LSTM 以及如何从一种转换到另一种非常有启发性。

“正常”LSTM 是否由 GPU 辅助?

是的,如果您已安装tensorflow-gpu.

如果是这样,LSTM 和 CuDNNLSTM 有何不同?我认为 CuDNNLSTM 使用 CUDNN API(而 LSTM 没有?同样,普通的 LSTM 应该在 GPU 或 CPU 上运行得更快吗?

您是否尝试过谷歌搜索:)?如果您粘贴此问题,则会弹出很多链接,例如:

Tensorflow 中最小的计算单元称为 op-kernel。并且这个 op-kernel 可以从 cpu、gpu、加速器等各种设备上处理。如果 op-kernel 分配给 gpu,则应该调用 gpu 库中的函数,如 CUDA、CUDNN、CUBLAS。

普通的 Keras LSTM 是用几个 op-kernels 实现的。如果您使用“keras.layers.LSTM(~,implementation=2)”之类的函数,那么您将获得具有两个 matmul op-kernels、1 个 biasAdd op-kernels、3 个逐元素乘法 op-kernels 的 op-kernel graph ,以及几个关于非线性函数和矩阵操作的操作内核。

这些操作内核中的每一个都使用独立的库来实现,并且在这些操作内核之间没有应用任何优化。每个操作内核都按执行顺序排序,并在 GPU 中单独处理。(不考虑对多个操作内核进行优化处理。)

但是,如果您在 keras 中使用 CUDNNLSTM 层,则会创建优化的 op-kernel,它会立即执行所有 os 的 LSTM 单元计算。与普通 LSTM 层相比,它提高了性能(批次/秒)以及内存的使用。