본문 바로가기

카테고리 없음

[딥러닝 학습을 위한 GPU 셋업] ubuntu 20.04 RTX 4090 24GB CUDA/CUDNN/TensorRT/Tensorflow/Pytorch 환경 완벽 구축

Spec Version

  1. CPU : 11th Gen Intel(R) Core(TM) i9-11900K @ 3.50GHz
  2. Architecture : x86_64
  3. OS : Ubuntu 20.04 LTS
  4. GPU : RTX4090 24GB
  5. Python : 3.8
  6. Tensorflow : 2.12.0 : https://www.tensorflow.org/install/source?hl=ko#gpu
  7. Cuda : 11.8 : https://developer.nvidia.com/cuda-11-8-0-download-archive?target_os=Linux
  8. Cudnn : 8.6.0 : https://developer.nvidia.com/rdp/cudnn-archive#a-collapse860-118
  9. TensorRT : 8.6.1.6 : https://developer.nvidia.com/nvidia-tensorrt-8x-download
  10. Conda 가상환경에서 진행함 : 도커빌드는 추후예정 (도커빌드가 더 쉬운 분들에겐 도커를 사용하는 걸 추천)

1. Cuda 설치 : 11.8

wget <https://developer.nvidia.com/cuda-11-8-0-download-archive?target_os=Linux>
sudo sh cuda_11.8.0_520.61.05_linux.run
> ~/.bashrc.
export PATH="/usr/local/cuda/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"

> source ~/.bashrc
> nvcc -V : Cuda 버전 확인 

2. CuDNN 설치 : 8.6.0

 💡 tensorflow 지원시 다음과 같은 버전을 지원하기 이에 맞춰서 Cudnn : 8.6.0을 설치

버전 파이썬 버전 컴파일러 빌드 도구 cuDNN 쿠다

텐서플로우-2.12.0 3.8-3.11 GCC 9.3.1 바젤 5.3.0 8.6 11.8
  1. CuDNN 링크 들어가서 로그인 후 버전에 맞게 설치 (deb 설치파일 다운로드하지 않고 tar.xz파일로 받기)
  2. CuDNN 세팅
tar xvf cudnn-linux-x86_64-8.6.0.163_cuda11-archive.tar.xz

# 압축 풀린 파일들을 /ur/local/로 복붙 및 권한 설정

sudo cp cudnn-linux-x86_64-8.6.0.163_cuda11-archive/include/cudnn*.h /usr/local/cuda/include
sudo cp cudnn-linux-x86_64-8.6.0.163_cuda11-archive/lib/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*
  1. 세팅 확인
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
sudo ldconfig #-> 에러 발생

cd /usr/local/cuda-11.8/lib64
ls -lha libcudnn* 

# 링크 걸어주기 
sudo ln -sf libcudnn.so.8.6.0 libcudnn.so.8
sudo ln -sf libcudnn.so.8 libcudnn.so

sudo ln -sf libcudnn_adv_infer.so.8.6.0 libcudnn_adv_infer.so.8
sudo ln -sf libcudnn_adv_infer.so.8 libcudnn_adv_infer.so

sudo ln -sf libcudnn_adv_train.so.8.6.0 libcudnn_adv_train.so.8
sudo ln -sf libcudnn_adv_train.so.8 libcudnn_adv_train.so

sudo ln -sf libcudnn_cnn_infer.so.8.6.0 libcudnn_cnn_infer.so.8
sudo ln -sf libcudnn_cnn_infer.so.8 libcudnn_cnn_infer.so

sudo ln -sf libcudnn_cnn_train.so.8.6.0 libcudnn_cnn_train.so.8
sudo ln -sf libcudnn_cnn_train.so.8 libcudnn_cnn_train.so

sudo ln -sf libcudnn_ops_infer.so.8.6.0 libcudnn_ops_infer.so.8
sudo ln -sf libcudnn_ops_infer.so.8 libcudnn_ops_infer.so

sudo ln -sf libcudnn_ops_train.so.8.6.0 libcudnn_ops_train.so.8
sudo ln -sf libcudnn_ops_train.so.8 libcudnn_ops_train.so
# 심볼릭 링크 형성됨
sudo ldconfig

2. 확인

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

3. TensorRT 설치 : 8.6 으로 설치

  1. TensorRT 링크로 들어가 웹페이지 로그인 후 설치 (deb 설치파일 다운로드하지 않고 tar.xz파일로 받기)
  2. 세팅
tar -xvzf TensorRT-8.6.1.6.Linux.x86_64-gnu.cuda-11.8.tar.gz
pip3 install -upgrade pip 
# 환경변수 적용
sudo vi ~/.bashrc
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/eiden/gpu_set/TensorRT-8.6.1.6/lib

# 저장 후 bashrc 적용
source ~/.bashrc

3. tensorRT python에 적용


버전 확인하길 바랍니다.

cp36 = python3.6

cp37 = python3.7

cp38 = python3.8


# 자신의 파이썬 버전에 맞게 사용 *여기서는 python=3.8버전 을 사용 
python3 -m pip install tensorrt-8.6.1.6-cp38-none-linux_x86_64.whl 

+4. Pytorch에 TensorRT 적용하기 쉽게 만들기

git clone "<https://github.com/NVIDIA-AI-IOT/torch2trt>"

unzip torch2trt-master.zip

sudo python3 setup.py install

5. Tensorflow 설치

pip install tensorflow=2.12.0

6. Pytroch 설치

  1. Link로 들어가서 현재 상황에 맞는 버전 설치

Version 참고 : https://pytorch.org/get-started/previous-versions/

 💡 파이토치 및 비전/오디오 버전도 호환성을 맞추어야 한다. tensorrt이 최신버전을 지원하지 않는 경우가 많아 구 버전을 사용하길 추천한다.

pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 torch-tensorrt==1.4.0 

7. 확인

  1. 드라이버 설치 확인 : nvidia-smi
  2. cuda 설치 확인 : nvcc -V
  3. cudnn 설치 확인 : ldconfig -N -v $(sed 's/:/ /' <<< $LD_LIBRARY_PATH) **2**>/dev/null | grep libcudnn
  4. tensorflow 버전 확인
> python
from tensorflow.python.client import device_lib
import tensorflow as tf
print('#'*30, f"텐서플로우 버전 확인", '#'*30, )
print(tf.__version__)
print('#'*30, f"사용가능 디바이스 확인", '#'*30, )
print(device_lib.list_local_devices())
print('#'*30, f"GPU 사용 여부 확인",'#'*30, )
print(tf.config.list_physical_devices('GPU')) 
print('#'*30, f"CUDNN 사용 여부 확인",'#'*30, )
print("Is cuDNN available: ", tf.test.is_built_with_cuda())

import torch
import torchvision
import torchaudio

print('#'*30, f"파이토치 버전 확인", '#'*30, )
print(torch.__version__)
print('#'*30, f"파이토치 비전 버전 확인", '#'*30, )
print(torchvision.__version__)
print('#'*30, f"파이토치 버전 확인", '#'*30, )
print(torchaudio.__version__)
print('#'*30, f"GPU 사용 여부 확인", '#'*30, )
if torch.cuda.is_available():
    print("CUDA is available. PyTorch can use the GPU.")
else:
    print("CUDA is not available. PyTorch cannot use the GPU.")