2016-11-18 6 views
0

Я пытаюсь использовать несколько графических процессоров с многопроцессорностью в Python3. Я могу запустить простой тестовый пример, как следующее:Возможные причины CUDA получить ошибку свойств устройства с помощью Python3/Theano?

import theano 
import theano.tensor as T 
import multiprocessing as mp 
import time 
# import lasagne 

def target(): 
    import theano.sandbox.cuda 
    print("target about to use") 
    theano.sandbox.cuda.use('gpu1') 
    print("target is using") 
    import lasagne 
    time.sleep(15) 
    print("target is exiting") 

x = T.scalar('x', dtype='float32') 

p = mp.Process(target=target) 

p.start() 

time.sleep(1) 
import theano.sandbox.cuda 
print("master about to use") 
theano.sandbox.cuda.use('gpu0') 
print("master is using") 
import lasagne 
time.sleep(4) 
print("master will join") 

p.join() 
print("master is exiting") 

Когда я запускаю это, я мастер и породил процесс каждый из которых использует GPU успешно:

>> target about to use 
>> master about to use 
>> Using gpu device 1: GeForce GTX 1080 (CNMeM is enabled with initial size: 50.0% of memory, cuDNN 5105) 
>> target is using 
>> Using gpu device 0: GeForce GTX 1080 (CNMeM is enabled with initial size: 50.0% of memory, cuDNN 5105) 
>> master is using 
>> master will join 
>> target is exiting 
>> master is exiting 

Но в более сложных код базы, когда я пытаюсь установить ту же схему, то порождал работник терпит неудачу с:

ERROR (theano.sandbox.cuda): ERROR: Not using GPU. Initialisation of device 1 failed: 
Unable to get properties of gpu 1: initialization error 
ERROR (theano.sandbox.cuda): ERROR: Not using GPU. Initialisation of device gpu failed: 
Not able to select available GPU from 2 cards (initialization error). 

И я с трудом чеканка вниз, что вызывает это. В приведенном выше фрагменте кода проблема воссоздается, если lasagne импортируется вверху, перед форкировкой. Но мне удалось запретить мой код импортировать lasagne до тех пор, пока не разветвится и не попытается использовать графический процессор (я проверил sys.modules.keys()), и все еще проблема сохраняется. Я не вижу ничего, что связывает Теано, кроме самого theano и theano.tensor, импортируемого перед форкингом, но в приведенном выше примере это прекрасно.

Кто-нибудь еще преследовал что-то подобное?

+0

Что такое ОС хост-системы? –

+0

Ubuntu 16.04, CUDA 8.0 и кратковременный Theano 0.9-dev4. –

+1

Может быть, проблема с «кровотечением» может быть проблемой. Вы пробовали со стабильной версией? –

ответ

0

ОК, это оказалось очень простым ... У меня был бродячий import theano.sandbox.cuda в предварительном положении, но это должно произойти только после разветвления. По-прежнему необходимо было также переместить lasagne импорт после вилки, в случае, если это поможет кому-то еще.

(В моем случае мне нужна информация от lasagne -го кода перед вилкой, поэтому я должен запустить процесс выброса, который загружает это и возвращает соответствующие значения в главный поток. соответственно, строить общие объекты, fork, а затем каждый процесс создает свои собственные объекты на основе lasagne, которые работают на собственном графическом процессоре.)

0

Перед тем, как пытаться настроить Theano с Python3 на ПК с Windows с GTX-980, я столкнулся с подобной проблемой. Он отлично работал с процессором, но он просто не использует графический процессор.

После этого я попытался настроить его с помощью Python2/Theano, и проблема была решена. Я полагаю, что это может быть что-то не так с версией CUDA. Вы можете дать Python2/Theano попробовать (при необходимости виртуальную среду).

+0

Приятно знать, что я не один! Мы просто перенесли все на Python3, и нет возврата, но мне нравится ваше предложение создать виртуальные envs и попробовать разные версии. Я чувствую, что, поскольку примерный сниппт работает, должно быть что-то еще импортируемое или настроенное, что вызывает проблему, и мне просто нужно найти его и отложить его до тех пор, пока не будут выполняться процессы разветвления? –