61 votes

tensorflow sur GPU : pas de périphériques connus, bien que deviceQuery de cuda renvoie un résultat "PASS".

Note : cette question a été initialement demandé sur github mais il a été demandé d'être ici à la place

J'ai des difficultés à faire fonctionner tensorflow sur le gpu, et cela ne semble pas être le problème habituel de configuration de cuda, car tout semble indiquer que cuda est correctement configuré.

Le symptôme principal : lorsque je lance tensorflow, mon gpu n'est pas détecté ( le code en cours d'exécution y son rendement ).

Ce qui diffère des problèmes habituels, c'est que cuda semble correctement installé et fonctionne. ./deviceQuery à partir des échantillons cuda est réussie ( sortie ).

J'ai deux cartes graphiques :

  • une vieille GTX 650 utilisée pour mes moniteurs (je ne veux pas utiliser celle-là avec tensorflow)
  • une GTX 1060 que je veux dédier à tensorflow

J'utilise :

J'ai essayé :

  • en ajoutant /usr/local/cuda/bin/ a $PATH
  • forcer le placement du gpu dans le script de tensorflow à l'aide de with tf.device('/gpu:1'): (et with tf.device('/gpu:0'): quand il a échoué, pour faire bonne mesure)
  • en mettant sur liste blanche le gpu que je voulais utiliser avec CUDA_VISIBLE_DEVICES au cas où la présence de ma vieille carte non supportée causerait des problèmes.
  • exécuter le script avec sudo (parce que pourquoi pas)

Voici les sorties de nvidia-smi y nvidia-debugdump -l si c'est utile.

À ce stade, j'ai l'impression d'avoir suivi toutes les pistes et je n'ai aucune idée de ce que je pourrais essayer d'autre. Je ne sais même pas si je suis en train d'envisager un bogue ou un problème de configuration. Tout conseil sur la façon de déboguer ce problème serait grandement apprécié. Merci !

Mise à jour Avec l'aide de Yaroslav sur github, j'ai obtenu plus d'informations sur le débogage en augmentant le niveau du journal, mais cela ne semble pas dire grand chose sur la sélection du périphérique : https://gist.github.com/oelmekki/760a37ca50bf58d4f03f46d104b798bb

Mise à jour 2 : L'utilisation de theano détecte correctement le gpu, mais il est intéressant de noter qu'il se plaint que cuDNN est trop récent, puis se rabat sur le cpu ( le code a été exécuté , sortie ). Peut-être que cela pourrait être le problème avec tensorflow également ?

1 votes

Comme autre vérification, vous pouvez essayer un autre framework (comme Theano) avec le GPU pour voir si cela fonctionne. Peut-être que votre configuration GPU est cassée et n'est pas détectée par deviceQuery.

0 votes

Bonne idée, merci. Je vais essayer et le signaler dans le corps de la question.

0 votes

Cette sortie est suspicieusement petite, voici ce que je vois quand j'exécute avec VLOG=1 -- pastebin.com/LQF0j3Ri

78voto

mrry Points 1

D'après la sortie du journal, il semble que vous exécutez la version CPU de TensorFlow (PyPI : tensorflow ), et non la version GPU (PyPI : tensorflow-gpu ). En exécutant la version GPU, on obtient soit des informations sur les bibliothèques CUDA, soit une erreur si on ne parvient pas à les charger ou à ouvrir le pilote.

Si vous exécutez les commandes suivantes, vous devriez être en mesure d'utiliser le GPU lors des exécutions suivantes :

$ pip uninstall tensorflow
$ pip install tensorflow-gpu

0 votes

Oh, en effet. J'ai suivi cette documentation [1] alors que tensorflow était déjà installé, je ne savais pas qu'il avait besoin d'un autre paquet. Merci ! -- [1] tensorflow.org/tutorials/using_gpu

2 votes

Chaque fois que j'installe tensorflow-gpu, il réinstalle tensorflow. Est-ce que c'est censé se produire ? Je n'arrive pas à le faire détecter mes appareils

1 votes

J'ai le même problème, et je suis vos étapes, "uninstall tensorlow" et "install tensorflow-gpu" J'ai obtenu cette erreur : AttributeError : L'objet 'module' n'a pas d'attribut 'Session'.

28voto

Mark Sonn Points 144

Aucune des autres réponses ici n'a fonctionné pour moi. Après un peu de bricolage, j'ai trouvé que cela corrigeait mes problèmes lorsque je traitais avec Tensorflow construit à partir de binaires :


Étape 0 : Désinstaller protobuf

pip uninstall protobuf

Étape 1 : Désinstaller tensorflow

pip uninstall tensorflow
pip uninstall tensorflow-gpu

Étape 2 : Réinstallation forcée de Tensorflow avec support GPU

pip install --upgrade --force-reinstall tensorflow-gpu

Étape 3 : Si vous ne l'avez pas encore fait, définissez CUDA_VISIBLE_DEVICES

Donc, pour moi, avec 2 GPU, ce serait

export CUDA_VISIBLE_DEVICES=0,1

2 votes

Vous avez sauvé ma journée !

1 votes

Heureux de l'entendre :)

18voto

nguyenhoai890 Points 559

Dans mon cas :

pip3 uninstall tensorflow

n'est pas suffisant. Parce que quand on réinstalle avec :

pip3 install tensorflow-gpu

Il s'agit toujours de réinstaller tensorflow avec le cpu et non le gpu. Donc, avant d'installer tensorflow-gpu, j'ai essayé de supprimer tous les dossiers relatifs à tensorflow dans site-packages uninstall protobuf, et ça marche !

Pour conclure :

pip3 uninstall tensorflow

Supprimer tous les dossiers tenseurs dans ~ \Python35\Lib\site -packages

pip3 uninstall protobuf
pip3 install tensorflow-gpu

1 votes

Suggestion de faute de frappe : je vous suggère d'utiliser pip3 partout, dans votre poste. Dans mon cas, j'ai supprimé tensorboard, et tensorflow-1.3.0.dist-info de dist-packages et cela a débloqué ce problème.

9voto

Ça peut paraître idiot mais un sudo reboot a résolu exactement le même problème pour moi et quelques autres.

0 votes

Le redémarrage était tout ce dont j'avais besoin aussi. ^^

0 votes

A sauvé ma journée ^_^

2voto

Huy Points 238

La réponse qui a sauvé ma journée est venue de Mark Sonn. Il suffit d'ajouter ceci à .bashrc et source ~/.bashrc si vous êtes sous Linux :

export CUDA_VISIBLE_DEVICES=0,1

Auparavant, je devais utiliser cette solution de contournement pour que tensorflow reconnaisse mon GPU :

import tensorflow as tf

gpus = tf.config.experimental.list_physical_devices(device_type="GPU")
tf.config.experimental.set_visible_devices(devices=gpus[0], device_type="GPU")
tf.config.experimental.set_memory_growth(device=gpus[0], enable=True)

Même si le code fonctionnait toujours, ajouter ces lignes à chaque fois n'est clairement pas quelque chose que je voudrais. Ma version de tensorflow a été construit à partir des sources selon la documentation pour obtenir la v2.3, il faut supporter CUDA 10.2 et cudnn 7.6.5.

Si quelqu'un a des difficultés avec cela, je suggère de parcourir rapidement la documentation. Il a fallu 1,5 heure pour construire avec bazel. Assurez-vous d'avoir installé gcc7 et bazel.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X