2

私は DNN 音声強調プロジェクトに theano と lasagna を使用しています。ラザニアのドキュメント (/github.com/Lasagne/Lasagne/blob/master/examples/mnist.py) の mnist の例と非常によく似たフィードフォワード ネットワークを使用します。このネットワークは、いくつかのドロップアウト層を使用しています。Nvidia Titan X GPU でネットワークをトレーニングしています。ただし、ドロップアウトを使用しない場合、GPU 使用率は約 60% で、1 エポックは約 60 秒かかりますが、ドロップアウトを使用すると、GPU 使用率は 8% に低下し、各エポックは約 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 プロファイラーを実行すると、「theano.sandbox.rng_mrg.mrg_uniform」が実行時間の 86.7% を占めていることがわかりますが、これはわかりません。

誰かが私の GPU 使用率を殺してしまう原因について考えを持っているなら、私はそれを感謝します.

4

2 に答える 2

1

コードmrg_uniform見ると、乱数発生器の純粋な Python CPU 実装であることがわかります。同じジェネレーターのGPU バージョンがあることもわかりますが、実行しているコードは明らかにそれを使用していません。

答えは、純粋な Python ランダム ジェネレーターを使用しているため、CPU 使用率が大幅に増加しているにもかかわらず、GPU 使用率が大幅に低下しているということではありません。解決策は明らかに、GPU で高速化されたランダム ジェネレーターに切り替える方法を考え出すことです。

于 2015-11-08T10:56:05.750 に答える
1

talonmies が指摘したように、問題は、ラザニアが GPU バージョン (GPU_mrg_uniform) ではなく CPU バージョンの RNG (mrg_uniform) を使用していたことでした。私はまだエレガントな解決策を見つけていませんが、次の 2 つのハックで問題を解決できます。

93 行目cuda_enabled = Falsecuda_enabled = Truein に変更します。

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)in に変更https://github.com/Lasagne/Lasagne/blob/master/lasagne/layers/noise.py

theano.sandbox.cuda.use(enable_cuda=True)また、メイン スクリプトに直接入力するだけで同じことができると思います。ただし、これは何らかの理由でうまくいきませんでした。

于 2015-11-08T13:48:50.420 に答える