ทำไมฉันถึงได้รับ“ /sbin/ldconfig.real: /usr/local/cuda/lib64/libcudnn.so.7 ไม่ใช่ลิงก์สัญลักษณ์”?


12

หลังจากติดตั้งCUDAชุดเครื่องมือและcuDNNประสบความสำเร็จโดยไม่มีปัญหาใด ๆ เมื่อใดก็ตามที่ฉันทำ:

sudo ldconfig 

ฉันได้รับ:

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

ข้อความผิดพลาด.
อะไรคือเหตุผลและฉันจะแก้ไขปัญหานี้ได้อย่างไร

อย่างไรก็ตามฉันได้ติดตั้ง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

ผลลัพธ์ของls -lha libcudnn*in /usr/local/cuda/lib64เป็นดังนี้:

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

คำตอบ:


17

ขอบคุณพระเจ้าที่รักฉันพบวิธีแก้ปัญหาโดยใช้ลิงค์นี้

สิ่งนี้อาจเกิดขึ้นเมื่อคุณเรียกใช้ sudo ldconfig หลังจากคัดลอกไฟล์ cuDNN

หลังจากติดตั้งcuDNNแล้วให้คัดลอกไฟล์ที่แยกไปยัง /usr/lib/cuda/lib64และสร้าง symlink สิ่งต่าง ๆ อาจผิดปกติกับ symlink

เพื่อไปและเรียกใช้/usr/local/cuda/lib64/ls -lha libcudnn*

คุณควรเห็น symlink สองอัน (ตัวหนาสีน้ำเงิน) และไฟล์เดียว บางสิ่งเช่นนี้

/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

เวอร์ชันที่แน่นอนของ libcudnn.so.5.1.5 อาจแตกต่างกันเล็กน้อยสำหรับคุณ (อาจเป็น libcudnn.so.5.1.10) ในกรณีนั้นให้ปรับรหัสให้เหมาะสม

หากlibcudnn.soและlibcudnn.so.5ไม่ใช่ symlink นี่คือสาเหตุที่ทำให้คุณได้รับข้อผิดพลาดนี้ ถ้าเป็นเช่นนั้นนี่คือสิ่งที่คุณต้องทำ:

/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

หลังจากทำงาน ls -lha libcudnn*ใน/usr/local/cuda/lib64และเห็น:

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

ฉันต้องทำ :

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

และทุกอย่างกลับสู่ปกติ :)


4
ในทางเทคนิคลิงก์สัญลักษณ์ซึ่งถูกอ้างถึงโดยข้อความแสดงข้อผิดพลาดนั้นถูกสร้างขึ้นด้วย 'ln -s' แทนที่จะเป็นเพียงแค่ 'ln' ตามที่แนะนำในคำตอบซึ่งจะสร้างลิงก์ยากขึ้น
Giorgos Sfikas

3

ตรวจสอบ

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

ไม่มีลิงก์ ->

(ตรวจสอบการเชื่อมโยงทั้งหมด: sudo ldconfig -v)

เพราะ

(cudnn ที่ดาวน์โหลดจาก nvidia มีลิงก์สัญลักษณ์)

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

เมื่อเราคัดลอกเราสูญเสียข้อมูลเชิงสัญลักษณ์

บันทึก: ln -s A <-- B

ไปที่ /usr/local/cuda/lib64

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

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

ตอนนี้

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

คำอธิบายเกี่ยวกับสิ่งที่เกิดขึ้นที่นี่และทำไมจะได้รับการชื่นชมมาก
Rika
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.