web-dev-qa-db-fra.com

ImportError: libcublas.so.9.0: impossible d'ouvrir le fichier d'objet partagé

actuellement, cuda 8.0 et 9.0 sont installés dans le système de support Gpu. J'ai rencontré cette erreur lors de l'importation à partir du module keras. Il est dit que le chargement du runtime natif de tensorflow a échoué. Le journal des erreurs que j'ai reçu était:

Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/pywrap_tensorflow.py", line 58, in <module>
from tensorflow.python.pywrap_tensorflow_internal import *
File "/usr/local/lib/python3.5/dist-
packages/tensorflow/python/pywrap_tensorflow_internal.py", line 28, in <module>
_pywrap_tensorflow_internal = swig_import_helper()
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/pywrap_tensorflow_internal.py", line 24, in swig_import_helper
_mod = imp.load_module('_pywrap_tensorflow_internal', fp, pathname, description)
File "/usr/lib/python3.5/imp.py", line 242, in load_module
return load_dynamic(name, filename, file)
File "/usr/lib/python3.5/imp.py", line 342, in load_dynamic
return _load(spec)

ImportError: libcublas.so.9.0: cannot open shared object file: No such file or directory

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "Try1.py", line 11, in <module>
from keras.models import Sequential
File "/usr/local/lib/python3.5/dist-packages/Keras-2.0.9-py3.5.Egg/keras/__init__.py", line 3, in <module>
File "/usr/local/lib/python3.5/dist-packages/Keras-2.0.9-py3.5.Egg/keras/utils/__init__.py", line 6, in <module>
File "/usr/local/lib/python3.5/dist-packages/Keras-2.0.9-py3.5.Egg/keras/utils/conv_utils.py", line 3, in <module>
File "/usr/local/lib/python3.5/dist-packages/Keras-2.0.9-py3.5.Egg/keras/backend/__init__.py", line 83, in <module>
File "/usr/local/lib/python3.5/dist-packages/Keras-2.0.9-py3.5.Egg/keras/backend/tensorflow_backend.py", line 1, in <module>
File "/usr/local/lib/python3.5/dist-packages/tensorflow/__init__.py", line 24, in <module>
from tensorflow.python import *
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/__init__.py", line 49, in <module>
from tensorflow.python import pywrap_tensorflow
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/pywrap_tensorflow.py", line 73, in <module>
raise ImportError(msg)
ImportError: Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/pywrap_tensorflow.py", line 58, in <module>
from tensorflow.python.pywrap_tensorflow_internal import *
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/pywrap_tensorflow_internal.py", line 28, in <module>
_pywrap_tensorflow_internal = swig_import_helper()
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/pywrap_tensorflow_internal.py", line 24, in swig_import_helper
_mod = imp.load_module('_pywrap_tensorflow_internal', fp, pathname, description)
File "/usr/lib/python3.5/imp.py", line 242, in load_module
return load_dynamic(name, filename, file)
File "/usr/lib/python3.5/imp.py", line 342, in load_dynamic
return _load(spec)
ImportError: libcublas.so.9.0: cannot open shared object file: No such file or directory


Failed to load the native TensorFlow runtime.

Lorsque j'exécute nvcc --version, la version cuda renvoyée est la suivante:

Cuda compilation tools, release 8.0, V8.0.61

J'ai lu des articles similaires mais je n'ai pas pu résoudre mon problème. La plupart du temps, je pense que c'est un affrontement entre deux versions de cuda. Quelqu'un peut-il me dire comment résoudre ce problème? Merci d'avance.

28
arvind

Vous devrez mettre à jour votre LD_LIBRARY_PATH afin qu'il pointe vers le /usr/local/cuda-9.0/lib64. Ajoutez la ligne suivante à votre fichier .bashrc (ou tout autre terminal que vous utilisez)

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-9.0/lib64/
28
layog

Essayez le code suivant

 pip3 install --upgrade tensorflow-gpu==1.4

Une fois que vous avez tapé cette commande pip3 install --upgrade tensorflow-gpu==1.4 dans le terminal, le tensorflow sera rétrogradé à 1.4.0. Ce bug causé par tensorflow 1.6.0.

5
S. Theon

Les fichiers binaires Tensorflow ne prennent pas en charge Cuda 9.1 pour le moment. La solution pourrait donc simplement consister à installer Tensorflow à partir de source .

Moi aussi, j'avais le problème mentionné ci-dessus alors que j'avais installé Cuda 9.1 + CUDNN 6 pour Tensorflow et c'est ce qui a fonctionné pour moi.

https://devtalk.nvidia.com/default/topic/1026198/cuda-setup-and-installation/cuda-9-0-importerror-libcublas-so-8-0

En outre, vous avez les deux options suivantes:

  1. CUDA 8.0 + Tensorflow - La version la plus stable de CUDA qui fonctionne avec les fichiers binaires Tensorflow.

  2. CUDA 9.0 + Tensorflow - dernière version de CUDA avec laquelle les fichiers binaires Tensorflow sont compatibles.

4
daVincere

Chaque fois que vous installez une nouvelle version de cuda, vous devez vérifier le chemin permanent qui peut avoir été ajouté. 

pour vérifier cela dans le terminal 

gedit ~/.bashrc

si vous voyez que l'ancien chemin Cuda est là, vous devez le remplacer par le nouveau. 

par exemple le mien était: 

export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:/usr/lib/nvidia-384

J'ai changé le chemin cuda et le chemin nvidia puisque j'ai également mis à jour le pilote pour:

export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64:/usr/lib/nvidia-390

J'espère que cela pourra aider :) 

0
Hemin Ali

J'ai eu ce problème après la mise à niveau d'Ubuntu 16.04 à 18.04. J'avais installé CUDA 9.1 avec Tensorflow 1.12.0 et cette version de Tensorflow nécessite CUDA 9.0. Lorsque j'ai essayé d'installer CUDA 9.0, mes pilotes vidéo ont été détruits.

Heureusement, j'ai trouvé des instructions pour installer plusieurs bibliothèques CUDA . Les seules pièces dont j'avais besoin jusqu'à présent sont de télécharger le script du programme d'installation, de l'exécuter avec les options --silent --toolkit --override, puis de définir LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64. J'ai également redéfini le lien symbolique sur /usr/local/cuda sur /usr/local/cuda-9.1, mais je ne suis pas sûr que cela soit nécessaire.

Jusqu'à présent, Tensorflow fonctionne bien.

0
Don Kirkby

Ce problème est lié au protobuf-compilateur de Google, car tensorflow ne parvient pas à trouver le fichier objet partagé, ici libcublas.so.9.0.

Construire la dernière version de protobuf (3.5.0) à partir de la source n'a pas aidé non plus. Ce qui a fonctionné pour moi a été d’installer le compilateur protobuf à l’échelle du système via apt install protobuf-compiler sur Ubuntu 16.04. Et installez la version python via pip3 installer protobuf. J'utilise CUDA 9.0 car la version 9.1 n'est pas encore compatible avec le binaire pré-construit de tensorflow.

Vous pouvez vérifier la version de Protobuf à l’échelle du système en utilisant protocole --version qui est 2.6.1 sur 16.04. La version du protocole python est 3.5.2.post1. J'espère que cela t'aides. J'ai eu un problème similaire avec les versions précédentes de tensorflow et CUDA 8 et j'avais documenté cette procédure de dépannage. En utilisant la même procédure, je peux aussi utiliser tensorflow 1.8.0.

0
sdash

La version Tensorflow> = 1.5 nécessite la version CUDA> 8.0. Donc, si vous avez la version 8.0 de CUDA, vous pouvez rétrograder votre version de tensorflow à 1.4.

pip install tensorflow-gpu==1.4

0
Rishabh Agrahari

J'ai cette erreur, mais elle était liée au manque de mémoire GPU bien que le message d'erreur ne semble pas être directement lié. J'ai essayé de redémarrer le serveur, comme l'ont suggéré d'autres personnes, mais je n'ai gagné que quelques itérations (époques) supplémentaires. Pour résoudre le problème, j'ai mis à niveau l'instance de serveur GPU pour une plus grande de mon fournisseur de cloud en utilisant toujours la même image de serveur. 

J'espère que cela peut aider quelqu'un d'autre.

0
Claude COULOMBE