web-dev-qa-db-fra.com

Tensorflow ne peut pas ouvrir libcuda.so.1

J'ai un ordinateur portable avec une GeForce 940 MX. Je veux que Tensorflow soit opérationnel sur le GPU. J'ai tout installé à partir de la page de leur tutoriel. Maintenant, lorsque j'importe Tensorflow, je reçois

>>> import tensorflow as tf
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened  CUDA library libcublas.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcudnn.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcufft.so locally
I tensorflow/stream_executor/dso_loader.cc:119] Couldn't open CUDA library libcuda.so.1. LD_LIBRARY_PATH: 
I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:165] hostname: workLaptop
I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:189] libcuda reported version is: Not found: was unable to find libcuda.so DSO loaded into this program
I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:193] kernel reported version is: Permission denied: could not open driver version path for reading: /proc/driver/nvidia/version
I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1092] LD_LIBRARY_PATH: 
I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1093] failed to find libcuda.so on this system: Failed precondition: could not dlopen DSO: libcuda.so.1; dlerror: libnvidia-fatbinaryloader.so.367.57: cannot open shared object file: No such file or directory
 I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcurand.so locally
>>> 

après quoi, je pense que cela passe simplement à courir sur le cpu. 

EDIT: Après tout, je suis parti de zéro. Maintenant je reçois ceci:

>>> import tensorflow
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcublas.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcudnn.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcufft.so locally
I tensorflow/stream_executor/dso_loader.cc:119] Couldn't open CUDA library libcuda.so.1. LD_LIBRARY_PATH: :/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64
I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:165] hostname: workLaptop
I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:189] libcuda reported version is: Not found: was unable to find libcuda.so DSO loaded into this program
I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:193] kernel reported version is: Permission denied: could not open driver version path for reading: /proc/driver/nvidia/version
I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1092] LD_LIBRARY_PATH: :/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64
I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1093] failed to find libcuda.so on this system: Failed precondition: could not dlopen DSO: libcuda.so.1; dlerror: libnvidia-fatbinaryloader.so.367.57: cannot open shared object file: No such file or directory
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcurand.so locally
8
Qubix

libcuda.so.1 est un lien symbolique vers un fichier spécifique à la version de vos pilotes NVIDIA. Cela peut indiquer une mauvaise version ou bien ne pas exister.

# See where the link is pointing.  
ls  /usr/lib/x86_64-linux-gnu/libcuda.so.1 -la
# My result:
# lrwxrwxrwx 1 root root 19 Feb 22 20:40 \
# /usr/lib/x86_64-linux-gnu/libcuda.so.1 -> ./libcuda.so.375.39

# Make sure it is pointing to the right version. 
# Compare it with the installed NVIDIA driver.
nvidia-smi

# Replace libcuda.so.1 with a link to the correct version
cd /usr/lib/x86_64-linux-gnu
Sudo ln -f -s libcuda.so.<yournvidia.version> libcuda.so.1

De la même manière, créez un autre lien symbolique de libcuda.so.1 vers un lien du même nom dans votre répertoire LD_LIBRARY_PATH .

Vous pouvez également constater que vous devez créer un lien vers libcuda.so.1 dans/usr/lib/x86_64-linux-gnu nommé libcuda.so.

5
Alex Payne

Au cas où quelqu'un le rencontrerait encore. Assurez-vous d’abord d’ajouter le paramètre --runtime=nvidia afin d’exécuter votre conteneur.

docker run --runtime=nvidia -t tensorflow/serving:latest-gpu

tensorflow/serving:latest-gpu est le nom de l'image du menu fixe.

3
Rodrigo Loza

Dans le cas que je viens de résoudre, il s'agissait de mettre à jour le pilote GPU avec la dernière version et d'installer le toolkit cuda. Tout d'abord, le ppa a été ajouté et le pilote GPU installé:

Sudo add-apt-repository ppa:graphics-drivers/ppa
Sudo apt update
Sudo apt install nvidia-390

Après avoir ajouté le ppa, les options pour les versions de pilote étaient affichées, et 390 était la dernière version "stable" affichée.

Puis installez le toolkit cuda:

Sudo apt install nvidia-cuda-toolkit

Puis redémarrez:

Sudo reboot

Il a mis à jour les pilotes vers une version plus récente que la 390 initialement installée lors de la première étape (il s'agissait de la 410; il s'agissait d'une instance p2.xlarge sur AWS).

1
wordsforthewise