3
votes

Tensorflow 2.3 et libcublas.so.10

Selon la documentation officielle, dans Tensorflow 2.3 CUDA 10.1 est pris en charge

J'ai Ubuntu 20.04, GPU à bord, CUDA 10.1 et CUDNN 7.6

J'obtiens l'erreur lorsque je commence à utiliser Tensorflow (2.3): Impossible de charger la bibliothèque dynamique 'libcublas.so.10'; dlerror: libcublas.so.10: impossible d'ouvrir le fichier objet partagé: aucun fichier ou répertoire de ce type; LD_LIBRARY_PATH: /usr/local/cuda-10.1/lib64

Après quelques heures d'investigations, il s'est avéré que le packaging de CUBLAS avait changé dans CUDA 10.1 pour être en dehors du chemin d'installation de la boîte à outils

sh cuda_10.1.168_418.67_linux.run --extract=/extracted

Voir ici: https://forums.developer.nvidia.com/t/cublas-for-10-1-is-missing/71015/16

Dans mon cas, j'ai cherché avec

# set PATH for cuda 10.1 installation
if [ -d "/usr/local/cuda-10.1/bin/" ]; then
    export PATH=/usr/local/cuda-10.1/bin${PATH:+:${PATH}}
    export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
fi

et fondé:

sudo ln -s /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublas.so /usr/local/cuda-10.1/lib64/libcublas.so
sudo ln -s /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublas.so.10 /usr/local/cuda-10.1/lib64/libcublas.so.10

Ensuite, en suivant quelques suggestions de solutions de contournement utilisant le lien symbolique (fondé sur le site nvdia), j'ai créé un lien symbolique pour les fichiers ci-dessus, vers le:

            /usr/share/doc/libcublas-dev
            /usr/share/doc/libcublas10
            /usr/local/cuda-10.1/doc/man/man7/libcublas.so.7
            /usr/local/cuda-10.1/doc/man/man7/libcublas.7
            /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublas.so.10.2.2.214
            /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublasLt.so.10.2.2.214
            /usr/local/cuda-10.2/targets/x86_64-linux/lib/stubs/libcublasLt.so
            /usr/local/cuda-10.2/targets/x86_64-linux/lib/stubs/libcublas.so
            /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublas.so.10
            /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublas_static.a
            /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublasLt.so
            /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublasLt_static.a
            /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublasLt.so.10
            /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublas.so

Même après les liens symboliques, l'erreur persiste:

Impossible de charger la bibliothèque dynamique 'libcublas.so.10'; dlerror: libcublas.so.10: impossible d'ouvrir le fichier objet partagé: aucun fichier ou répertoire de ce type; LD_LIBRARY_PATH: /usr/local/cuda-10.1/lib64

avec mon nano ~/.profile contenant:

sudo find /usr -name libcublas*

Je voulais aussi essayer de prendre manuellement les fichiers de la boîte à outils disponible dans le fichier cuda_10.1.168_418.67_linux.run comme suggéré ici mais j'ai constaté que la commande suggérée ne fonctionne pas.

/usr/local/cuda-10.1/lib64

qui passe KO lors de la finalisation avec un message .. Impossible de vérifier la version de gcc. Voir le journal à /tmp/cuda-installer.log pour plus de détails.

Si seulement cette extraction pouvait fonctionner, peut-être qu'une copie manuelle des fichiers épargnera le mal de tête complet.

Il semble que cette étape cublas ne soit pas documentée dans la documentation officielle de Tensorflow pour l'installation avec CUDA 10.1

Une idée ?


2 commentaires

Vous avez chargé / installé CUDA 10.2. Vous ne pouvez pas l' utiliser en remplacement de CUDA 10.1 que votre installation TF attend.


Merci Robert, c'est ce que l'on pourrait soupçonner, mais les dossiers 10.2 sont là simplement parce que cela vient avec 10.1: je n'ai jamais installé 10.2, et c'est juste la façon dont Nvidia a décidé d'installer cublas à partir de 10.1. la commande nvcc --version confirme: nvcc: Pilote de compilateur NVIDIA (R) Cuda Copyright (c) 2005-2019 NVIDIA Corporation Construit sur Sun_Jul_28_19: 07: 16_PDT_2019 Outils de compilation Cuda, version 10.1, V10.1.243


3 Réponses :


0
votes

Ajoutez le chemin de CUDA 10.2 dans bashrc:

export PATH=/usr/local/cuda-10.1/bin:/usr/local/cuda-10.2/bin${PATH:+:${PATH}}

Cela devrait suffire.


0 commentaires

-1
votes
$ sudo apt-mark hold libcublas10
$ sudo apt-mark hold libcublas-dev

0 commentaires

0
votes

J'ai eu le même problème, résolu grâce à votre question. J'ai utilisé l'approche de lien symbolique mais en en ajoutant une supplémentaire pour libcublasLt.so.10 .

$ sudo ln -s /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublas.so /usr/local/cuda-10.1/lib64/libcublas.so
$ sudo ln -s /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublas.so.10 /usr/local/cuda-10.1/lib64/libcublas.so.10
$ sudo ln -s /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcublasLt.so.10 /usr/local/cuda-10.1/lib64/libcublasLt.so.10


0 commentaires