반응형

Ubuntu 20.04에 CUDA Toolkit와 cuDNN, Tensorflow를 설치하는 방법을 다룹니다.

텐서플로우 최신 버전( 현재 2.5.0 )에서 CUDA 11을 사용하고 있어 수정했습니다.



2020. 7. 19  최초 작성

2020. 8. 31  

2021. 5. 21  CUDA 11.0, cuDNN 8.0.5 사용

2021. 5. 24  CUDA 11.1, cuDNN 8.1.0 사용

2021. 5. 29  CUDA 11.2, cuDNN 8.1.0으로 변경

                    CUDA를 같이 사용하는 OpenCV에서 다음 에러가 발생해서 변경함. 

                    

                    checkVersions CUDART version 11020 reported by cuDNN 8100 does not match with the version reported by CUDART 11010

 

2023. 2. 12 tensorflow-gpu 대신 tensorflow 설치로 변경




1.
Loaded runtime CuDNN library: 8.0.5 but source was compiled with: 8.1.0.

텐서플로우를 2.4.0으로 낮추거나 또는 cuDNN을 8.1.0 으로 재설치시 해결됩니다.


2.
상위 NVIDIA 그래픽 카드의 경우 CUDA 11.0에서 지원이 안되어 문제가 생깁니다. 
CUDA 11.0에서 Compute Capability 8.0까지 지원하는데 그보다 높은 경우이기 때문입니다.

현재는 최소 CUDA  11.1 이상을 사용해야 해결됩니다. CUDA 11.1부터 Compute Capability 8.6까지 지원합니다. 

아래 링크에 있는 표를 참고하세요.
https://qiita.com/tomoaki_teshima/items/294c9ffb03a3dcc4cfef 




현재(2021. 5. 21) 텐서플로우에서 GPU를 사용하기 위한 CUDA 버전은 다음과 같습니다.

https://www.tensorflow.org/install/gpu

 

본 포스트는 CUDA Toolkit 11.2, cuDNN 8.1.0 에서 진행해보았습니다. 

 



NVIDIA 그래픽 카드 드라이버 설치

 

다음 명령으로 현재 사용중인 그래픽 카드에 설치할 수 있는 드라이버를 확인합니다. 

 

$ ubuntu-drivers devices



webnautes@webnautes-PC:~$ ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 ==
modalias : pci:v000010DEd00002191sv000017AAsd00003FFCbc03sc00i00
vendor   : NVIDIA Corporation
model    : TU116M [GeForce GTX 1660 Ti Mobile]
driver   : nvidia-driver-460-server - distro non-free
driver   : nvidia-driver-450-server - distro non-free
driver   : nvidia-driver-418-server - distro non-free
driver   : nvidia-driver-450 - distro non-free
driver   : nvidia-driver-460 - distro non-free recommended
driver   : xserver-xorg-video-nouveau - distro free builtin





확인된 드라이버 중 하나를 설치합니다. 

 

$ sudo apt install nvidia-driver-460



적용하려면 재부팅이 필요합니다. 



시스템에서 NVIDIA 드라이버를 사용하고 있는지 확인합니다. 

왼쪽 아래에 보이는 프로그램 표시 아이콘을 클릭하여 소프트웨어 & 업데이트를 실행합니다. 

 

 

 

 

스크린샷처럼 이미 NVIDIA 드라이버를 사용하고 있지 않으면 선택을 합니다. 

이 경우 우분투를 재부팅해야 반영이 됩니다. 

 

 

 

 

터미널에서 nvidia-smi 명령을 실행하여 설치한 드라이버 버전이 맞는지 확인하세요.

여기에선 nvidia-driver-460에 맞는 460이 보입니다.  

 




기존 CUDA 삭제

데비안 패키지로 설치한게 아니라면 다음처럼 간단히 기존에 설치된 CUDA를 제거할 수 있습니다. 

 

webnautes@webnautesPC:~$ sudo rm -rf /usr/local/cuda*



~/.bashrc나 /etc/profile에 추가되있는 CUDA 관련 설정도 제거해야 합니다. 

 

export PATH=$PATH:/usr/local/cuda-11.0/bin

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.0/lib64

export CUDADIR=/usr/local/cuda-11.0





CUDA 11.2 설치

 

아래 링크에 접속하여 CUDA Toolkit 11.2를 선택합니다. 

 

https://developer.nvidia.com/cuda-toolkit-archive




다음처럼 선택합니다.  Version은 사용중인 Ubuntu 버전을 선택하세요.

 




선택 완료 후, 그아래에 다음처럼 보이는 명령대로 설치를 진행합니다.

 





잠시 기다리면 설치 화면이 보입니다. 




Continue를 선택합니다. 

 



다음처럼 에러가 난다면 gcc가 설치안되어 있는 상태입니다. 

 

 Failed to verify gcc version. See log at /var/log/cuda-installer.log for details.



개발을 위한 필수 프로그램을 설치하고 다시 해보세요.

 

$ sudo apt-get install build-essential 




accept 입력 후, 엔터를 입력합니다.  




Driver 항목에서 스페이스바 눌러서 체크 해제하고 , Install 항목에서 엔터를 누릅니다. 

 



문제 없이 설치되면 다음처럼 보입니다. 

 




다음 명령을 사용하여 CUDA Toolkit 관련 설정을 환경 변수에 추가하고  바로 적용합니다. 

 

$ sudo sh -c "echo 'export PATH=$PATH:/usr/local/cuda-11.2/bin' >> /etc/profile"

$ sudo sh -c "echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.2/lib64' >> /etc/profile"

$ sudo sh -c "echo 'export CUDADIR=/usr/local/cuda-11.2' >> /etc/profile"

$ source /etc/profile



설치가 잘되었는지 확인합니다. 11.2가 보여야 합니다. 

 

webnautes@webnautesPC:~$ nvcc -V

nvcc: NVIDIA (R) Cuda compiler driver

Copyright (c) 2005-2020 NVIDIA Corporation

Built on Mon_Nov_30_19:08:53_PST_2020

Cuda compilation tools, release 11.2, V11.2.67

Build cuda_11.2.r11.2/compiler.29373293_0



cuDNN 8.1.0 설치



아래 링크에 접속 합니다. 

https://developer.nvidia.com/cudnn 



Download cuDNN을 클릭합니다. 



계속 진행하려면 로그인을 해야 합니다. 

 



라이센스에 동의한다고 체크하고( I Agree to the Terms of… ) 

Archived cuDNN Releases를 클릭합니다. 

 




목록에서 다음 항목을 클릭합니다. 

Download cuDNN v8.1.0 (January 26th, 2021), for CUDA 11.0,11.1 and 11.2



다음 항목을 클릭합니다. 

cuDNN Library for Linux (x86_64)




다운로드 받은 파일을 압축풀어서 파일 복사합니다. 

$ cd 다운로드

$ tar xvzf cudnn-11.2-linux-x64-v8.1.0.77.tgz

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

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

$ sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*



링크를 다시 걸어줘야 합니다. 

 

$ sudo ln -sf /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcudnn_adv_train.so.8.1.0 /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcudnn_adv_train.so.8

 

$ sudo ln -sf /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8.1.0  /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8

 

$ sudo ln -sf /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8.1.0  /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8

 

$ sudo ln -sf /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8.1.0  /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8

 

$ sudo ln -sf /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcudnn_ops_train.so.8.1.0  /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcudnn_ops_train.so.8

 

$ sudo ln -sf /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8.1.0 /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8

 

$ sudo ln -sf /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcudnn.so.8.1.0  /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcudnn.so.8




새로 추가된 라이브러리를 시스템에서 찾을 수 있도록 하고 루트 디렉토리로 이동합니다.  

 

$ sudo ldconfig

$ cd




설정이 제대로 되었는지 확인합니다. 다음처럼 8.1.0이 보여야 합니다.  



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

libcudnn_adv_train.so.8 -> libcudnn_adv_train.so.8.1.0

libcudnn_adv_infer.so.8 -> libcudnn_adv_infer.so.8.1.0

libcudnn_ops_infer.so.8 -> libcudnn_ops_infer.so.8.1.0

libcudnn.so.8 -> libcudnn.so.8.1.0

libcudnn_ops_train.so.8 -> libcudnn_ops_train.so.8.1.0

libcudnn_cnn_train.so.8 -> libcudnn_cnn_train.so.8.1.0

libcudnn_cnn_infer.so.8 -> libcudnn_cnn_infer.so.8.1.0




Tensorflow 설치

pip 명령을 사용하여 tensorflow를 설치합니다.

 

webnautes@webnautesPC:~$ pip3 install tensorflow



2023. 2. 12

tensorflow-gpu 대신에 tensorflow를 설치해야야 합니다.

 

The "tensorflow-gpu" package has been removed!

https://webnautes.tistory.com/1797    





python에서 tensorflow 모듈을 불러와서 설치가 제대로 되었는지 확인합니다.



webnautes@webnautesPC:~$ python3

Python 3.8.5 (default, Jan 27 2021, 15:41:15) 

[GCC 9.3.0] on linux

Type "help", "copyright", "credits" or "license" for more information.

 

>>> import tensorflow as tf

텐서플로우 모듈을 로드합니다. 

2021-05-24 21:47:01.907781: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcudart.so.11.0

CUDA 관련 파일 로드가 성공했다고 메시지가 보입니다. 

 

>>> tf.__version__

'2.5.0'

글 작성 시점에서 최신버전은 2.5.0입니다. 

 

>>> tf.config.list_physical_devices('GPU')

텐서플로우에서 GPU를 사용하는지 체크합니다. 

2021-05-24 21:47:33.368875: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcuda.so.1

2021-05-24 21:47:33.452319: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero

2021-05-24 21:47:33.453044: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1733] Found device 0 with properties: 

pciBusID: 0000:01:00.0 name: GeForce GTX 1660 Ti computeCapability: 7.5

coreClock: 1.59GHz coreCount: 24 deviceMemorySize: 5.80GiB deviceMemoryBandwidth: 268.26GiB/s

2021-05-24 21:47:33.453096: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcudart.so.11.0

2021-05-24 21:47:33.456504: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcublas.so.11

2021-05-24 21:47:33.456561: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcublasLt.so.11

2021-05-24 21:47:33.457694: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcufft.so.10

2021-05-24 21:47:33.457981: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcurand.so.10

2021-05-24 21:47:33.461124: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcusolver.so.11

2021-05-24 21:47:33.461790: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcusparse.so.11

2021-05-24 21:47:33.461945: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcudnn.so.8

2021-05-24 21:47:33.462054: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero

2021-05-24 21:47:33.462624: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero

2021-05-24 21:47:33.463239: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1871] Adding visible gpu devices: 0

[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]

GPU를 사용중이라는 것을 볼 수 있습니다. 







반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.

도움이 되셨다면 토스아이디로 후원해주세요.
https://toss.me/momo2024


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts