Comment obtenir courant GPUs disponible en tensorflow?

j'ai un plan pour utiliser TensorFlow distribué, et J'ai vu TensorFlow peut utiliser GPUs pour la formation et les essais. Dans un environnement de cluster, chaque machine pourrait avoir 0 ou 1 ou plus GPUs, et je veux exécuter mon graphique de TensorFlow dans GPUs sur autant de machines que possible.

j'ai trouvé que lors de l'exécution de tf.Session() TensorFlow donne des informations sur GPU dans les messages de log comme ci-dessous:

I tensorflow/core/common_runtime/gpu/gpu_init.cc:126] DMA: 0 
I tensorflow/core/common_runtime/gpu/gpu_init.cc:136] 0:   Y 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:838] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1080, pci bus id: 0000:01:00.0)

ma question Est Comment puis-je obtenir des informations sur GPU disponible de TensorFlow? Je peux obtenir des informations GPU chargées à partir du log, mais je veux le faire d'une manière plus sophistiquée, programmatique. Je pourrais aussi restreindre les GPU intentionnellement en utilisant la variable d'environnement cuda_visible_devices, donc je ne veux pas savoir comment obtenir des informations GPU à partir du noyau OS.

en bref, je veux une fonction comme tf.get_available_gpus() qui retournera ['/gpu:0', '/gpu:1'] s'il y a deux GPU disponibles dans la machine. Comment puis-je mettre en œuvre?

67
demandé sur mrry 2016-07-25 07:30:38

4 réponses

il existe une méthode non documentée appelée device_lib.list_local_devices() qui vous permet d'énumérer les appareils disponibles dans le processus local. ( N.B. en tant que méthode non documentée, cette méthode est sujette à des changements en arrière incompatibles.) La fonction renvoie une liste des objets DeviceAttributes protocol buffer . Vous pouvez extraire une liste des noms de périphériques string pour les périphériques GPU comme suit:

from tensorflow.python.client import device_lib

def get_available_gpus():
    local_device_protos = device_lib.list_local_devices()
    return [x.name for x in local_device_protos if x.device_type == 'GPU']

Note que (au moins jusqu'à TensorFlow 1.4), en appelant device_lib.list_local_devices() lancera un code d'initialisation qui, par défaut, attribuera toute la mémoire GPU sur tous les appareils ( GitHub issue ). Pour éviter cela, créez d'abord une session avec un petit per_process_gpu_fraction , ou allow_growth=True , pour empêcher que toute la mémoire soit allouée. Voir cette question pour plus de détails.

128
répondu mrry 2017-10-13 14:58:15

vous pouvez vérifier la liste de tous les appareils en utilisant le code suivant:

from tensorflow.python.client import device_lib

device_lib.list_local_devices()
55
répondu hyun woo Cho 2017-07-19 06:59:13

en dehors de l'excellente explication de Mrry, où il a suggéré d'utiliser device_lib.list_local_devices() je peux vous montrer comment vous pouvez vérifier les informations relatives au GPU à partir de la ligne de commande.

parce qu'actuellement seuls les GPU de Nvidia fonctionnent pour les cadres NN, la réponse ne couvre que ceux-ci. Nvidia a une page où ils documentent comment vous pouvez utiliser l'interface du système de fichiers / proc pour obtenir des informations d'exécution sur le pilote, toutes les cartes graphiques NVidia installées, et le statut D'AGP.

/proc/driver/nvidia/gpus/0..N/information

fournir des informations sur chacun des adaptateurs graphiques NVIDIA installés (nom du modèle, IRQ, BIOS) version, type de Bus). Notez que la version BIOS n'est disponible que X est en cours d'exécution.

pour que vous puissiez l'exécuter à partir de la ligne de commande cat /proc/driver/nvidia/gpus/0/information et voir les informations sur votre premier GPU. Il est facile de exécuter ce à partir de python et vous pouvez également vérifier deuxième, troisième, quatrième GPU jusqu'à ce qu'il échouera.

certainement la réponse de Mrry est plus robuste et je ne suis pas sûr si ma réponse fonctionnera sur la machine non-linux, mais que la page de Nvidia fournit d'autres informations intéressantes, que peu de gens connaissent.

8
répondu Salvador Dali 2017-07-29 04:31:12

il y a aussi une méthode dans le test util . Donc tout ce qui doit être fait est:

tf.test.is_gpu_available()

et / ou

tf.test.gpu_device_name()

cherchez les arguments dans Tensorflow docs.

4
répondu Soham Bhattacharyya 2018-06-22 06:14:08