반응형

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




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



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를 사용중이라는 것을 볼 수 있습니다. 







반응형

해본 것을 문서화하여 기록합니다.
부족함이 있지만 도움이 되었으면 합니다.


포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
질문을 남겨주면 가능한 빨리 답변드립니다.


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

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기

댓글을 달아 주세요

">
  1. thumbnail
    ubuntu
    2020.07.27 16:31

    우분투 20.04를 설치 할때 자동으로 nvidia 드라이버와 쿠다도 같이 설치가 되었습니다.
    파이토치와 파이스파크를 run 할때는 gpu를 사용하는데

    케라스와 텐서플로를 사용할때는 gpu를 사용하지 않아 질문 드립니다.

    터미널을 통해 /usr/local를 살펴봤는데 아무리 봐도 cuda라는 폴더가 나오지 않습니다. 이런 경우는 어떻게 cudnn를 설치 해야 합니까

  2. thumbnail
    Favicon of https://gbox3d.tistory.com BlogIcon 밥을먹는선비

    따라해보니 단한번의 실패도 없이 바로 잘되네요.
    너무 세세하게 쓰신거같아 글읽는제가 너무 공짜로 먹는거같아 미안해집니다.(미안해서 책이라도 주문 했습니다.)
    한가지단점이 있다면 원래 저는 구글 검색을 해서 자료를 모은후 여러가기 자료를 취합해서 작업을 하곤했는데...
    이렇게 한방에 끝내버리니 여기를 자주오게되면 제가 게을러질거같습니다^^(농담입니다.)

    정말감사합니다.

  3. thumbnail
    Favicon of https://gbox3d.tistory.com BlogIcon 밥을먹는선비

    macosx 에서 zsh 터미널로 ssh 접속할때는 source ~./bashrc를 매번 해줘야하네요. 터미널을 bash로 바꾸면 잘되긴합니다.

  4. thumbnail
    Favicon of https://webnautes.tistory.com BlogIcon webnautes

    아직 정확히 확인된 건 아닌데 다음과 같은 에러가 날 수 있습니다.

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


    텐서플로우를 2.4.0으로 낮추면 해결되며

    혹 CUDA 11.1, cuDNN을 8.1.0 으로 재설치시 해결됩니다.

  5. thumbnail
    Favicon of https://webnautes.tistory.com BlogIcon webnautes

    상위 NVIDIA 그래픽 카드의 경우 11.0에서 지원이 안되어 문제가 생깁니다. 현재는 최소 11.1 이상을 사용해야 해결됩니다.

    CUDA 11.1, cuDNN을 8.1.0 으로 재설치시 해결됩니다.

    아래 링크에 있는 표를 참고하세요.

    https://qiita.com/tomoaki_teshima/items/294c9ffb03a3dcc4cfef

  6. thumbnail
    Favicon of https://gbox3d.tistory.com BlogIcon 밥을먹는선비

    포스트내용이 신버전으로 업그래이드되면서 전에 있던 pyenv관련 내용은 없어진거같군요.
    사실 언제부턴가 pyenv가 좀 설정하는 방법이 좀 바뀐듯해서 저도 굳이 꼭 써야할 이유를 몰라서 빼고쓰고있긴했습니다만...

  7. thumbnail
    Favicon of https://atoh.tistory.com BlogIcon ahsl

    올려주신 글 보고 한번에 성공했습니다. 감사합니다.
    혹시 사용하면서 다음과 같은 로그들이 여러개 뜨는데 안나오게 하려면 어떻게 해야하는지 혹시 알 수 있을까요?
    2021-09-08 00:21:30.122024: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcudart.so.11.0