콘텐츠로 이동

GPU가 CPU로 떨어질 때

GPU 실행이 CPU로 떨어질 때

GPU를 쓰도록 설정했는데 실제로는 CPU로 도는 것 같나요? 바른의 ONNX 추론은 실행 프로바이더(EP) 초기화에 실패하면 자동으로 CPU로 폴백합니다. 덕분에 서버는 멈추지 않지만, 기대한 GPU 가속은 못 받게 돼요. 이 문서로 원인을 찾아봐요.

증상

  • executionProvidergpu로 설정했는데 추론 속도가 CPU와 비슷합니다.
  • GPU 사용률이 거의 0입니다.
  • 기동 로그에 실행 프로바이더 초기화 경고가 보이고, 그 뒤로도 서버는 정상 동작합니다.

원인

바른은 ONNX 런타임에서 GPU 계열 실행 프로바이더(예: CUDA, CoreML)를 먼저 시도하고, 초기화에 실패하면 자동으로 CPU로 폴백합니다. 서버가 죽지 않으니 알아차리기 어려운데, 원인은 보통 환경 쪽에 있어요.

원인 설명
드라이버/런타임 부재 GPU 드라이버나 CUDA/cuDNN 등 의존 런타임이 없음
버전 불일치 드라이버·런타임·ONNX 런타임 버전이 서로 안 맞음
설정값 오류 executionProvidercpu로 둔 상태
라이브러리 누락 GPU용 ONNX 런타임 라이브러리가 libPath에 없음

해결

  1. 설정값부터 확인하세요. bareun.jsonexecutionProvidergpu인지 보세요. cpu로 되어 있으면 당연히 CPU로 돕니다.

    {
      "executionProvider": "gpu"
    }
    
  2. 기동 로그를 확인하세요. GPU EP 초기화에 실패하면 폴백 직전에 경고가 남습니다. 어떤 프로바이더가 왜 실패했는지가 원인 진단의 핵심이에요.

  3. 드라이버·런타임을 점검하세요. CUDA 환경이라면 GPU 드라이버, CUDA, cuDNN이 모두 설치돼 있고 서로 호환되는지 확인합니다. 자세한 매칭은 CUDA/cuDNN 버전 불일치 문서를 보세요.

  4. GPU용 라이브러리가 있는지 보세요. libPath 아래에 GPU용 ONNX 런타임 라이브러리가 포함된 패키지를 설치했는지 확인하세요. CPU 전용 패키지로는 GPU 가속을 받을 수 없습니다.

CPU 폴백은 기능이지 버그가 아니에요

EP 초기화 실패 시 CPU로 떨어지는 동작은 의도된 안전장치입니다. 서버가 멈추지 않고 일단 동작하도록 설계됐어요. 다만 가속이 필요한데 폴백됐다면, 로그를 근거로 환경을 바로잡아야 합니다.

예방·팁

  • 운영 투입 전 GPU 환경에서 한 번 기동해 로그에 폴백 경고가 없는지 확인하세요.
  • GPU가 필요 없는 환경이라면 executionProvidercpu로 명시해 혼란을 줄이는 것도 방법입니다.

자주 묻는 질문

Q. GPU로 설정했는데 왜 CPU로 도나요?

GPU 실행 프로바이더 초기화에 실패하면 바른이 자동으로 CPU로 폴백하기 때문입니다. 드라이버나 CUDA/cuDNN 부재, 버전 불일치, GPU용 라이브러리 누락이 흔한 원인이며, 기동 로그의 폴백 경고로 이유를 확인할 수 있습니다.

Q. CPU 폴백 여부는 어떻게 확인하나요?

서버 기동 로그를 보세요. GPU EP 초기화 실패 시 경고가 남고 그 뒤 CPU로 전환됩니다. GPU 사용률이 거의 0이라면 폴백됐을 가능성이 큽니다.

Q. GPU인데 CPU로 동작해요. 무엇부터 고쳐야 하나요?

bareun.jsonexecutionProvidergpu인지부터 확인하고, 기동 로그에서 어떤 실행 프로바이더가 왜 실패했는지 보세요. GPU 드라이버·CUDA·cuDNN이 호환되는지, libPath에 GPU용 ONNX 런타임 라이브러리가 들어 있는지 점검하면 됩니다. CPU 전용 패키지로는 GPU 가속을 받을 수 없어요.

Q. CPU로 폴백돼도 결과는 같나요?

네. 실행 프로바이더가 달라질 뿐 형태소 분석 결과 자체는 동일합니다. 차이는 속도뿐이라, 가속이 필요 없는 환경이라면 폴백 상태로 그대로 운영해도 됩니다. 다만 가속이 필요한데 폴백됐다면 로그를 근거로 GPU 환경을 바로잡으세요.

도움이 되었나요?