GPU가 CPU로 떨어질 때
GPU 실행이 CPU로 떨어질 때
GPU를 쓰도록 설정했는데 실제로는 CPU로 도는 것 같나요? 바른의 ONNX 추론은 실행
프로바이더(EP) 초기화에 실패하면 자동으로 CPU로 폴백합니다. 덕분에 서버는 멈추지 않지만,
기대한 GPU 가속은 못 받게 돼요. 이 문서로 원인을 찾아봐요.
증상
executionProvider를gpu로 설정했는데 추론 속도가 CPU와 비슷합니다.- GPU 사용률이 거의 0입니다.
- 기동 로그에 실행 프로바이더 초기화 경고가 보이고, 그 뒤로도 서버는 정상 동작합니다.
원인
바른은 ONNX 런타임에서 GPU 계열 실행 프로바이더(예: CUDA, CoreML)를 먼저 시도하고,
초기화에 실패하면 자동으로 CPU로 폴백합니다. 서버가 죽지 않으니 알아차리기 어려운데,
원인은 보통 환경 쪽에 있어요.
| 원인 | 설명 |
|---|---|
| 드라이버/런타임 부재 | GPU 드라이버나 CUDA/cuDNN 등 의존 런타임이 없음 |
| 버전 불일치 | 드라이버·런타임·ONNX 런타임 버전이 서로 안 맞음 |
| 설정값 오류 | executionProvider를 cpu로 둔 상태 |
| 라이브러리 누락 | GPU용 ONNX 런타임 라이브러리가 libPath에 없음 |
해결
-
설정값부터 확인하세요.
bareun.json의executionProvider가gpu인지 보세요.cpu로 되어 있으면 당연히 CPU로 돕니다. -
기동 로그를 확인하세요. GPU EP 초기화에 실패하면 폴백 직전에 경고가 남습니다. 어떤 프로바이더가 왜 실패했는지가 원인 진단의 핵심이에요.
-
드라이버·런타임을 점검하세요. CUDA 환경이라면 GPU 드라이버, CUDA, cuDNN이 모두 설치돼 있고 서로 호환되는지 확인합니다. 자세한 매칭은 CUDA/cuDNN 버전 불일치 문서를 보세요.
-
GPU용 라이브러리가 있는지 보세요.
libPath아래에 GPU용 ONNX 런타임 라이브러리가 포함된 패키지를 설치했는지 확인하세요. CPU 전용 패키지로는 GPU 가속을 받을 수 없습니다.
CPU 폴백은 기능이지 버그가 아니에요
EP 초기화 실패 시 CPU로 떨어지는 동작은 의도된 안전장치입니다. 서버가 멈추지 않고 일단 동작하도록 설계됐어요. 다만 가속이 필요한데 폴백됐다면, 로그를 근거로 환경을 바로잡아야 합니다.
예방·팁
- 운영 투입 전 GPU 환경에서 한 번 기동해 로그에 폴백 경고가 없는지 확인하세요.
- GPU가 필요 없는 환경이라면
executionProvider를cpu로 명시해 혼란을 줄이는 것도 방법입니다.
자주 묻는 질문
Q. GPU로 설정했는데 왜 CPU로 도나요?
GPU 실행 프로바이더 초기화에 실패하면 바른이 자동으로 CPU로 폴백하기 때문입니다. 드라이버나
CUDA/cuDNN 부재, 버전 불일치, GPU용 라이브러리 누락이 흔한 원인이며, 기동 로그의 폴백 경고로
이유를 확인할 수 있습니다.
Q. CPU 폴백 여부는 어떻게 확인하나요?
서버 기동 로그를 보세요. GPU EP 초기화 실패 시 경고가 남고 그 뒤 CPU로 전환됩니다. GPU 사용률이 거의 0이라면 폴백됐을 가능성이 큽니다.
Q. GPU인데 CPU로 동작해요. 무엇부터 고쳐야 하나요?
bareun.json의 executionProvider가 gpu인지부터 확인하고, 기동 로그에서 어떤 실행 프로바이더가
왜 실패했는지 보세요. GPU 드라이버·CUDA·cuDNN이 호환되는지, libPath에 GPU용 ONNX 런타임
라이브러리가 들어 있는지 점검하면 됩니다. CPU 전용 패키지로는 GPU 가속을 받을 수 없어요.
Q. CPU로 폴백돼도 결과는 같나요?
네. 실행 프로바이더가 달라질 뿐 형태소 분석 결과 자체는 동일합니다. 차이는 속도뿐이라, 가속이 필요 없는 환경이라면 폴백 상태로 그대로 운영해도 됩니다. 다만 가속이 필요한데 폴백됐다면 로그를 근거로 GPU 환경을 바로잡으세요.
도움이 되었나요?