2016-11-25 8 views
0

у меня есть AWS машина с 4-мя графическими процессорами:theanorc для нескольких графических процессоров

00:03.0 VGA compatible controller: NVIDIA Corporation GK104GL [GRID K520] (rev a1) 
00:04.0 VGA compatible controller: NVIDIA Corporation GK104GL [GRID K520] (rev a1) 
00:05.0 VGA compatible controller: NVIDIA Corporation GK104GL [GRID K520] (rev a1) 
00:06.0 VGA compatible controller: NVIDIA Corporation GK104GL [GRID K520] (rev a1) 

и мой файл theanorc выглядит следующим образом:

[global] 
floatX = float32 
device = gpu0 

[lib] 
cnmem = 1 

Когда я открываю один jupyter ноутбук и импорта Theano я получаю Следующий (который я полагаю, только с помощью одного GPU):

Using Theano backend. 
Using gpu device 0: GRID K520 (CNMeM is enabled with initial size: 95.0% of memory, cuDNN 5105) 
/home/sabeywardana/anaconda3/lib/python3.5/site-packages/theano/sandbox/cuda/__init__.py:600: UserWarning: Your cuDNN version is more recent than the one Theano officially supports. If you see any problems, try updating Theano or downgrading cuDNN to version 5. 

Однако, если открыть вторую jupyter ноутбук на одной и той же ма chine в то же время. Тогда я получаю сообщение об ошибке:

ERROR (theano.sandbox.cuda): ERROR: Not using GPU. Initialisation of device 0 failed: 
initCnmem: cnmemInit call failed! Reason=CNMEM_STATUS_OUT_OF_MEMORY. numdev=1 

ERROR (theano.sandbox.cuda): ERROR: Not using GPU. Initialisation of device gpu failed: 
initCnmem: cnmemInit call failed! Reason=CNMEM_STATUS_OUT_OF_MEMORY. numdev=1 

Если я вручную изменить .theanorc использовать gpu1 то второй jupyter ноутбук отлично работает. Итак, вопрос: Есть ли способ настроить .theanorc, чтобы просто получить доступный графический процессор?

+0

Не уверен, что я есть. Хотя пытаюсь. Попробуйте заменить gpu0 только gpu. Дайте мне знать, если это сработает. –

+0

Пробовал это и 'gpu?' Без везения. –

+0

Проверьте мой ответ. –

ответ

2

Вы можете использовать device=gpu, который выберет первый доступный графический процессор. Однако в вашем случае GPU 0 по-прежнему будет считаться «доступным» (у него осталось мало памяти, но выполнение по-прежнему возможно). Вы можете использовать nvidia-smi, чтобы настроить вычислительный режим ваших графических процессоров на «Исключительный поток», чтобы первый блокнот «блокировал» первый графический процессор для его исключительного использования, а второй ноутбук будет использовать другой.

Другой вариант - изменить переменную среды THEANO_FLAGS изнутри ноутбука перед импортом theano. Что-то вроде:

import os 

os.environ['THEANO_FLAGS'] = os.environ.get('THEANO_FLAGS', '') + ',' + 'device=gpu1' 

import theano 
+0

Я думаю, вместо того, чтобы менять переменную env изнутри ноутбука, лучше, чтобы он мог запустить ноутбук, выполнив $ THEANO_FLAGS = device = gpuN jupyter notebook. – Sentient07

1

Невозможно изменить устройство gpu после импорта theano.

Может быть, вы можете попробовать this-

import os 
os.system("THEANO_FLAGS='device=gpu0' python script_1.py") 
os.system("THEANO_FLAGS='device=gpu1' python script_2.py") 
os.system("THEANO_FLAGS='device=gpu1' python script_3.py") 
os.system("THEANO_FLAGS='device=gpu1' python script_4.py") 

Если вы хотите сделать это внутри ноутбука (более Программный способ), вы можете использовать следующий фрагмент кода: -

import theano.sandbox.cuda 
theano.sandbox.cuda.use("gpu0") 

Вставить это каждый записную книжку и изменить идентификатор gpu. Это будет работать.

Смежные вопросы