Выберите GPU во время исполнения в Theano

Я тренирую нейронные сети с theano и lasagne на машине с 4 GPU. мой .theanorc содержит следующие строки:

[global]
device = gpu0

Поэтому, когда в Python я выполняю import theano, Я получил Using gpu device 0: GRID K520

Что если после импорта theano я решил использовать, скажем, gpu1? Я хотел бы сделать это динамически, то есть без редактирования .theanorc Является ли это возможным? Или даже выбрать его во время выполнения?

2 ответа

Решение

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

РЕДАКТИРОВАТЬ: Theano теперь основан на серверной части массива GPU, и следующий API больше не доступен.

Как упомянул @EelkeSpaak, вы не можете изменить устройство GPU после того, как theano был импортирован. Но если вы хотите выбрать его программно, это возможно без изменения переменных среды.

  1. Убедитесь, что вы не выбираете устройство в своем файле.theanorc. Так что ничего подобного

    device=gpu

  2. перед звонком import theano выберите устройство GPU следующим образом:

    import theano.sandbox.cuda
    theano.sandbox.cuda.use('gpu1')
    
    #Results in Using gpu device 1: Tesla K80
    
Другие вопросы по тегам