¿Por qué obtengo "/sbin/ldconfig.real: /usr/local/cuda/lib64/libcudnn.so.7 no es un enlace simbólico"?

12

Después de instalar CUDAtoolkit y cuDNNexitosamente sin ningún problema, cada vez que lo hago:

sudo ldconfig 

Me sale el:

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

mensaje de error.
¿Cuál es la razón y cómo puedo resolver esto?

Por cierto, he instalado cuDNNasí:

 # 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 salida de ls -lha libcudnn*in /usr/local/cuda/lib64es la siguiente:

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
fuente

Respuestas:

16

Gracias a Dios, encontré la solución usando este enlace .

Esto puede suceder cuando ejecuta sudo ldconfig después de copiar archivos cuDNN.

Después de instalar cuDNN, copiar los archivos extraídos /usr/lib/cuda/lib64y crear los enlaces simbólicos, las cosas pueden salir mal con los enlaces simbólicos.

Así que ve /usr/local/cuda/lib64/y corre ls -lha libcudnn*.

Debería ver dos enlaces simbólicos (verde azulado en negrita) y un solo archivo. Algo como esto:

/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 versión exacta de libcudnn.so.5.1.5 puede ser un poco diferente para usted (tal vez libcudnn.so.5.1.10). En ese caso, adapte el código en consecuencia

Si libcudnn.soy libcudnn.so.5no son enlaces simbólicos, entonces esta es la razón por la que recibió este error. Si es así, esto es lo que debe hacer:

/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

Después de ejecutar el ls -lha libcudnn*en /usr/local/cuda/lib64y ver:

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

Tenía que hacer :

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

Y todo vuelve a la normalidad :)

Rika
fuente
44
Técnicamente, un enlace simbólico, como se menciona en el mensaje de error, se crea con 'ln -s' en lugar de simplemente 'ln', como se sugiere en la respuesta, lo que crearía un enlace duro.
Giorgos Sfikas
2

Cheque

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

No hay enlace ->

(marque todos los enlaces: sudo ldconfig -v)

Porque

(Cudnn descargado de nvidia tiene enlace simbólico)

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

Cuando copiamos, perdimos información simbólica.

memorándum: ln -s A <-- B

Ir /usr/local/cuda/lib64

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

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

Ahora,

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
...
cielo arbol
fuente
Una explicación de lo que está sucediendo aquí y por qué sería muy apreciada
Rika