web-dev-qa-db-fra.com

Qu'est-ce que l'erreur: `Bibliothèque de CuDNN d'exécution chargée: 5005 mais le source a été compilé avec 5103` signifie?

J'essayais d'utiliser TensorFlow avec le processeur graphique et j'ai l'erreur suivante:

I tensorflow/core/common_runtime/gpu/gpu_device.cc:838] Creating TensorFlow device (/gpu:0) -> (device: 0, name: Tesla K20m, pci bus id: 0000:02:00.0)
E tensorflow/stream_executor/cuda/cuda_dnn.cc:347] Loaded runtime CuDNN library: 5005 (compatibility version 5000) but source was compiled with 5103 (compatibility version 5100).  If using a binary install, upgrade your CuDNN library to match.  If building from sources, make sure the library loaded at runtime matches a compatible version specified during compile configuration.
F tensorflow/core/kernels/conv_ops.cc:457] Check failed: stream->parent()->GetConvolveAlgorithms(&algorithms)

bien sûr, j'essaie de corriger cette erreur (bien que cela ait déjà été demandé Bibliothèque CuDNN d'exécution chargée: 5005 (version compatible 5000) mais la source a été compilée avec 5103 (version compatible 5100) ) mais j'aimerais comprendre. l'erreur. J'essaie toujours de résoudre moi-même les problèmes (de codage) avant de poster (demander de l'aide), mais j'ai du mal à commencer celui-ci parce que le message d'erreur semble un peu cryptique/incertain pour moi et je n'arrive pas à trouver un bonne ressource pour comprendre ce que l'erreur signifie.

Pour comprendre l'erreur, je me suis concentré sur la ligne qui semble être l'endroit où l'erreur commence:

Loaded runtime CuDNN library: 5005 (compatibility version 5000) but source was compiled with 5103 (compatibility version 5100).

Après avoir lu quelques pages de github qui semblaient pertinentes, je me suis rendu compte que la lecture de l'erreur comme suit est en réalité plus utile:

Bibliothèque CuDNN d'exécution chargée: 5005 mais la source a été compilée avec 5103.

supprimer la parenthèse rend l'erreur un peu plus logique (bien que j'aimerais comprendre/savoir quel est le rôle de la parenthèse dans le message d'erreur pour faciliter le débogage) puisqu'il semble que cela ait chargé la bibliothèque CuDNN 5005 (au niveau de UNIX/OS), mais TensorFlow (pour Python) a été compilé avec ce que je suppose être la version 5103. Évidemment, si la bibliothèque TensorFlow utilise une API conforme à 5103 mais la "vraie" API pour communiquer avec le (cuda) deep learning La bibliothèque CuDNN est la version 5005, il est clair que ce serait un problème. Bien qu'ils ne soient que des suppositions sur ce qui se passe.

Ma première confusion est que, pour autant que je sache, il n’existe pas de tels documents, CuDNN 5005 ou 5103. Il serait formidable de comprendre ce que cette partie de l’erreur signifie pour que je puisse commencer à essayer de déboguer cela réellement. Autant que je sache quand j'utilise module list, j'utilise:

cudnn/5.0

Ma deuxième confusion est la parenthèse que j'ai ignorée et leur signification:

  1. Loaded runtime CuDNN library: 5005 (compatibility version 5000)
  2. but source was compiled with 5103 (compatibility version 5100)

Honnêtement, je n'ai aucune idée de ce que signifie "compatibilité version XXXX". Peut-être que sa suggestion d'installer la version 5000 (peu importe ce que cela signifie) pour CuDNN (qui reste déroutant car il n'y a pas de version 5 000 de CuDNN) et de compiler une version de TensorFlow (en quelque sorte) qui utilise la version 5100 de CuDNN.

Est-ce que quelqu'un sait plus précisément ce que les erreurs signifient exactement (et donne leur solution à la question que j'ai liée?)

8
Charlie Parker

Ceci est une description approximative de ce qui se passe.

cUDNN possède des versions majeures numérotées, par exemple. 4.0, 5.0, 5.1, etc.

Ces versions majeures peuvent incorporer des modifications de l'API. Par conséquent, un programme qui utilise cuDNN v4 (c'est-à-dire 4.0) peut nécessiter certaines modifications pour fonctionner avec ou utiliser de nouvelles fonctionnalités dans cuDNN v5 (c'est-à-dire 5.0).

La version principale est codée dans les deux premiers chiffres du numéro de version à 4 chiffres. Ainsi, un numéro de version à 4 chiffres de 5103 signifie que le numéro de version appartient à la version majeure 5.1 et que le numéro de sous-version est 03. Pour les besoins de {compatibilité}, une telle version doit être compatible avec les autres noms de nom de fabricant. version de bibliothèque de 51xx parce qu’ils appartiennent tous à la version majeure 5.1 (ce n’est pas forcément vrai, mais c’est l’idée générale). Par conséquent, n'importe laquelle de ces bibliothèques avec une numérotation de version 51xx aurait une version de compatibilité} de 5100, pour indiquer qu'elle appartient à (et devrait être) compatible avec) la version majeure 5.1.

Ainsi, lorsque nous faisons référence à une version de compatibilité (avec quelle version majeure cette bibliothèque est-elle compatible), il suffit de spécifier les deux premiers chiffres - 5000 indique 5,0, 5100 indique 5.1. Mais il est possible qu'une version ait un numéro de version de sous-version différent de zéro. Cela peut être dû à diverses raisons, par exemple pour autoriser les versions de correctifs de bogues, etc.

Lorsqu'un programme (tel que tensorflow) est conçu pour utiliser cuDNN, il sera généralement codé pour fonctionner avec une version particulière de cuDNN. Dans certains cas, cela peut être géré à la compilation, en "compilant" une version cuDNN particulière (et son API associée, c'est-à-dire les fichiers d'en-tête utilisés lors de la construction de tensorflow). Par conséquent, au moment de la compilation, un programme tel que tensorflow peut déterminer la version de l’API cuDNN contre laquelle il a été compilé. Il s’agit d’une version à 4 chiffres (bien qu’en général, seule la version de compatibilité, c’est-à-dire les deux premiers chiffres de la la version devrait vraiment compter).

Au moment de l'exécution, une version particulière de la bibliothèque cuDNN (par exemple .so sur linux) est chargée quelque part sur votre ordinateur. La version de cette bibliothèque peut être déterminée, interrogée et rapportée. Si cette version réelle de la bibliothèque ne correspond pas (du moins du point de vue de la version de compatibilité) à la version de la bibliothèque cuDNN à laquelle compense tensorflow a été compilée, c'est une bonne indication que les choses risquent de ne pas fonctionner et que tensorflow l'indique alors lorsqu'il est exécuté. :

Bibliothèque CuDNN d'exécution chargée: 5005 mais la source a été compilée avec 5103.

C'est tensorflow qui vous dit "hé, j'ai été conçu (compilé) pour fonctionner avec cuDNN v5.1 mais vous ne me donnez que cuDNN 5.0 pour travailler avec".

Les différences au niveau des sous-versions devraient être moins importantes. Si vous savez ce que vous faites, vous pouvez utiliser la version 5107 de cuDNN runtime même si votre tensorflow a été compilé avec la version 5103. Ceci est un exemple hypothétique, mais cela indiquerait une différence dans la bibliothèque qui ne l’était pas. destiné à modifier la fonctionnalité ou le comportement approprié, ou l'interface API. Cela pourrait être simplement une version corrigée de bugs de 5103, par exemple (hypothétiquement. Ceci est un exemple imaginaire.)

Dans le cas idéal, vous construiriez tensorflow par rapport à la version de cuDNN que vous utilisez. Cependant, si vous avez téléchargé des paquetages tensorflow pré-construits, vous pouvez être témoin de ce type de message (puisque vous avez probablement téléchargé le nom de domaine séparément). Dans ce cas, vous devez au moins chercher à faire correspondre la version principale du nom de réseau utilisateur que vous utilisez à la version de compatibilité attendue par tensorflow. Dans cet exemple particulier, vous ne le faites pas.

15
Robert Crovella

Peut-être pouvez-vous télécharger "cuDNN v5.1 for CUDA 8.0/7.5, puis l’installer.

1
user8093049