GPU&NVIDIA

NVIDIA Driver & CUDA Toolkit 설치 (RHEL 8.4)

Beengineer's Tech Notes 2025. 9. 19. 00:43

환경 정보 & 사전 준비사항

  • 환경정보
  • 사전 준비사항
    • `rhel-8.4-x86_64-dvd.iso` 활용 로컬 레포지터리 구성 완료
    • OS 설치 시 `Standard`, `Development Tools`, `wget`, `curl` 패키지 설치
      • 또는 `dnf groupinstall -y "Development Tools"` 수행

 

0. (필요 시) 초기화 작업

(필요 시) NVIDIA 드라이버 & CUDA 삭제

- 문서 절차 수행 이전, NVIDIA 공식 문서에 따라 NVIDIA 드라이버 설치를 진행한 이력이 있으면 충돌이 발생할 수 있습니다.
- 다음의 과정을 통해서 NVIDIA 드라이버, CUDA 등을 전부 삭제합니다.

> sudo systemctl stop nvidia-persistenced
> sudo dnf remove -y "*nvidia*"
> sudo dnf remove -y "*cuda*"
> sudo dnf autoremove
> sudo dnf autoclean

(필요 시) DKMS 모듈 정리
> dkms status # 버전 확인
> sudo dkms remove -m nvidia -v --all

캐시 정리
> sudo dnf clean all
> sudo rm -rf /var/cache/dnf
> sudo rm -rf /var/lib/dkms/nvidia

repo 파일 삭제
> sudo rm -f /etc/yum.repos.d/nvidia-driver-local-*.repo
> sudo rm -f /etc/yum.repos.d/cuda-*.repo

로컬 repo 디렉터리 삭제
> sudo rm -rf /var/nvidia-driver-local-repo-*
> sudo rm -rf /var/cuda-repo-*

레포지토리/키 파일 삭제
> sudo rm -f /usr/share/keyrings/cuda-*-keyring.gpg
> sudo rm -f /usr/share/keyrings/nvidia-driver-local-*-keyring.gpg

설정 파일 및 라이브러리 삭제
> sudo rm -rf /usr/local/cuda*
> sudo rm -rf /usr/lib64/nvidia
> sudo rm -rf /usr/share/nvidia

 

(필요 시) DKMS 모듈 정리

 

> dkms status # 버전 확인
> sudo dkms remove -m nvidia -v --all

캐시 정리

> sudo dnf clean all
> sudo rm -rf /var/cache/dnf
> sudo rm -rf /var/lib/dkms/nvidia

repo 파일 삭제

> sudo rm -f /etc/yum.repos.d/nvidia-driver-local-*.repo
> sudo rm -f /etc/yum.repos.d/cuda-*.repo

로컬 repo 디렉터리 삭제

> sudo rm -rf /var/nvidia-driver-local-repo-*
> sudo rm -rf /var/cuda-repo-*

레포지토리/키 파일 삭제

> sudo rm -f /usr/share/keyrings/cuda-*-keyring.gpg
> sudo rm -f /usr/share/keyrings/nvidia-driver-local-*-keyring.gpg

설정 파일 및 라이브러리 삭제

> sudo rm -rf /usr/local/cuda*
> sudo rm -rf /usr/lib64/nvidia
> sudo rm -rf /usr/share/nvidia
```

- `initramfs` 갱신(재생성)
- 커널 모듈이 삭제/추가됐을 때, 새로운 스토리지/드라이버 지원이 필요할 때, 불필요한 흔적(구버전 드라이버 등)을 제거할 때 `initramfs`를 갱신해야 합니다.
- 따라서, 커널 모듈 흔적이 남아있지 않도록 initramfs를 갱신합니다.
```bash
> sudo dracut --force
```

- 재부팅
```bash
> sudo reboot
```

(필요 시) NVIDIA Repo 모듈 충돌 방지

- Local Repo를 통한 설치 과정에서는 Module 방식이 아닌, 일반 패키지 설치 방식을 사용해야 합니다.
- 문서 절차 수행 이전, NVIDIA 공식 문서에 따라 NVIDIA 드라이버 설치를 진행한 이력이 있다면 설치 간 Repo 충돌 방지를 위해 다음의 과정을 수행합니다.

```bash
sudo dnf module reset nvidia-driver -y
```
- 지정한 모듈 스트림(Module Stream)에 대해 현재 선택돼 있는 기본(Default) 또는 활성화된(Enabled) 스트림(Stream) 설정을 초기화합니다.
- 즉, 모듈이 지정한 '스트림(버전과 유사)'이나 '프로필(Profile)'을 초기화하고, 아무것도 선택되지 않은 상태로 되돌립니다.

  • 재부팅
    ```bash
    > sudo reboot
    ```

1. `dkms` 및 빌드 툴 설치

- NVIDIA 드라이버는 DKMS 방식으로 커널 모듈을 빌드해야 합니다.
- 서브스크립션 구독이 안돼있는 상태로, RHEL 순정 Repo는 사용 못하니 EPEL(Extra Packages for Enterprise Linux) Repo를 수동 등록해야 합니다.

```bash

EPEL Repo rpm 다운로드 (RHLE 8.4 호환)

curl -O https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

EPEL Repo 설치

sudo rpm -ivh epel-release-latest-8.noarch.rpm

dkms 및 툴 설치

sudo dnf install -y dkms gcc make elfutils-libelf-devel kernel-devel-$(uname -r) kernel-headers-$(uname -r)
```

2. NVIDIA 드라이버 설치

- 로컬 repo 설치
- [Data Center Driver for Linux RHEL 8 550.163.01 | Linux 64-bit RHEL 8](https://www.nvidia.com/en-us/drivers/details/244442/)
```bash
> sudo wget https://kr.download.nvidia.com/tesla/550.163.01/nvidia-driver-local-repo-rhel8-550.163.01-1.0-1.x86_64.rpm
> sudo rpm -i nvidia-driver-local-repo-rhel8-550.163.01-1.0-1.x86_64.rpm
> sudo dnf clean all
```

- 로컬 repo 기반으로 드라이버를 설치합니다.
```bash
> sudo dnf install -y nvidia-driver nvidia-driver-libs nvidia-modprobe nvidia-persistenced
```

```bash
> sudo reboot
```

2-1. 설치 확인

- 모듈 빌드 상태 확인
```bash
> dkms status
```

2-2. GPU 인식 확인

```bash
> nvidia-smi
```

4. CUDA-Toolkit 설치

- NVIDIA Developer 공식 홈에서 원하는 드라이버를 검색 후, 가이드에 따라 설치합니다. 여기서는 [CUDA Toolkit 12.4.1](https://developer.nvidia.com/cuda-12-4-1-download-archive?target_os=Linux&target_arch=x86_64&Distribution=RHEL&target_version=8&target_type=rpm_local) 을 설치하겠습니다.
```bash
> wget https://developer.download.nvidia.com/compute/cuda/12.4.1/local_installers/cuda-repo-rhel8-12-4-local-12.4.1_550.54.15-1.x86_64.rpm
> sudo rpm -i cuda-repo-rhel8-12-4-local-12.4.1_550.54.15-1.x86_64.rpm
> sudo dnf clean all
> sudo dnf -y install cuda-toolkit-12-4
```

5. GPU-Burn Test

5-1. `nvcc` 설치 여부 확인

- CUDA Toolkit 안에 `nvcc`가 있는지 확인합니다.
```bash
> ls -l /usr/local/cuda-12.4/bin/nvcc
```

5-2. `$PATH`에 CUDA 추가

```bash

임시 적용

> export PATH=$PATH:/usr/local/cuda-12.4/bin
> export LD_LIBRARY_PATH=/usr/local/cuda-12.4/lib64:$LD_LIBRARY_PATH

영구 적용

> echo 'export PATH=$PATH:/usr/local/cuda-12.4/bin' >> ~/.bashrc
> echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.4/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc

바로 적용

> source ~/.bashrc
```

5-3. `nvcc` 정상 동작 확인

```bash
> nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2024 NVIDIA Corporation
Built on Thu_Mar_28_02:18:24_PDT_2024
Cuda compilation tools, release 12.4, V12.4.131
Build cuda_12.4.r12.4/compiler.34097967_0
```

5-4. gpu-burn 빌드 & 실행

- 레포지토리 클론
```bash
> git clone https://github.com/wilicc/gpu-burn.git
> cd gpu-burn
```

- 빌드
- `gpu-burn` 실행 파일이 생성됩니다.
```bash
> make
```

- 실행(5분 테스트)
```bash
> ./gpu_burn 300
```

- 특정 GPU만 테스트 필요 시
```bash
CUDA_VISIBLE_DEVICES=0 ./gpu_burn 120
```

5-5. 모니터링

- `gpu-burn`을 돌린 상태에서, 다른 터미널에서 확인합니다.
- GPU 온도, 전력, 메모리 사용량 체크
```bash
watch -n 1 nvidia-smi
```