python - Lasagne dropoutlayer 无法有效利用 GPU

标签 python gpgpu theano deep-learning lasagne

我正在使用 theano 和 lasagne 进行 DNN 语音增强项目。我使用的前馈网络与千层面文档中的 mnist 示例非常相似 (/github.com/Lasagne/Lasagne/blob/master/examples/mnist.py)。该网络使用多个 dropout 层。我在 Nvidia Titan X GPU 上训练我的网络。然而,当我不使用 dropout 时,我的 GPU 利用率约为 60%,一个 epoch 大约需要 60 秒,但当我使用 dropout 时,我的 GPU 利用率下降到 8%,每个 epoch 大约需要 600 秒。这与辍学率设置为20%或0.1%无关。

最初我认为这是由于用于生成 dropout mask 的随机数生成器 (RNG) 导致的,它没有在 GPU 上运行。但是,在代码( https://github.com/Lasagne/Lasagne/blob/master/lasagne/layers/noise.py )中,似乎使用了 rng_mrg,它应该基于以下链接在 GPU 上运行: http://deeplearning.net/software/theano/tutorial/examples.html#other-implementations

运行theano分析器显示“theano.sandbox.rng_mrg.mrg_uniform”占用了86.7%的执行时间,我不明白。

如果有人知道什么会影响我的 GPU 利用率,我将不胜感激。

最佳答案

如果你看code对于mrg_uniform,您可以看到它是随机生成器的纯Python CPU实现。还可以看到有一个GPU version相同的生成器,但您正在运行的代码显然不使用它。

所以答案并不是你的 GPU 利用率下降那么多,而是你的 CPU 利用率大大增加,因为你使用的是纯 Python 随机生成器。显然,解决方案是找出如何切换到 GPU 加速随机生成器。

关于python - Lasagne dropoutlayer 无法有效利用 GPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33592778/

相关文章:

python - 在 python 中将 dbf 转换为 csv 的方法?

cuda - CUDA中的累积求和

installation - python conda 安装pymc : Compilation failed on import

ubuntu - 如何在ubuntu上查看theano版本

python - 内存错误: bad allocation when Pycharm shows barely any memory use

python - 将 pickle 文件写入 AWS 中的 s3 存储桶

cuda - Cuda C 中的加法赋值运算符

python - 在带有 Visual Studio 2013 的 Windows 8.1 64 位上安装带有 GPU 的 Theano

python - 使用 pep8 扫描完整的目录树

cuda - 2-GPU 卡上的 PCI-e channel 分配?