Prerequisite

  • Ubuntu 설치시에 update 하지 않는 것도 방법 (깔고나서 에러 나면. linux-headers 가 문제)
  • Secure Boot 모드는 disabled 시켜놓자 (설치할때 password 넣으라고 하는데 귀찮음)
$ sudo apt install make gcc vim openssl libgoogle-perftools4 libtcmalloc-minimal4 g++ freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libglu1-mesa libglu1-mesa-dev
$ sudo apt install linux-headers-generic
$ sudo apt install libglu1-mesa libxi-dev libxmu-dev gcc build-essential

Uninstalling Nvidia Driver

$ sudo apt-get remove --purge 'nvidia.*'
$ sudo apt-get remove --purge 'cuda.*'
$ sudo apt-get remove --purge 'libnvidia*'
$ sudo apt-get autoremove
$ sudo apt autoclean
$ sudo apt-get install ubuntu-desktop
$ sudo rm /etc/X11/xorg.conf
$ sudo nvidia-uninstall

Checking Current Nvidia Driver

현재 설치된 Nvidia 버젼을 확인합니다.

$ modinfo $(find /usr/lib/modules -name nvidia.ko)

# apt 로 확인
$ sudo apt --installed list | grep nvidia-driver

Checking Supported CUDA Version

CUDA Toolkit version

Pytorch CUDA Tensorflow CUDA
11.8 11.8
12.1  

CUDNN

Pytorch CUDA Tensorflow CUDA Nvidia Version
  8.6.0 520

Installing Nvidia Driver

일단 설치 가능한 버젼을 확인합니다.

$ sudo ubuntu-drivers list --gpgpu

nvidia-driver-470-server, (kernel modules provided by linux-modules-nvidia-470-server-generic-hwe-22.04)
nvidia-driver-535-server, (kernel modules provided by linux-modules-nvidia-535-server-generic-hwe-22.04)
nvidia-driver-535-open, (kernel modules provided by linux-modules-nvidia-535-open-generic-hwe-22.04)
nvidia-driver-470, (kernel modules provided by linux-modules-nvidia-470-generic-hwe-22.04)
nvidia-driver-535, (kernel modules provided by linux-modules-nvidia-535-generic-hwe-22.04)
nvidia-driver-545, (kernel modules provided by nvidia-dkms-545)
nvidia-driver-545-open, (kernel modules provided by nvidia-dkms-545-open)
nvidia-driver-535-server-open, (kernel modules provided by linux-modules-nvidia-535-server-open-generic-hwe-22.04)

이후 설치 합니다.
2024년 6월 기준으로 520 에다가 CUDA Toolkit 11.8 이 잘 작동합니다. (Ubuntu 22.04)
545 아래는 에러가 났습니다.

# 커널 설치
$ sudo apt install linux-headers-$(uname -r)

# Nvidia 드라이버 설치
# xxx 부분은 예를 들어서 "520" 
$ sudo apt install nvidia-common-xxx
$ sudo apt install nvidia-dkms-xxx
$ sudo apt install nvidia-driver-xxx
$ sudo apt install nvidia-settings

이후 설치된 package 를 확인 할 수 있습니다.

$ dpkg --get-selections | grep nvidia
$ dpkg --get-selections | grep cuda

Installing CUDA Toolkit 11.8

  • CUDA Toolkit 11.8
    • 이때 중요한건 runfile (local) 을 선택해서 다운로드 받고 실행해야 합니다.
    • 다른것 deb 로 실행시 에러가 납니다.
$ wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
$ sudo sh cuda_11.8.0_520.61.05_linux.run

실행후 메뉴 화면에서 오직 CUDA Toolkit 만 설치하도록 합니다.

Install CuDNN

$ wget https://developer.download.nvidia.com/compute/cudnn/9.1.1/local_installers/cudnn-local-repo-ubuntu2204-9.1.1_1.0-1_amd64.deb
$ sudo dpkg -i cudnn-local-repo-ubuntu2204-9.1.1_1.0-1_amd64.deb
$ sudo cp /var/cudnn-local-repo-ubuntu2204-9.1.1/cudnn-*-keyring.gpg /usr/share/keyrings/
$ sudo apt-get update

# 설치합니다. 
$ sudo apt-get -y install cudnn-cuda-11

# 버젼 확인합니다. 
$ nvcc --version
Build cuda_11.5.r11.5/compiler.30672275_0

Install Pytorch TensorRT

cuda 11.5 에는 다음을 설치 합니다.

$ python -m pip install torch torch-tensorrt tensorrt --extra-index-url https://download.pytorch.org/whl/cu115

cuda 11.8 에는 다음을 설치 합니다.

$ python -m pip install torch torch-tensorrt tensorrt --extra-index-url https://download.pytorch.org/whl/cu118

잘 작동하는지 확인 합니다.

import torch
import torch_tensorrt

# 간단한 모델 정의 (스크립팅 가능)
class SimpleModel(torch.nn.Module):
    def forward(self, x):
        return x + 1

model = SimpleModel().cuda().eval()

# JIT 스크립트 모듈로 변환
scripted_model = torch.jit.script(model)

# TensorRT 변환
input_tensor = torch.randn((1, 3, 224, 224)).cuda()
trt_model = torch_tensorrt.ts.compile(
    scripted_model,
    inputs=[torch_tensorrt.Input(input_tensor.shape)]
)

# 변환된 모델로 추론
with torch.no_grad():
    output = trt_model(input_tensor)

print("TensorRT 변환 및 추론 성공:", output.shape)

Disable Nouveau

기존 우분투에서 지원하는 그래픽 드라이버를 제거합니다. Nvidia 그래픽 드라이버와 서로 충돌이 나면서 이후 문제가 생기는 것을 방지 합니다.

$ sudo vi  /etc/modprobe.d/nouveau-blacklist.conf 

/etc/modprobe.d/nouveau-blacklist.conf 에 아래의 내용을 넣습니다.

blacklist nouveau
blacklist lbm-nouveau
options nouveau modeset=0
alias nouveau off
alias lbm-nouveau off

이후 다음의 명령어로 부팅을 업데이트 해줍니다.

sudo update-initramfs -u

이후 reboot 시킵니다.

Test

Tensorflow

$ python3 -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"

Pytorch

import torch
x = torch.rand(5, 3)
print(x)
torch.cuda.is_available()