Cloudera AI 1.5.5 SP3 의 Hugging Face 서빙 이미지(kserve_huggingfaceserver:1.11.0-h3000)는 torch 2.11 + CUDA 13.0 기반이다. GPU 노드 드라이버가 575.57.08(CUDA 12.9) 이면 vLLM 이 GPU 를 초기화하지 못해 kserve-container 가 CrashLoopBackOff 로 죽는다.
RuntimeError: Unexpected error from cudaGetDeviceCount().
Error 803: system has unsupported display driver / cuda driver combination
모델·태그·아키텍처 문제로 보이기 쉽지만 GPU 자체를 못 쓰는 상태다. 이 문서는 ECS(RKE2) 워커에서 드라이버를 580.x(CUDA 13.0) 로 올린 절차와 그 뒤 남은 문제를 기록한 것이다.
nvidia-smi | head -3 # Driver Version / CUDA Version
IMG=<registry>/cloudera/cloudera/cml-serving/kserve_huggingfaceserver:1.11.0-h3000-b66
podman run --rm --entrypoint cat $IMG /usr/local/cuda/version.json # 컨테이너가 요구하는 CUDA
podman run --rm --entrypoint python3 $IMG -c "import torch; print(torch.__version__)" # 2.11.0+cu130
kubectl logs -n serving-default <predictor-pod> -c kserve-container --previous | grep -i "Error 803"
호스트 드라이버가 지원하는 CUDA(nvidia-smi 우측 상단) 가 컨테이너의 CUDA 보다 낮으면 803 이다. Cloudera 문서는 ML Runtime 기준 550.x 검증만 적어 두어 서빙 이미지의 요구 버전과 어긋난다.
# 0. 파일 준비 — 롤백용으로 기존 버전 .run 도 같이 둔다
ls -lh NVIDIA-Linux-x86_64-580.173.02.run NVIDIA-Linux-x86_64-575.57.08.run
nvidia-smi > /root/nvidia-before.txt; rpm -qa | grep -i nvidia > /root/nvidia-rpms-before.txt
# 1. 노드 cordon (drain 은 다른 노드에 용량이 없으면 Pending 만 만든다)
kubectl cordon <gpu-node>
# 2. GPU 를 잡은 것들을 내린다 — ECS 에이전트를 멈추지 않으면 모듈이 사용 중이라 실패한다
systemctl stop rke2-agent
lsof /dev/nvidia* ; systemctl stop nvidia-persistenced nvidia-fabricmanager 2>/dev/null
rmmod nvidia_uvm nvidia_drm nvidia_modeset nvidia ; lsmod | grep nvidia # 비어야 한다
# 3. 설치 (dkms 미설치 환경이면 --dkms 를 빼고, 기존 575 도 같은 방식이었는지 확인)
chmod +x NVIDIA-Linux-x86_64-580.173.02.run
./NVIDIA-Linux-x86_64-580.173.02.run --silent ; echo "exit=$?"
grep -iE "error|failed" /var/log/nvidia-installer.log | tail
nvidia-smi | head -3 # 580.173.02 / CUDA 13.0
# 4. 재부팅 후 ECS 가 복귀하면 uncordon
reboot
kubectl uncordon <gpu-node>
kubectl get nodes -o custom-columns=NAME:.metadata.name,GPU:.status.allocatable.'nvidia\.com/gpu'
watch -n 30 'kubectl get pods -A | grep -v Running | grep -v Completed | head'
Vulkan ICD loader 경고는 서버에 그래픽 스택이 없어서 나는 것으로 무시한다. 롤백은 이전 .run --silent 후 재부팅이다.
kubectl run cudatest --rm -it --restart=Never --image=$IMG \
--overrides='{"spec":{"nodeSelector":{"kubernetes.io/hostname":"<gpu-node>"},"containers":[{"name":"c","image":"'$IMG'","command":["python3","-c","import torch;print(torch.cuda.is_available(),torch.cuda.device_count())"],"resources":{"limits":{"nvidia.com/gpu":1}}}]}}'
systemctl status nvidia-cdi-refresh.service # CDI 스펙 갱신
grep -A3 nvidia-uvm /var/run/cdi/nvidia.yaml
드라이버를 580 으로 올린 뒤 803 은 사라졌으나 같은 서빙 이미지에서 RuntimeError: No CUDA GPUs are available 로 바뀌었다. 파드 안 nvidia-smi 는 정상이고 nvidia.com/gpu 도 allocatable 인데 CUDA 초기화만 실패했다. podman 으로 --device nvidia.com/gpu=all 을 주면 되고 /dev/nvidia-caps 를 빼면 실패하는 것으로 보아 CDI 로 넘겨지는 디바이스 목록 차이가 의심됐지만 확정하지 못했고, Cloudera 에는 SP3 서빙이 요구하는 드라이버 버전, containerd/device plugin 추가 설정 여부, RHEL 8.6 에서 R580 지원 여부를 문의한 상태로 끝났다. 폐쇄망 반입 후 NIM 모델은 정상 서빙됐다.
.run 을 돌리면 모듈 빌드에서 실패한다. rpm -q kernel-devel-$(uname -r) gcc make 로 확인한다.