Setting, Error/GPU

[Error] Could not load dynamic library 'cudart64_110.dll' dlerror cudart64_110.dll not found

Juheon Kwak 2022. 4. 1. 18:14

※ rtx 3090, ubuntu 20.04, docker, tensorflow 사용

 

맨 처음 tensorflow-gpu의 버전부터 바꿔보기, 2.4를 사용하면 똑바로 gpu가 인식되는 경우가 있다.

$ pip3 install tensorflow-gpu==2.4.0 

 

해당 에러로 도커 내부의 tensorflow에서 gpu가 잡히지 않는다.

필요로 하는 것은 11 버전인데 cudnn을 깔면 8이나 10으로 설치되었기 때문이다.

뒤에 나와있는 숫자를 다 11로 바꿔주면 된다.

 

※ 이미 cudnn이 다 깔려있다면 3번으로 가서 숫자만 바꾸면 된다.

 

[해결방법]

1. nvidia 홈페이지(밑의 링크)에 가서, 로그인 후 cudnn을 본인의 환경에 맞게 다운로드 후 압축 해제

https://developer.nvidia.com/cudnn

 

NVIDIA cuDNN

NVIDIA cuDNN The NVIDIA CUDA® Deep Neural Network library (cuDNN) is a GPU-accelerated library of primitives for deep neural networks. cuDNN provides highly tuned implementations for standard routines such as forward and backward convolution, pooling, nor

developer.nvidia.com

$ tar xvzf [cudnn tgz 파일명]

( 파일을 풀면 cuda 폴더가 생성됨 )

 

2. 경로에 맞게 파일 복사, 이동

- 이 때 도커 컨테이너 내부 경로로 파일을 이동해야 한다. 

$ cp cuda [본인이 연결한 도커 컨테이너 경로]

 

- 본인의 도커 컨테이너에 접속 후 옮긴 cuda 폴더가 있는 경로까지 이동

$ docker exec -it [컨테이너명] /bin/bash

$ cd [cuda 폴더 있는 경로]

$ cp lib64/* /usr/local/cuda/lib64

$ cp include/* /usr/local/cuda/include

$ chmod a+r /usr/local/cuda/lib64/* /usr/local/cuda/include/*

 

3. 파일들의 cuda 버전을 맞춰주기

에러 뜰 때 could not load dynamic library, libcudart.so.11.0 not found 이런 식으로 파일명이랑, 버전을 다 알려주니까 알려주는 버전에 맞게 잘 바꿔보기.

위의 버전으로 다 들고 와야하는데 파일이 없다고 하는 거니까 저거에 맞게 다 바꿔준다.

 

먼저 파일들이 어디 있는지부터 알아야 한다

 

- 가장 상단의 폴더 경로로 이동

$ cd /

- 해당 파일들이 어디 존재하는지 검색 (그러면 경로가 나옴 --> 해당 경로에 있는 파일들의 이름을 바꿔주면 됨)

$ find -name libcud*

 

$ mv /usr/local/cuda/lib64/[error난 파일명].so.* /usr/local/cuda/lib64/[error난 파일명].so.11.x[본인 버전에 맞게]

 

위의 libcudart.so.11.0처럼 libcudart를 load할 수 없다고 뜨면

ex) mv /usr/local/cuda/lib64/libcudart.so.* /usr/local/cuda/lib64/libcudart.so.11.0