CUDA/cuDNN 버전 불일치
CUDA/cuDNN 버전 불일치 진단·해결
GPU 가속을 켰는데 추론이 CPU로 떨어지거나 초기화에서 실패하나요? GPU 환경에서 가장 흔한 원인은 드라이버·CUDA·cuDNN·ONNX 런타임 사이의 버전 불일치입니다. 이 문서로 짚어봐요.
증상
executionProvider를gpu로 설정했는데 GPU 실행 프로바이더 초기화에서 실패합니다.- 서버는 CPU로 폴백해 동작하지만 GPU 가속을 받지 못합니다.
- 기동 로그에 CUDA/cuDNN 관련 라이브러리 로드 오류가 보입니다.
원인
바른의 GPU 추론은 ONNX 런타임의 GPU 실행 프로바이더 위에서 동작합니다. 이 스택은 아래
층들이 서로 호환돼야 합니다.
graph TD
DRV[GPU 드라이버] --> CUDA[CUDA 런타임];
CUDA --> CUDNN[cuDNN];
CUDNN --> ORT[ONNX 런타임 GPU EP];
ORT --> BAREUN[바른 추론];
한 층이라도 버전이 어긋나면 GPU EP 초기화에 실패하고, GPU 실행이 CPU로 떨어질 때에서 설명한 대로 CPU 폴백이 일어납니다.
| 원인 | 설명 |
|---|---|
| 드라이버 구버전 | GPU 드라이버가 요구 CUDA를 지원하지 않음 |
| CUDA/cuDNN 불일치 | CUDA와 cuDNN 버전 조합이 맞지 않음 |
| ORT 빌드 불일치 | 설치한 ONNX 런타임이 기대하는 CUDA/cuDNN과 다름 |
해결
-
로그에서 어느 라이브러리가 실패했는지 확인하세요. CUDA 런타임인지 cuDNN인지에 따라 고칠 지점이 달라집니다. 폴백 직전의 경고가 단서입니다.
-
드라이버 → CUDA → cuDNN → ONNX 런타임 순으로 호환을 맞추세요. 위 그림의 위에서 아래 순서로 점검합니다. 드라이버가 너무 낮으면 상위 층이 모두 깨지므로 드라이버부터 보세요.
-
CPU로 정상 동작을 먼저 확인하세요.
executionProvider를cpu로 바꿔 서버가 정상 기동하면, 문제는 GPU 스택에 한정된 것입니다. 원인을 좁히는 데 도움이 돼요. -
호환을 맞춘 뒤 다시
gpu로 전환하고 로그를 확인하세요. 폴백 경고가 사라지고 GPU 사용률이 올라가면 해결된 것입니다.
버전은 '최신'이 아니라 '호환'이 중요해요
무조건 최신으로 올린다고 해결되지 않습니다. 드라이버·CUDA·cuDNN·ONNX 런타임은 서로 검증된 조합으로 맞춰야 합니다. 한 층만 임의로 올리면 오히려 깨질 수 있어요.
예방·팁
- GPU 노드를 새로 구성할 때 스택 버전을 문서로 고정해두면, 다음 배포에서 같은 조합을 재현하기 쉽습니다.
- GPU가 꼭 필요하지 않은 워크로드라면
cpu로 운영하는 편이 트러블슈팅 부담이 적습니다.
자주 묻는 질문
Q. CUDA/cuDNN 버전이 안 맞으면 어떻게 되나요?
GPU 실행 프로바이더 초기화에 실패하고, 바른은 CPU로 자동 폴백합니다. 서버는 동작하지만 GPU
가속을 받지 못하며, 기동 로그에 라이브러리 로드 오류가 남습니다.
Q. 어디부터 점검해야 하나요?
GPU 드라이버 → CUDA → cuDNN → ONNX 런타임 순으로 위에서 아래로 점검하세요. 드라이버가 낮으면 상위 층이 모두 깨지므로 드라이버를 먼저 확인하고, CPU 실행으로 문제 범위를 GPU 스택에 한정하면 진단이 쉬워집니다.
Q. 최신 버전으로 올리면 해결되나요?
꼭 그렇지는 않아요. 버전은 '최신'이 아니라 '호환'이 중요합니다. 드라이버·CUDA·cuDNN·ONNX 런타임은 서로 검증된 조합으로 맞춰야 하며, 한 층만 임의로 올리면 오히려 GPU 실행 프로바이더 초기화가 깨질 수 있습니다.
Q. CUDA 오류 로그에서 무엇을 봐야 하나요?
폴백 직전의 경고에서 어떤 라이브러리가 실패했는지 보세요. CUDA 런타임인지 cuDNN인지에 따라 고칠 지점이 달라집니다. 그 단서를 기준으로 드라이버부터 ONNX 런타임까지 호환을 맞추면 됩니다.
도움이 되었나요?