반응형
문제 개요
onnx 파일로 저장된 모델을 사용하기 위하여 onnxruntime 모듈을 활용할 때,
아래 코드와 같이 CUDA GPU를 사용하도록 지정하였음에도
GPU 인식이 안되어 강제로 CPU만 사용되는 경우가 나타날 수 있습니다.
import onnxruntime
onnx_session = onnxruntime.InferenceSession("model.onnx", providers=['CUDAExecutionProvider'])
이런 경우에는 GPU 사용이 불가능한 경우를 안내하기 위하여
다음과 같은 warning 메시지가 출력되기도 합니다.
UserWarning: Specified provider 'CUDAExecutionProvider' is not in available provider names.Available providers: 'CPUExecutionProvider'
사용 중인 디바이스 종류를 직접 출력해보면 CPU로 등장하고,
inference 과정도 CPU로만 진행되게 됩니다.
print(onnxruntime.get_device()) # CPU
해결법 1: 일반 onnxruntime가 아닌 onnxruntime-gpu 설치
onnxruntime 모듈은 CPU 전용 / GPU 전용 모듈이 나누어져 있습니다.
!pip install onnxruntime 명령어로 설치되었던 모듈은 CPU 전용 모듈로,
이런 경우라면 !pip install onnxruntime-gpu 명령어로 모듈을 재설치하면
해결이 가능할 수도 있습니다.
반응형
해결법 2: CUDA / cuDNN / onnxruntime 간의 버전 맞추기
GPU 전용 모듈을 설치했음에도 문제가 지속된다면
CUDA, cuDNN 및 onnxruntime 간의 버전 alignment가 맞지 않아서
발생하는 문제일 수도 있습니다.
아래의 공식 사이트에서는 호환되는 CUDA-cuDNN-onnxruntime 버전의 조합을
알려주고 있습니다.
설치된 CUDA 및 cuDNN 버전과 호환되지 않는 onnxruntime 버전이 설치되어 있다면
호환되는 onnxruntime 버전의 모듈로 재설치를 진행해주면 되고,
CUDA에 알맞은 cuDNN 버전이 설치되지 않은 경우라면
NVIDIA 공식 홈페이지에서 해당하는 버전의 cuDNN을 설치해주시면 해결될 수 있습니다.