keras预测很慢

时间:2016-06-25 08:56:33

标签: performance theano keras theano-cuda

我正在进行强化学习任务,并决定使用keras NN模型进行Q值近似。这种方法很常见:在每次操作之后,奖励存储在内存重放数组中,然后我从中获取随机样本并使用新数据state-action => reward+predicted_Q拟合模型(更多详细信息here)。为了进行训练,必须为训练集中的每个项目预测Q值。

脚本运行速度很慢所以我开始调查了。分析显示, _predict_loop 方法占用了56,87%的累积时间: enter image description here 它看起来很奇怪,因为预测只是一种单向传播。只是一组数字的一次性乘法。我使用的模型非常简单:8个输入,隐藏层上5个节点,1个输出。

我已经安装并配置了CUDA,运行了一些示例测试并且它显示了GPU的使用,我也可以看到巨大的GPU负载。当我运行我的代码时 - 有一条消息:“使用gpu device 0:GeForce GT 730”,但我可以看到 GPU负载非常低(约10%)。

预测功能花费这么多时间是否正常?有没有办法使用GPU进行此计算?

2 个答案:

答案 0 :(得分:5)

看起来NN的大小太小而无法充分利用GPU。通常,只有当输入/隐藏/输出层大小大于200~500(取决于实现代码)时,GPU才比多核CPU快。

然而,你的NN大小只有8/5/1,这意味着大部分时间都用在GPU开销上,如CUDA内核启动,PCIe数据传输等。在这种情况下,呼叫数量是主要的决定训练时间的因素。为了加快速度,您可能需要在CPU上训练模型,并使用C / C ++等编程语言来降低开销。

答案 1 :(得分:1)

众所周知的问题。这就是我们拥有CNMeM的原因。这是一个由NVIDIA开发的库,它帮助深度学习框架管理CUDA内存。 CNMeM已集成在Theano中,因此您无需安装任何东西。要在Theano中启用CNMeM,您必须添加.theanorc行:

[lib]
cnmem = 0.8

cnmem值指定为Theano分配的GPU内存量。引用文档:

  

0:未启用。

     

0< N< = 1:使用总GPU内存的这一部分(剪辑为.95   对于驱动程序内存)。 [注意:例如,这应该是一个浮点值   0.25或1.0]

     

。 > 1:以兆字节(MB)的内存使用此数字。

有关.theanorc和CuDNN(另一个有用的lib)的更多信息,请访问:

http://ankivil.com/making-theano-faster-with-cudnn-and-cnmem-on-windows-10/