2017-03-21 1 views
0

Si j'exécute un modèle tensorflow (par exemple cifar10) avec un GPU sur une plate-forme multi-gpu, tensorflow crée et diffuse des données (formation/inférence) sur tous les GPU disponibles. Depuis que j'ai défini num_gpus sur 1, il fonctionne sur un seul GPU. Cependant, je peux voir les mêmes processus sur d'autres gpus. Est-ce que c'est prévu? Y a-t-il une raison à cela? J'ai rapidement vérifié avec d'autres frameworks DL comme Caffe, mais le design/fonctionnement est différent. Bien sûr, je peux spécifier device au niveau du code, mais je suis curieux. En outre, cette conception par défaut peut être gênante pour les autres utilisateurs si la machine est partagée.Périphérique Tensorflow par défaut sur les multi-GPU

tensorflow/core/common_runtime/gpu/gpu_device.cc:977] Creating TensorFlow device (/gpu:0) -> (device: 0, name: 

tensorflow/core/common_runtime/gpu/gpu_device.cc:977] Creating TensorFlow device (/gpu:1) -> (device: 1, name: 

tensorflow/core/common_runtime/gpu/gpu_device.cc:977] Creating TensorFlow device (/gpu:2) -> (device: 2, name: 

tensorflow/core/common_runtime/gpu/gpu_device.cc:977] Creating TensorFlow device (/gpu:3) -> (device: 3, name: ... 



+-----------------------------------------------------------------------------+ 
| Processes:              GPU Memory | 
| GPU  PID Type Process name        Usage  | 
|=============================================================================| 
| 0  67056 C python          15623MiB | 
| 1  67056 C python          15499MiB | 
| 2  67056 C python          15499MiB | 
| 3  67056 C python          15499MiB | 
| 4  67056 C python          15499MiB | 

Répondre

1

Par défaut, au démarrage tensorflow alloue la quasi-totalité de la mémoire GPU sur tous les appareils qui sont visibles à elle. Toutefois, sauf indication contraire (dans un

bloc with tf.device():, il ne fera que les opérations de place sur le dispositif connu (à tensorflow) comme "/gpu:0", et les autres processeurs graphiques sera inactif

Il y a deux solutions de contournement.

  1. Définissez la variable d'environnement CUDA_VISIBLE_DEVICES=0 (ou 1, 2, etc., selon le cas) avant de lancer python pour contrôler les dispositifs sont visibles tensorflow. Cela peut également être configuré en utilisant les options de tf.ConfigProtovisible_device_list lors de la création de votre premier tf.Session.

  2. Dans l'option tf.ConfigProtoallow_growth=True lors de la création de votre premier tf.Session. Cela empêchera TensorFlow de pré-allouer toute la mémoire du GPU.