Выберите GPU во время исполнения в Theano
Я тренирую нейронные сети с помощью anano и lasagne на машине с 4 GPU. Мой .theanorc
содержит следующие строки:
[global]
device = gpu0
Итак, когда в python я выполняю import theano
, я получаю Using gpu device 0: GRID K520
Что делать, если после импорта theano я решил использовать gpu1? Я бы хотел сделать это динамически, то есть без редактирования .theanorc
это возможно? Или даже выбрать его во время выполнения?
Ответы
Ответ 1
Я боюсь, что после того, как Theano был импортирован, невозможно изменить исполняющее устройство. Из документации:
config.device
Значение строки: либо 'cpu', 'gpu', 'gpu0', 'gpu1', 'gpu2' или 'gpu3'
[...]
Значение этого флага не может быть изменено во время выполнение программы.
Бонус: однако, скажем, вы хотели, чтобы два процесса Python выполнялись на отдельном графическом процессоре (это то, что вы хотите?), тогда вы можете сделать что-то вроде:
import os
os.system("THEANO_FLAGS='device=gpu0' python myscript.py")
os.system("THEANO_FLAGS='device=gpu1' python myscript.py")
или взломать/расширить модуль Python multiprocessing (который работает с помощью подпроцессов нереста), чтобы гарантировать, что флаг установлен до появления дочернего процесса.
Ответ 2
EDIT:
В настоящее время Theano основана на базе массива GPU, и следующий API больше не доступен.
Как упоминалось в @EelkeSpaak, вы не можете изменить устройство GPU после того, как было импортировано theano. Но если вы хотите выбрать его программно до этого, не изменяя переменные среды.
-
Убедитесь, что вы не выбрали устройство в вашем файле .theanorc.
Поэтому ничего подобного:
device=gpu
-
перед вызовом import theano
выберите устройство GPU следующим образом:
import theano.sandbox.cuda
theano.sandbox.cuda.use('gpu1')
#Results in Using gpu device 1: Tesla K80