我的GPU是Titan X应该比CPU(Intel(R)Xeon(R)CPU E5-2643 v3 @ 3.40GHz)更快。但我的两个模型在GPU上运行速度稍慢。一个型号在GPU上运行得更快。在这两个模型中,一个用tensorflow实现,另一个用theano实现。这两个模型的共同特征是它们都属于分层Bi-LSTM模型,这意味着底部Bi-LSTM的最后输出作为输入馈入另一个。所以这两个模型都不太简单。 所以我想询问一下他们在GPU上运行速度慢的原因是什么?
答案 0 :(得分:0)
我可以为theano方面提供一些信息:
Theano与scan
有多个问题,这是RNN循环的主力。
这里有一些:
由于theano在编译时不知道形状信息,因此得到的编译例程可能不是最理想的(比如使用gemv
用于矢量矢量点)。
(截至2016年11月)当前版本的scan
是在cython中实现的,它比纯C ++版本有一些开销。如果RNN在一个步骤上没有太多的计算密度,这可能很重要。
管道不好。使用scan
实现映射操作通常比直接使用底层操作要慢。显然优化器还为时过早,仍然无法识别这类问题。
解决方案:
尝试升级到开发版。他们一直在加班加点。
如果能够负担编译时间,请尝试展开RNN(使用普通循环来构建图形而不是scan
)。
我提出PR来解决现在它是开发大师分支的一部分。gemv
问题,仅针对旧的GPU后端。试一试(如果还没有合并)。