2015-11-08 2 views
2

Я использую theano и lasagne для проекта улучшения речи DNN. Я использую сеть передачи данных, очень похожую на пример mnist в документации по lasagne (/github.com/Lasagne/Lasagne/blob/master/examples/mnist.py). В этой сети используется несколько уровней отсева. Я тренирую свою сеть на графическом процессоре Nvidia Titan X. Однако, когда я не использую исключение, мое использование графического процессора составляет приблизительно 60%, а одна эпоха занимает около 60 с, но когда я использую исключение, мое использование графического процессора падает до 8%, а каждая эпоха занимает приблизительно 600 секунд. Это независимо от коэффициента отсева устанавливается на 20% или 0,1%.Лазерный проигрыватель не использует графический процессор эффективно

Первоначально я думал, что это связано с генератором случайных чисел (RNG), используемым для создания маски отбрасывания, которая не запускалась на графическом процессоре. Тем не менее, в коде (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 % от времени выполнения, которое я не понимаю.

Если у кого-то есть представление о том, что убивает мое использование графического процессора, я был бы признателен.

ответ

1

Если вы посмотрите на code на номер mrg_uniform, вы можете увидеть, что это чистая реализация ЦП на случайном генераторе. Вы также можете увидеть, что есть GPU version того же генератора, но код, который вы используете, по-видимому, не использует его.

Таким образом, ответ заключается не в том, что использование вашего GPU снижается, так как использование вашего процессора значительно увеличивается, потому что вы используете чистый генератор случайных чисел на Python. Очевидно, решение состоит в том, чтобы решить, как переключиться на ускоренный генератор с ускорением GPU.

+1

Большое спасибо. Это решило мою проблему. Я написал свой hack/solution ниже –

1

Как указывалось talonmies, проблема заключалась в том, что лазанья использовала версию процессора RNG (mrg_uniform), а не версию GPU (GPU_mrg_uniform). Я еще не нашел элегантного решения, но следующие два хака решают проблему.

Либо изменение линии 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) в https://github.com/Lasagne/Lasagne/blob/master/lasagne/layers/noise.py

Я также считаю, вы должны быть в состоянии делать то же самое просто набрав theano.sandbox.cuda.use(enable_cuda=True) непосредственно в главном скрипте. Однако это не по каким-то причинам не работает для меня.