Nvidia Driver on Ubuntu
- Prerequisite
- Uninstalling Nvidia Driver
- Checking Current Nvidia Driver
- Checking Supported CUDA Version
- Installing Nvidia Driver
- Installing CUDA Toolkit 11.8
- Install CuDNN
- Install Pytorch TensorRT
- Disable Nouveau
- Test
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()