is not a symbolic link 문제

Taehong Jang·2022년 4월 28일
1

원래 참고 글 : https://lapina.tistory.com/130

https://s3.us-west-2.amazonaws.com/secure.notion-static.com/b0791cd9-387f-4cd2-9785-a8e4e013bbcc/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45EIPT3X45%2F20220428%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20220428T041235Z&X-Amz-Expires=86400&X-Amz-Signature=02dbe02704bc0a15ce4e8d3cbb404b0e8cf9eb861f9de0b8a95f3f4ee7dd1589&X-Amz-SignedHeaders=host&response-content-disposition=filename%20%3D%22Untitled.png%22&x-id=GetObject

워크스테이션 판매처에서 cuda, cudnn 설치 과정중에 심볼릭 링크가 깨진 것으로 보인다.

파일을 복사할 때, 심볼릭 링크를 살리지 않고 복사하면
→ 심볼릭 링크 깨짐 + 심볼릭 링크 파일이 일반 파일이 되면서 원본 파일의 내용이 복제되는 방식으로 처리 됨

심볼릭 링크 문제 해결방법

Cudnn 카피 시 Symbolic link가 사라지기 때문임. 이를 다시 설정해주면 해결됨.

자신의 CUDA 버전에 맞는 폴더로 이동

$ cd /usr/local/cuda-11.3/lib64

아래와 같이 검색을 해주면 (심볼릭 링크를 포함한 파일에 대한 상세정보 확인 가능)

$ ls -lha libcudnn*

심볼릭 링크 ->

libcudnn.so, so.8, so.8.2.0 파일들에 링크가 없는걸 볼 수 있음.

아래와 같이 명령어를 입력 해주자.

$ sudo ln -sf libcudnn.so.8.2.0 libcudnn.so.8
$ sudo ln -sf libcudnn.so.8 libcudnn.so
  • -s 옵션은 심볼릭 링크를 만드는 것, -f는 이것을 강제로 실행하는 것 sudo ln -sf libcudnn.so.8.2.0 libcudnn.so.8 명령어를 실행하면 libcudnn.so.8에 있던 내용들이 삭제되는 것이라, 강제로 실행해야만 명령실행이 가능. cmp 명령어를 통해 두 파일의 내용이 동일하므로 심볼릭 링크를 걸어도 무관함. 다만, 파일 이름은 다르면서 하나의 원본으로 유지한다는 장점이 있다는 것은 알지만, 왜 이런 파일구조로 유지하는지에 대한 구체적인 이유는 잘모르겠다.
    $ ln -s [원본 파일] [심볼릭링크 파일]

심볼릭 링크를 생성한 후에 조회

-rwxr-xr-x 1 root root 124M Feb 28 08:28 libcudnn_adv_infer.so
-rwxr-xr-x 1 root root 124M Feb 28 08:28 libcudnn_adv_infer.so.8
-rwxr-xr-x 1 root root 124M Feb 28 08:28 libcudnn_adv_infer.so.8.2.0
-rwxr-xr-x 1 root root  82M Feb 28 08:28 libcudnn_adv_train.so
-rwxr-xr-x 1 root root  82M Feb 28 08:28 libcudnn_adv_train.so.8
-rwxr-xr-x 1 root root  82M Feb 28 08:28 libcudnn_adv_train.so.8.2.0
-rwxr-xr-x 1 root root 676M Feb 28 08:28 libcudnn_cnn_infer.so
-rwxr-xr-x 1 root root 676M Feb 28 08:28 libcudnn_cnn_infer.so.8
-rwxr-xr-x 1 root root 676M Feb 28 08:28 libcudnn_cnn_infer.so.8.2.0
-rw-r--r-- 1 root root 840M Feb 28 08:28 libcudnn_cnn_infer_static.a
-rw-r--r-- 1 root root 840M Feb 28 08:28 libcudnn_cnn_infer_static_v8.a
-rwxr-xr-x 1 root root 169M Feb 28 08:28 libcudnn_cnn_train.so
-rwxr-xr-x 1 root root 169M Feb 28 08:28 libcudnn_cnn_train.so.8
-rwxr-xr-x 1 root root 169M Feb 28 08:28 libcudnn_cnn_train.so.8.2.0
-rw-r--r-- 1 root root 228M Feb 28 08:28 libcudnn_cnn_train_static.a
-rw-r--r-- 1 root root 228M Feb 28 08:28 libcudnn_cnn_train_static_v8.a
-rwxr-xr-x 1 root root 272M Feb 28 08:28 libcudnn_ops_infer.so
-rwxr-xr-x 1 root root 272M Feb 28 08:28 libcudnn_ops_infer.so.8
-rwxr-xr-x 1 root root 272M Feb 28 08:28 libcudnn_ops_infer.so.8.2.0
-rwxr-xr-x 1 root root  57M Feb 28 08:28 libcudnn_ops_train.so
-rwxr-xr-x 1 root root  57M Feb 28 08:28 libcudnn_ops_train.so.8
-rwxr-xr-x 1 root root  57M Feb 28 08:28 libcudnn_ops_train.so.8.2.0
lrwxrwxrwx 1 root root   13 Apr 27 08:58 libcudnn.so -> libcudnn.so.8
lrwxrwxrwx 1 root root   17 Apr 27 08:58 libcudnn.so.8 -> libcudnn.so.8.2.0
-rwxr-xr-x 1 root root 159K Feb 28 08:28 libcudnn.so.8.2.0
-rw-r--r-- 1 root root 1.4G Feb 28 08:28 libcudnn_static.a
-rw-r--r-- 1 root root 1.4G Feb 28 08:28 libcudnn_static_v8.a

해당 부분만 조회해보면

ls -al libcudnn.so*

심볼릭 링크가 형성됨

lrwxrwxrwx 1 root root     13 Apr 27 08:58 libcudnn.so -> libcudnn.so.8
lrwxrwxrwx 1 root root     17 Apr 27 08:58 libcudnn.so.8 -> libcudnn.so.8.2.0
-rwxr-xr-x 1 root root 162360 Feb 28 08:28 libcudnn.so.8.2.0

다음의 명령어를 입력했을 때,

ldconfig -N -v $(sed 's/:/ /' <<< $LD_LIBRARY_PATH) 2>/dev/null | grep libcudnn

아래와 같이 나오면 해결 된 것임.

(아래와 같이 나오려면, libcudnn_cnn_train.so.8 같은 것들도 다 심볼릭 링크를 이어줘야 하는가 했는데 , 위에서 처리한 libcudnn.so, libcudnn.so.8, libcudnn.so.8.2.0 부분만 링크시키면 아래처럼 나옴)

        libcudnn_cnn_train.so.8 -> libcudnn_cnn_train.so.8.2.2
        libcudnn_ops_infer.so.8 -> libcudnn_ops_infer.so.8.2.2
        libcudnn.so.8 -> libcudnn.so.8.2.2
        libcudnn_cnn_infer.so.8 -> libcudnn_cnn_infer.so.8.2.2
        libcudnn_adv_train.so.8 -> libcudnn_adv_train.so.8.2.2
        libcudnn_ops_train.so.8 -> libcudnn_ops_train.so.8.2.2
        libcudnn_adv_infer.so.8 -> libcudnn_adv_infer.so.8.2.2

0개의 댓글