홈서버의 KVM 가상 머신에 RTX 3090을 PCIe 패스스루로 연결해 사용하고 있다. GPU는 유휴 상태에서는 멀쩡하게 인식됐지만, CUDA 연산을 시작하면 10초도 지나지 않아 사라졌다. 단순한 프로그램 오류가 아니었다. 운영체제가 더 이상 PCIe를 통해 GPU에 접근하지 못했고, 결국 가상 머신을 재부팅해야 했다.
이 글은 그 증상을 어떻게 발견했고, 어떤 로그를 근거로 전원 공급을 의심했으며, PSU를 500W에서 1000W로 교체한 뒤 어떻게 같은 문제의 해결 여부를 검증했는지 정리한 기록이다.
증상: GPU는 보이지만 부하를 견디지 못했다
부팅 직후에는 특별한 이상이 없었다. nvidia-smi는 RTX 3090을 정상적으로 표시했고, 유휴 상태의 온도와 소비전력도 평범했다. 문제는 PyTorch 학습이나 행렬 연산처럼 GPU 전력이 빠르게 올라가는 작업을 시작할 때 나타났다.
- GPU가 유휴 상태일 때는 정상적으로 인식됐다.
- CUDA 부하를 시작하면 10초 안에 연산이 중단됐다.
- 이후
nvidia-smi도 GPU에 정상적으로 접근하지 못했다. - GPU를 다시 사용하려면 가상 머신을 재부팅해야 했다.
처음에는 GPU 패스스루 설정이나 NVIDIA 드라이버를 의심하기 쉬운 형태였다. 하지만 정확한 오류를 알기 위해서는 애플리케이션의 예외보다 커널 로그를 먼저 확인할 필요가 있었다.
발견한 오류: Xid 79와 Xid 154
과거 커널 로그를 검색하자 동일한 메시지가 여러 부팅에 걸쳐 반복되어 있었다.
NVRM: Xid (PCI:0000:01:00): 79, name=python, GPU has fallen off the bus.
NVRM: GPU 0000:01:00.0: GPU has fallen off the bus.
NVRM: Xid (PCI:0000:01:00): 154, GPU recovery action changed ... Node Reboot Required
로그는 다음처럼 확인할 수 있다.
journalctl _TRANSPORT=kernel --no-pager \
| rg -i 'NVRM|Xid|fallen off|PCIe Bus Error|AER'
NVIDIA의 Xid 오류 문서에 따르면 Xid 79는 드라이버가 PCI Express 연결을 통해 GPU에 접근하려 했지만 GPU가 더 이상 접근 가능한 상태가 아닐 때 기록된다. PCIe 링크의 하드웨어 문제, GPU 하드웨어 문제, 드라이버 문제 등이 원인일 수 있다.
따라서 Xid 79만 보고 곧바로 PSU 문제라고 결론 내릴 수는 없다. 이 메시지는 GPU가 버스에서 사라졌다는 결과를 알려주지만, 왜 사라졌는지까지 하나로 특정하지는 않는다. Xid 154는 이 상황에서 GPU 또는 노드의 재시작이 필요하다는 복구 상태를 함께 보여줬다.
전원 공급을 의심한 이유
이 환경에서는 다음 후보를 생각할 수 있었다.
- KVM의 PCIe 패스스루 설정
- NVIDIA 드라이버
- PCIe 슬롯이나 GPU 자체의 하드웨어 문제
- GPU 부하 순간의 전원 공급 부족
전원 쪽에 무게를 둔 가장 큰 이유는 부하와 증상의 관계가 매우 일관적이었기 때문이다. 유휴 상태에서는 오래 유지되지만, 연산을 시작해 소비전력이 올라가면 10초 안에 거의 즉시 장치가 이탈했다. 같은 Xid 79가 2월부터 7월까지 여러 차례 반복됐고, 그중에는 Python GPU 작업 도중 발생한 기록도 있었다.
또한 기존 시스템에는 500W PSU가 설치되어 있었다. NVIDIA가 제시하는 RTX 3090 Founders Edition의 그래픽카드 전력은 350W이고 권장 시스템 전원은 750W다. 제조사와 전체 시스템 구성에 따라 필요한 용량은 달라질 수 있지만, 500W는 이 기준보다 명확히 낮았다.
PSU의 정격 출력이 곧 GPU에 그대로 공급되는 것도 아니다. CPU, 저장장치, 메인보드와 팬도 같은 전원 공급 장치를 사용한다. 평균 소비전력이 정격 이내로 보이더라도 GPU 부하 전환 시의 순간적인 전력 요구, 전원 케이블 구성, PSU의 상태가 안정성에 영향을 줄 수 있다.
해결: 500W에서 1000W로 교체
핵심 변경은 PSU를 500W 제품에서 1000W 제품으로 교체한 것이다. 1000W가 RTX 3090에 반드시 필요한 최소 용량이라는 뜻은 아니다. 이 시스템의 다른 부품까지 포함해 충분한 여유를 확보하고, 전원 부족 가능성을 명확하게 제거하기 위한 선택이었다.
교체만으로 해결됐다고 단정하지 않고, 과거에 10초 안에 실패하던 조건보다 훨씬 강한 부하를 걸어 확인했다.
검증 방법
검증 당시 환경은 다음과 같았다.
| 항목 | 값 |
|---|---|
| GPU | NVIDIA GeForce RTX 3090 24GB |
| 가상화 | KVM, PCIe GPU 패스스루 |
| NVIDIA 드라이버 | 580.173.02 |
| PyTorch | 2.9.0+cu128 |
| CUDA 런타임 | 12.8 |
FP16 형식의 행렬 곱셈을 반복해 GPU를 정격 전력 수준까지 올렸다. 동시에 nvidia-smi를 1초 간격으로 기록하고, 테스트 시작 이후 커널 로그에 Xid 또는 PCIe/AER 오류가 추가되는지 확인했다.
nvidia-smi \
--query-gpu=timestamp,pstate,temperature.gpu,power.draw,power.limit,utilization.gpu \
--format=csv,noheader,nounits \
--loop-ms=1000
먼저 1분짜리 스모크 테스트를 실행한 뒤, 같은 부하를 5분 동안 유지하는 테스트를 이어서 실행했다.
| 테스트 | 실행 시간 | GPU 사용률 | 소비전력 | 최고 온도 | 새 GPU/PCIe 오류 |
|---|---|---|---|---|---|
| 스모크 테스트 | 60.12초 | 최대 100% | 최대 350.99W | 77°C | 0건 |
| 지속 부하 테스트 | 300.20초 | 최대 100% | 평균 346.46W, 최대 350.62W | 82°C | 0건 |
5분 테스트에서는 302개의 모니터링 샘플 중 299개가 GPU 사용률 95% 이상이었다. 단순히 프로세스가 살아 있었던 것이 아니라, 대부분의 시간 동안 RTX 3090의 350W 전력 한계에 가까운 부하가 실제로 유지됐다. 두 CUDA 작업 모두 정상 종료했고, 테스트가 끝난 뒤에도 nvidia-smi는 GPU를 정상적으로 인식했다.
왜 해결됐다고 판단했는가
이전 구성에서는 GPU 부하를 시작한 뒤 10초도 버티지 못했다. PSU 교체 후에는 같은 종류의 CUDA 부하를 총 6분간 유지했고, 그중 5분 구간의 평균 소비전력이 346.46W였다. 그동안 Xid 79, GPU has fallen off the bus, PCIe Bus Error, AER 오류가 한 건도 새로 발생하지 않았다.
이 사례에서는 실패 조건이 짧고 반복 가능했기 때문에 전후 비교가 명확했다.
- 교체 전: GPU 부하 후 10초 이내에 반복적으로 장치 이탈
- 교체 후: 정격 350W 수준의 부하를 6분간 유지
- 검증 후: CUDA 정상 종료, GPU 정상 인식, 새 커널 오류 없음
따라서 이 시스템에서 반복되던 장치 이탈의 원인은 부족한 전원 공급이었고, PSU 교체로 해결됐다고 판단했다.
Xid 79가 나오면 확인할 것
이 사례의 원인은 PSU였지만 Xid 79의 원인이 항상 같지는 않다. NVIDIA 문서도 PCIe 링크, GPU 하드웨어, 드라이버 등 여러 가능성을 제시한다. 다음 순서로 자신의 환경에서 증거를 모으는 편이 안전하다.
- 커널 로그에서 정확한 Xid 번호와 발생 시각을 확인한다.
- 유휴 상태, GPU 부하 시작, 장시간 실행 중 어느 시점에 발생하는지 기록한다.
- GPU와 전체 시스템의 권장 전원, PSU 정격, 전원 케이블 구성을 확인한다.
- PCIe 슬롯과 보조전원 케이블의 체결 상태를 점검한다.
- 한 번에 하나의 변수만 바꾼 뒤 같은 작업으로 재현 여부를 확인한다.
- 테스트 중 전력, 온도, GPU 사용률과 커널 로그를 함께 기록한다.
특히 “오류가 사라졌다”는 느낌보다, 이전에 빠르게 실패하던 작업이 얼마나 오래 어떤 전력으로 실행됐는지를 수치로 남기는 것이 중요하다. 그래야 부품 교체가 실제 원인을 해결했는지, 우연히 증상이 나타나지 않은 것인지 구분할 수 있다.
이번 경우에는 500W에서 1000W로의 PSU 교체가 그 차이를 만들었다.