python install - Comment obtenir les GPU disponibles actuellement dans tensorflow?




windows anaconda (5)

J'ai prévu d'utiliser TensorFlow distribué, et j'ai vu que TensorFlow peut utiliser des GPU pour la formation et les tests. Dans un environnement de cluster, chaque machine peut avoir 0 ou 1 ou plusieurs GPU, et je veux exécuter mon graphique TensorFlow dans des GPU 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 du journal 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 le GPU disponible actuellement de TensorFlow? Je peux obtenir des informations GPU chargées à partir du journal, mais je veux le faire de manière plus sophistiquée et programmatique. Je pourrais également restreindre intentionnellement les GPU 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 l'implémenter?


Answers

Il existe une méthode non documentée appelée device_lib.list_local_devices() qui vous permet de répertorier les périphériques disponibles dans le processus local. ( NB En tant que méthode non documentée, elle est soumise à des modifications incompatibles avec les DeviceAttributes .) La fonction renvoie une liste d'objets de tampon de protocole DeviceAttributes . Vous pouvez extraire une liste de noms de périphériques de chaîne 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']

Notez que (au moins jusqu'à TensorFlow 1.4), l'appel de device_lib.list_local_devices() exécutera du code d'initialisation qui, par défaut, allouera toute la mémoire du GPU sur tous les périphériques ( problème GitHub ). Pour éviter cela, créez d'abord une session avec un per_process_gpu_fraction explicitement petit, ou allow_growth=True , pour empêcher toute la mémoire allouée. Voir cette question pour plus de détails.


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 liées au GPU à partir de la ligne de commande.

Parce que actuellement seuls les gpus de Nvidia fonctionnent pour les frameworks 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 AGP.

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

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

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

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


Vous pouvez vérifier toute la liste des appareils en utilisant le code suivant:

from tensorflow.python.client import device_lib

device_lib.list_local_devices()

Il y a aussi une méthode dans l' utilitaire de test . Donc, tout ce qui doit être fait est:

tf.test.is_gpu_available()

et / ou

tf.test.gpu_device_name()

Recherchez les documents Tensorflow pour les arguments.


J'aime ctrl-w, la fonction de sélection de bloc. Je n'ai jamais couru à travers cela avant que je pense que c'est génial de pouvoir sélectionner un bloc fonction / if en appuyant simplement sur ctrl-w à quelques reprises.





python gpu tensorflow