Warum erhalte ich "/sbin/ldconfig.real: /usr/local/cuda/lib64/libcudnn.so.7 ist kein symbolischer Link"?

12

Nach der Installation des CUDAToolkits und cuDNNohne Probleme erfolgreich, wann immer ich es tue:

sudo ldconfig 

Ich bekomme die :

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

Fehlermeldung.
Was ist der Grund und wie kann ich das beheben?

Übrigens habe ich so installiert cuDNN:

 # 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

Die Ausgabe von ls -lha libcudnn*in /usr/local/cuda/lib64ist wie folgt:

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
quelle

Antworten:

16

Dank Gott habe ich die Lösung über diesen Link gefunden .

Dies kann passieren, wenn Sie sudo ldconfig nach dem Kopieren von cuDNN-Dateien ausführen.

Nach der Installation cuDNN, dem Kopieren der extrahierten Dateien /usr/lib/cuda/lib64und dem Erstellen der Symlinks können Probleme mit den Symlinks auftreten.

Also geh /usr/local/cuda/lib64/und renn ls -lha libcudnn*.

Sie sollten zwei Symlinks (fett blaugrün) und eine einzelne Datei sehen. Etwas wie das:

/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

Die genaue Version von libcudnn.so.5.1.5 ist für Sie möglicherweise etwas anders (möglicherweise libcudnn.so.5.1.10). Passen Sie in diesem Fall den Code entsprechend an

Wenn libcudnn.sound libcudnn.so.5sind keine Symlinks, dann ist dies der Grund, warum Sie diesen Fehler erhalten haben. Wenn ja, müssen Sie Folgendes tun:

/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

Nach dem Laufen ls -lha libcudnn*in /usr/local/cuda/lib64und zu sehen:

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

Ich musste es tun :

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

Und alles ist wieder normal :)

Rika
quelle
4
Technisch gesehen wird eine symbolische Verknüpfung, auf die in der Fehlermeldung verwiesen wird, mit 'ln -s' anstelle von einfach 'ln' erstellt, wie in der Antwort vorgeschlagen, wodurch eine feste Verknüpfung erstellt wird.
Giorgos Sfikas
2

Prüfen

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
...
...

Keine Verbindung ->

(überprüfen Sie alle Verbindungen: sudo ldconfig -v)

weil

(cudnn von nvidia heruntergeladen hat symbolischen Link)

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

Beim Kopieren haben wir symbolische Informationen verloren.

Memo: ln -s A <-- B

Gehe zu /usr/local/cuda/lib64

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

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

Jetzt,

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
...
Himmelsbaum
quelle
Eine Erklärung, was hier los ist und warum wäre sehr dankbar
Rika