在Keras
,高级深度学习库中,有多种类型的循环层;这些包括LSTM
(长期短记忆)和CuDNNLSTM
。根据{{3}},CuDNNLSTM
是:
由CuDNN支持的快速LSTM实施。 只能使用TensorFlow后端在GPU上运行。
我相信Keras会尽可能自动使用GPU。根据{{3}},要有一个工作的TensorFlow GPU后端,你需要CuDNN:
您的系统必须安装以下NVIDIA软件:
- NVIDIA的Cuda Toolkit(> = 7.0)。我们建议使用9.0版。有关详细信息,请参阅NVIDIA的文档。确保将相关的Cuda路径名附加到LD_LIBRARY_PATH环境变量,如NVIDIA文档中所述。
- 与NVIDIA的Cuda Toolkit相关的NVIDIA驱动程序。
- cuDNN (> = v3)。我们建议使用6.0版。有关详细信息,请参阅NVIDIA的文档,特别是将适当的路径名附加到LD_LIBRARY_PATH环境变量的说明。
因此,CuDNNLSTM
与使用TensorFlow GPU后端的普通LSTM
有何不同?当找到可用的TensorFlow GPU后端时,会自动选择CuDNNLSTM
并替换正常的LSTM
吗?
答案 0 :(得分:14)
你为什么不亲自尝试看看?
在我的例子中,使用LSTM
训练模型需要10分30秒。
只需将呼叫从LSTM()
切换到CuDNNLSTM()
只需不到一分钟。
我还注意到,切换到CuDNNLSTM()
的速度也会提升model.evaluate()
和model.predict()
。
答案 1 :(得分:4)
在 TensorFlow 2.0 中,内置的 LSTM 和 GRU 层已更新以利用 CuDNN 内核默认情况下,当 GPU 可用时。通过此更改,之前的 keras.layers.CuDNNLSTM/CuDNNGRU 层已被弃用,您可以构建模型而无需担心将在其上运行的硬件。
由于 CuDNN 内核是在某些假设下构建的,这意味着如果您更改内置的默认值,该层将无法使用 CuDNN 内核 LSTM 或 GRU 层。
查看 tensorflow RNN 文档:https://www.tensorflow.org/guide/keras/rnn
答案 2 :(得分:2)
TL; DR;区别在于模型训练时间提高了15倍!
性能基准:标准测试机的比较。
对612235个样本进行了1次培训。
keras.layers.LSTM
Intel i5-4690 CPU only:
612235/612235 [==============================] - 3755s 6ms/step - loss: 2.7339 - acc: 0.5067 - val_loss: 2.1149 - val_acc: 0.6175
GTX:950 & Intel i5-4690:
612235/612235 [==============================] - 1417s 2ms/step - loss: 2.7007 - acc: 0.5137 - val_loss: 2.0983 - val_acc: 0.6199
使用GPU可获得2.5倍的增益。
GTX:970 & Intel i5-4690:
612235/612235 [==============================] - 1322s 2ms/step - loss: 1.9214 - acc: 0.6442 - val_loss: 1.8808 - val_acc: 0.6461
强大的GPU带来不可思议的收益。
RTX 2070 & Intel i7-9700K:
612235/612235 [==============================] - 1012s 2ms/step - loss: 2.7268 - acc: 0.5111 - val_loss: 2.1162 - val_acc: 0.6234
即使进行了出色的硬件升级,收益也很小!
keras.layers.CuDNNLSTM
RTX 2070 & Intel i7-9700K:
612235/612235 [==============================] - 69s 112us/step - loss: 1.9139 - acc: 0.6437 - val_loss: 1.8668 - val_acc: 0.6469
CPU增益提高了54倍!
比传统(非Cuda)LSTM实现高15倍!
答案 3 :(得分:1)
GPU非常适合大规模并行计算,大多数线性代数运算可以并行化以提高性能,诸如矩阵乘法和梯度下降之类的Vector操作可以应用于与GPU支持并行执行的大型矩阵。 CUDA -计算统一设备架构提供了一个接口,该接口允许矢量操作利用GPU并行性。 CuDNN使用CUDA在GPU上实现用于大型矩阵运算的内核。
在这里,CuDNNLSTM是为CUDA并行处理而设计的,如果没有GPU,它将无法运行。但是LSTM是为普通CPU设计的。由于并行性,执行时间更快。