RHEL 8.x 서버(특히 Cloudera AI 워커로 붙일 H100 노드)에 NVIDIA 드라이버를 올리는 두 가지 방법과, 드라이버 · CUDA Toolkit · Container Toolkit 의 관계, GPU 를 개별 제어하는 명령을 정리한다. 컨테이너로 GPU 를 쓰는 서버에는 드라이버 + nvidia-container-toolkit 만 있으면 되고 호스트에 CUDA Toolkit(nvcc) 을 설치할 필요가 없다.
| 구성요소 | 역할 |
|---|---|
| NVIDIA GPU Driver | 커널 모듈 + libcuda. GPU 인식 |
| nvidia-fabric-manager | NVSwitch 통신. SXM5 폼팩터 필수, PCIe 는 불필요 |
| nvidia-container-toolkit | Docker/Podman/containerd 가 GPU 를 컨테이너에 넘기게 함 |
| CUDA Toolkit | nvcc 등 빌드 도구. 컨테이너 환경에서는 이미지 안에 들어 있음 |
nvidia-smi 우측 상단의 CUDA Version 은 "이 드라이버로 실행 가능한 최대 CUDA" 이지 Toolkit 이 설치됐다는 뜻이 아니다. 컨테이너가 요구하는 CUDA ≤ 이 값이면 동작한다.
lspci | grep -i nvidia # 2330 rev a1 = H100 SXM5 80GB
uname -r ; cat /etc/redhat-release
rpm -q kernel-devel-$(uname -r) kernel-headers-$(uname -r) gcc make
subscription-manager status # 저장소 방식이면 등록 필요
kernel-devel 이 현재 커널과 다르면 모듈 빌드가 실패한다. 없으면 커널을 업데이트하고 재부팅한 뒤 맞춘다.
cat <<'EOF' | sudo tee /etc/modprobe.d/blacklist-nouveau.conf
blacklist nouveau
options nouveau modeset=0
EOF
sudo dracut --force
sudo grubby --update-kernel=ALL --args="rd.driver.blacklist=nouveau nouveau.modeset=0"
sudo systemctl set-default multi-user.target
sudo reboot
sudo dnf install -y gcc kernel-devel-$(uname -r) kernel-headers-$(uname -r) dkms make # dkms 는 EPEL
sudo dnf config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo
sudo dnf clean all
dnf module list nvidia-driver # 커널과 호환되는 스트림 확인
sudo dnf module install -y nvidia-driver:<스트림>-dkms
# SXM5 (NVSwitch) 이면 드라이버와 같은 버전의 Fabric Manager
sudo dnf install -y nvidia-fabric-manager
sudo systemctl enable --now nvidia-fabricmanager
sudo reboot
nvidia-smi ; nvidia-smi topo -m ; systemctl status nvidia-fabricmanager
.run 파일 (최신 버전이 꼭 필요하거나 폐쇄망일 때)sudo dnf install -y gcc make kernel-devel-$(uname -r) kernel-headers-$(uname -r) \
elfutils-libelf-devel libglvnd-devel pkgconfig
chmod +x NVIDIA-Linux-x86_64-<버전>.run
sudo ./NVIDIA-Linux-x86_64-<버전>.run --silent # DKMS 가 있으면 --dkms 추가
tail -20 /var/log/nvidia-installer.log
nvidia-smi
gcc 버전 불일치 경고는 --no-cc-version-check, 제거는 nvidia-uninstall. DKMS 없이 설치했다면 dnf update 로 커널이 바뀌는 순간 GPU 가 죽으므로 /etc/dnf/dnf.conf 에 exclude=kernel* 를 두거나 업데이트 후 .run 을 재실행한다. Secure Boot 가 켜져 있으면 모듈 로드가 막히니 UEFI 에서 끄거나 MOK 서명이 필요하다.
rpm -qa | grep -i nvidia-container # nvidia-container-toolkit 와 libnvidia-container1 버전 일치 확인
nvidia-ctk --version
sudo nvidia-ctk runtime configure --runtime=docker && sudo systemctl restart docker
docker run --rm --gpus all nvidia/cuda:12.4.1-base-ubuntu22.04 nvidia-smi
Cloudera ECS 에서는 드라이버와 toolkit 이 정상이면 device plugin 이 GPU 를 자동으로 노출한다.
nvidia-smi -L ; nvidia-smi --query-gpu=index,name,uuid --format=csv
CUDA_VISIBLE_DEVICES=1,3 python train.py # 인덱스는 재부팅 시 바뀔 수 있어 UUID 지정이 안전
sudo nvidia-smi -i 0 -pl 250 # 전력 제한
sudo nvidia-smi -i 0 -pm 1 # persistence mode
sudo nvidia-smi -i 0 -c EXCLUSIVE_PROCESS # compute mode
nvidia-smi -i 0 --query-gpu=utilization.gpu,memory.used,temperature.gpu --format=csv -l 1
Docker 에서는 --gpus '"device=0,1"' 또는 MIG UUID 로 지정한다. 물리 GPU 를 더 잘게 나누려면 NVIDIA MIG 설정·영속화·해제를 본다.
.run(NVIDIA-Linux-x86_64-*.run) 과 CUDA Toolkit .run(cuda_*_linux.run) 은 별개다. Toolkit runfile 로 설치할 때는 Driver 항목을 체크 해제해야 이미 설치한 드라이버와 충돌하지 않는다.