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를 사용중이라는 것을 볼 수 있습니다.
'Deep Learning & Machine Learning > Tensorflow&PyTorch 개발환경' 카테고리의 다른 글
Colab에서 Google Drive 마운트하는 방법 (0) | 2023.10.15 |
---|---|
Tensorflow 에러 – ImportError: DLL load failed: 지정된 모듈을 찾을 수 없습니다 (0) | 2023.10.14 |
UserWarning: Possibly corrupt EXIF data 해결방법 (0) | 2023.10.13 |
Tensorflow 설치시 에러 – [WinError 32] 다른 프로세스가 파일을 사용 중이기 때문에 프로세스가 액세스 할 수 없습니다 (0) | 2023.10.13 |
WSL2 상에서 Tensorflow의 에러 : Could not load library libcudnn_cnn_infer.so.8. Error (0) | 2023.10.06 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!