外卖面条不能有效利用

2024-05-16 18:59:02 发布

您现在位置:Python中文网/ 问答频道 /正文

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

最初我认为这是由于随机数发生器(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 profiler可以显示“编号沙盒.mrg_uniform“占用了86.7%的执行时间,我不明白。在

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


Tags: py网络githubmastercomgputheano利用率
2条回答

正如talonmies所指出的,问题是千层面使用的是CPU版本的RNG(mrg U制服)而不是GPU版本(GPU mrg U制服)。 我还没有找到一个优雅的解决方案,但以下两个黑客解决了这个问题。在

将第93行cuda_enabled = False更改为cuda_enabled = True

https://github.com/Theano/Theano/blob/master/theano/sandbox/cuda/__init__.py

或者

更改第57行
self._srng = RandomStreams(get_rng().randint(1, 2147462579))

self._srng = "RandomStreams(get_rng().randint(1, 2147462579),use_cuda = True)在{}

我还认为您应该能够通过直接在主脚本中输入theano.sandbox.cuda.use(enable_cuda=True)来实现相同的功能。然而,这并不是因为某些原因对我不起作用。在

如果您查看mrg_uniformcode,您可以看到它是随机生成器的纯python CPU实现。您还可以看到同一个生成器有一个GPU version,但是您正在运行的代码显然没有使用它。在

所以答案不是你的GPU利用率下降了这么多,而是你的CPU利用率大大提高了,因为你使用的是纯Python随机生成器。很明显,解决方案是找出如何切换到GPU加速的随机发生器。在

相关问题 更多 >