Выберите 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