Pourquoi est-ce que j'obtiens «/sbin/ldconfig.real: /usr/local/cuda/lib64/libcudnn.so.7 n'est pas un lien symbolique»?

12

Après avoir installé la CUDAboîte à outils et cuDNNavec succès sans aucun problème, chaque fois que je le fais:

sudo ldconfig 

Je reçois:

/sbin/ldconfig.real: /usr/local/cuda/lib64/libcudnn.so.7 is not a symbolic link

Message d'erreur.
quelle est la raison et comment puis-je résoudre ce problème?

Au fait, j'ai installé cuDNNcomme ça:

 # cuDNN, extracts to a folder named cuda
 tar xvf cudnn*.tgz  
 cd cuda  
 sudo cp lib64/* /usr/local/cuda/lib64
 sudo cp include/* /usr/local/cuda/include

La sortie de ls -lha libcudnn*in /usr/local/cuda/lib64est la suivante:

breeze@breeze:/usr/local/cuda/lib64$ ls -lha libcudnn*
-rwxr-xr-x 1 root root 275M آوریل 15 12:03 libcudnn.so
-rwxr-xr-x 1 root root 275M آوریل 15 12:03 libcudnn.so.7
-rwxr-xr-x 1 root root 275M آوریل 15 12:03 libcudnn.so.7.0.5
-rw-r--r-- 1 root root 268M آوریل 15 12:03 libcudnn_static.a
Rika
la source

Réponses:

16

Grâce à mon Dieu, j'ai trouvé la solution en utilisant ce lien .

Cela peut se produire lorsque vous exécutez sudo ldconfig après avoir copié des fichiers cuDNN.

Après l'installation cuDNN, la copie des fichiers extraits /usr/lib/cuda/lib64et la création des liens symboliques, les choses peuvent mal tourner avec les liens symboliques.

Alors allez /usr/local/cuda/lib64/et courez ls -lha libcudnn*.

Vous devriez voir deux liens symboliques (sarcelle gras) et un seul fichier. Quelque chose comme ça:

/usr/local/cuda/lib64$ ls -lha libcudnn*
lrwxrwxrwx 1 root root  13 Dez 25 23:56 libcudnn.so -> libcudnn.so.5
lrwxrwxrwx 1 root root  17 Dez 25 23:55 libcudnn.so.5 -> libcudnn.so.5.1.5
-rwxr-xr-x 1 root root 76M Dez 25 23:27 libcudnn.so.5.1.5

La version exacte de libcudnn.so.5.1.5 peut être un peu différente pour vous (peut-être libcudnn.so.5.1.10). Dans ce cas, adaptez le code en conséquence

Si libcudnn.soet libcudnn.so.5ne sont pas des liens symboliques, c'est la raison pour laquelle vous avez obtenu cette erreur. Si oui, voici ce que vous devez faire:

/usr/local/cuda/lib64$ sudo rm libcudnn.so
/usr/local/cuda/lib64$ sudo rm libcudnn.so.5
/usr/local/cuda/lib64$ sudo ln libcudnn.so.5.1.5 libcudnn.so.5
/usr/local/cuda/lib64$ sudo ln libcudnn.so.5 libcudnn.so
Run sudo ldconfig again and there should be no errors

Après avoir exécuté l' ls -lha libcudnn*in /usr/local/cuda/lib64et vu:

breeze@breeze:/usr/local/cuda/lib64$ ls -lha libcudnn*
-rwxr-xr-x 1 root root 275M آوریل 15 12:03 libcudnn.so
-rwxr-xr-x 1 root root 275M آوریل 15 12:03 libcudnn.so.7
-rwxr-xr-x 1 root root 275M آوریل 15 12:03 libcudnn.so.7.0.5
-rw-r--r-- 1 root root 268M آوریل 15 12:03 libcudnn_static.a

Je devais faire :

breeze@breeze:/usr/local/cuda/lib64$ sudo rm libcudnn.so
[sudo] password for breeze: 
breeze@breeze:/usr/local/cuda/lib64$ sudo rm libcudnn.so.7
breeze@breeze:/usr/local/cuda/lib64$ sudo ln libcudnn.so.7.0.5 libcudnn.so.7
breeze@breeze:/usr/local/cuda/lib64$ sudo ln libcudnn.so.7 libcudnn.so
breeze@breeze:/usr/local/cuda/lib64$ sudo ldconfig

Et tout est revenu à la normale :)

Rika
la source
4
Techniquement, un lien symbolique, auquel fait référence le message d'erreur, est créé avec 'ln -s' au lieu de simplement 'ln', comme suggéré dans la réponse, ce qui créerait un lien dur.
Giorgos Sfikas
2

Vérifier

wxf:/usr/local/cuda/lib64$ ls -al libcudnn.so*
...
...
-rwxr-xr-x  3 root root 302770160 Jan 27 14:30 libcudnn.so          NO link
-rwxr-xr-x  3 root root 302770160 Jan 27 14:30 libcudnn.so.7        NO link
-rwxr-xr-x  3 root root 302770160 Jan 27 14:30 libcudnn.so.7.3.1
-rwxr-xr-x  1 root root 349141232 Jan 27 14:30 libcudnn.so.7.4.2
...
...

Pas de lien ->

(vérifier tous les liens: sudo ldconfig -v)

Parce que

(cudnn téléchargé depuis nvidia a un lien symbolique)

wxf:~/cudnn/cuda/lib64$ ls -al
total 974632
drwxrwxr-x 2 wxf wxf      4096 Jan 19 19:50 .
drwxrwxr-x 4 wxf wxf      4096 Jan 19 19:50 ..
lrwxrwxrwx 1 wxf wxf        13 Dec 12 01:58 libcudnn.so -> libcudnn.so.7
lrwxrwxrwx 1 wxf wxf        17 Dec 12 01:58 libcudnn.so.7 -> libcudnn.so.7.4.2
-rwxrwxr-x 1 wxf wxf 302770160 Sep 21 01:36 libcudnn.so.7.3.1
-rwxrwxr-x 1 wxf wxf 349141232 Dec 12 01:30 libcudnn.so.7.4.2
-rw-rw-r-- 1 wxf wxf 346085818 Dec 12 01:30 libcudnn_static.a

Lorsque nous copions, nous avons perdu des informations symboliques.

note: ln -s A <-- B

Aller à /usr/local/cuda/lib64

sudo ln -sf libcudnn.so.7.4.2 libcudnn.so.7

sudo ln -sf libcudnn.so.7 libcudnn.so

Maintenant,

wxf:/usr/local/cuda/lib64$ ls -al libcudnn.so*
...
...
lrwxrwxrwx  1 root root        13 Jan 27 14:43 libcudnn.so -> libcudnn.so.7
lrwxrwxrwx  1 root root        17 Jan 27 14:43 libcudnn.so.7 -> libcudnn.so.7.4.2
-rwxr-xr-x  1 root root 302770160 Jan 27 14:30 libcudnn.so.7.3.1
-rwxr-xr-x  1 root root 349141232 Jan 27 14:30 libcudnn.so.7.4.2
...
skytree
la source
Une explication sur ce qui se passe ici et pourquoi serait très appréciée
Rika