2016-11-25 1 views
0

j'ai une machine aws avec 4 processeurs graphiques:theanorc pour plusieurs processeurs graphiques

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) 

et mon fichier theanorc ressemble à ceci:

[global] 
floatX = float32 
device = gpu0 

[lib] 
cnmem = 1 

Quand j'ouvre un cahier jupyter et Théano d'importation Je reçois la suivant (que je suppose est seulement en utilisant un 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. 

Cependant, si j'ouvre un deuxième bloc-notes de jupyter sur le même ma chine en même temps. Puis-je obtenir l'erreur:

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 

Si je change manuellement mon .theanorc à utiliser GPU1 puis le second cahier jupyter fonctionne très bien. Donc la question est: Y at-il un moyen de configurer .theanorc pour obtenir juste le GPU disponible?

+0

Je ne suis pas sûr que je suis. Bien qu'essayer. Essayez de remplacer gpu0 par gpu uniquement. Laissez-moi savoir si cela fonctionne. –

+0

essayé et 'gpu?' Sans succès. –

+0

Vérifie ma réponse. –

Répondre

2

Vous pouvez utiliser device=gpu, qui sélectionnera le premier GPU disponible. Cependant, dans votre cas, GPU 0 sera toujours considéré comme "disponible" (il ne reste plus beaucoup de mémoire, mais l'exécution est toujours possible). Vous pouvez utiliser nvidia-smi pour définir le mode de calcul de vos GPU sur "Exclusive Thread", de sorte que le premier bloc-notes "bloque" le premier GPU pour son usage exclusif, et le second bloc-notes en utilisera un autre.

Une autre option consiste à modifier la variable d'environnement THEANO_FLAGS depuis l'intérieur du portable, avant d'importer le fichier. Quelque chose comme:

import os 

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

import theano 
+0

Je pense qu'au lieu de changer la variable d'env de l'intérieur de cahier, c'est mieux qu'il peut commencer le cahier en faisant $ THEANO_FLAGS = périphérique = gpuN jupyter cahier. – Sentient07

1

Il n'est pas possible de changer le périphérique gpu après l'avoir importé.

Peut être que vous pouvez essayer 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") 

Si vous voulez le faire à l'intérieur de l'ordinateur portable (plus programmatique) vous pouvez utiliser extrait suivant: -

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

coller ce à tous les cahier et changez l'identification de gpu. Ça va marcher.