首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Keras在CPU上的速度是GPU的三倍?

为什么Keras在CPU上的速度是GPU的三倍?
EN

Stack Overflow用户
提问于 2018-09-24 13:56:09
回答 3查看 5.9K关注 0票数 10

我使用这是卡格尔的笔记本来运行LSTM神经网络。

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

  • CPU perfomance:每周期8 min;
  • GPU perfomance:每小时26 min。

在此之后,我决定在关于堆栈溢出的问题中找到答案,我应用了一个CuDNNLSTM (它只运行在GPU上),而不是LSTM

因此,GPU的性能仅为1 min /a的,模型的准确性下降了3%。

问题:

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

2)为什么当我使用CuDNNLSTM而不是LSTM时,训练速度更快,模型的准确性降低?

P.S.:

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-09-24 14:00:47

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

通常,在GPU上高效地实现算法是困难的,要获得最大的性能需要特定于体系结构的实现。因此,如果特定于Nvidia的GPU的实现相对于GPU的一般实现而言性能有所提高,那就不足为奇了。这也不奇怪,Nvidia会投入更多的资源来加速他们的GPU代码,而不是一个致力于CNN一般实现的团队。

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

票数 9
EN

Stack Overflow用户

发布于 2019-01-22 23:08:21

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

  1. 在GPU机上使用CuDNNLSTM层代替LSTM层,使拟合时间从~13500秒缩短到每小时~400秒。
  2. 增大批数(~500 ~ ~4700),每小时~130秒。

减少批次大小会增加损失和val损失,因此您需要对要做的权衡做出决定。

票数 5
EN

Stack Overflow用户

发布于 2018-10-30 12:10:35

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

代码语言:javascript
复制
model.add(CuDNNLSTM(units, input_shape=(len(X_train), len(X_train[0])), return_sequences=True))

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52481006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档