ONNX 모델 변환 완료한 뒤, python이든 c#이든 inference할 때 CPU로 도는 현상이 있다.
nvidia-smi 찍어보면 메모리 사용량 뿐만 아니라 사용률 또한 0%로 계속 찍힌다.
이유는 onnxruntime과 CUDA, cuDNN 버전이 안맞아서다. 높은 확률로 현재 CUDA12 사용할 때일 것.
https://onnxruntime.ai/docs/install/
홈페이지 안내사항을 읽어보면 코딱지만하게 기본 CUDA 설정이 11.X라고 적혀있다.
즉, 설치된 onnxruntime-gpu는 CUDA 11.X 버전 하에 빌드된 녀석이라 만약 사용 환경이 CUDA 12.X면 제대로 동작 안할 수도 있다.
CUDA 12.X 환경에서 onnxruntime-gpu를 사용하고 싶은 경우, 설치 방법이 아예 따로 있는 것을 볼 수 있다.
python이라면 단순히 pip 뒤에 extra-index-url을 추가하면 되는 정도니까 해당 방법을 따라 새로 onnxruntime-gpu를 설치해주면 된다. 그래도 안된다면 cuDNN 문제니까 cuDNN 다시 깔아주면 된다. (그래도 그래도 안되면 CUDA11.8, cuDNN 8.9.7로 낮춰라)
pip install onnxruntime-gpu --extra-index-url https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/onnxruntime-cuda-12/pypi/simple/
만약 c#을 사용하는 경우라면 조금 더 복잡하다. configuration도 바꿔줘야 하고, 패키지도 바꾸고 좀 난리를 쳐야한다.
따라서 c#일 경우에는 CUDA를 11.8로, cuDNN 8.9.7로 낮추는게 빠르다. (기본이 CUDA 11.8 사용하도록 되어있어서)
c# 이면 맘편히 그냥 낮추자.