모델을 서빙하려는 과정에서 문제가 발생하였다.
객체탐지 정확도는 높아졌으나
DarkNet은 BentoML로 서빙하기 적합하지 않다는 것.
그냥 DarkNet의 Weight값으로는 많은 서빙이 별로였다.
원래 CNN을 사용하다가 Darknet을 사용하면서 생긴 문제였다.
Yolov4에서 서빙을 바꿔볼까?
Keras로 변환해서 Flask로 서빙할수도 있지만 정확도가 떨어진다는 문제가 발생할 수 있었다.
찾아보니 Yolov4를 TensorRT로 변환하는 방법이 있었고, TensorRT는 최적화를 자동화 하여 모델 속도를 매우 빠르게 하는 효과가 있었다.
https://elinux.org/TensorRT/YoloV4
예전에 관련 글을 읽어보니 Yolov3의 경우
정확도가 꽤 떨어진다고 했지만,
Yolov4에서는 그 정도로 정확도가 떨어지진 않는 것 같아 변환하여
Triton으로 서빙하면 좋겠다는 생각을 했다.
Yolov4DarkNet을 ONNX로 변환 후
ONNX를 TensorRT로 변환하여 모델을 저장하고
Triton으로 배포하는 것이다.
성능이 좋지만, 설정하는 값들이 많아
지금 모델을 바꾼 시기에 적용하긴 촉박하다는 생각이 들었다.
Fastapi 사용하기. Yolov4DarkNet을 ONNX로 변환 후
서버를 열자. 그 후에 백엔드와 통신해서 api 통신을 하면 되겠다!!!!
그래서 Fastapi로 웹 서버를 열어
http로 서빙하는 방식을 생각했다.
https://mumin-blog.tistory.com/337
https://cocosy.tistory.com/65
프로젝트 규모가 아주 큰 것은 아니기 때문에
꼭 Triton으로 배포하지 않아도 됐다.
속도가 Uvicorn을 사용하여 더 빠르다.
상세 과정
https://eunjin3786.tistory.com/539
POST vs GET 의 차이
https://velog.io/@cho876/%EC%9A%94%EC%A6%98-%EB%9C%A8%EA%B3%A0%EC%9E%88%EB%8B%A4%EB%8A%94-FastAPI
그리고 코랩에서 모델을 돌리는 것보다
훈련된 모델을 로컬에서 하는 게 좋을 것 같은 결론을 내렸습니다.
colab에서 돌릴 경우 문제가 될 수 있는 점
1. 외부 접속: Colab은 외부에서 접근할 수 있는 공용 IP 주소를 제공하지 않습니다. 따라서 FastAPI 앱을 외부에서 접근하려면 추가적인 설정이 필요합니다. 예를 들어, ngrok 등의 도구를 사용하여 로컬 포트를 공용 URL로 전달하는 방법을 사용할 수 있습니다. 자세한 내용은 ngrok의 공식 문서를 참조하십시오.
2. 성능 제한: Colab은 공유 리소스를 사용하므로 성능이 제한될 수 있습니다. 따라서 복잡한 FastAPI 앱이나 대량의 트래픽을 처리하기에는 적합하지 않을 수 있습니다.
로컬에서 돌릴 경우의 장점
1. 성능: 로컬 환경에서 모델을 실행하면 로컬 시스템의 자원을 최대한 활용할 수 있습니다. GPU, CPU 등의 자원을 효율적으로 활용하여 모델의 추론 속도를 높일 수 있습니다.
2. 개인 정보 보호: 로컬 환경에서 모델을 실행하면 데이터와 결과를 외부로 전송하지 않아도 됩니다. 따라서 개인 정보 보호와 데이터 보안 측면에서 더 안전합니다.
3. 개발 및 디버깅 용이성: 로컬 환경에서 모델을 실행하면 개발 및 디버깅 작업이 더 편리합니다. 코드 수정 후 즉시 결과를 확인할 수 있으며, 디버깅 도구를 사용하여 문제를 해결할 수 있습니다.
4. 의존성 관리: 로컬 환경에서 모델을 실행하면 필요한 라이브러리 및 의존성을 관리하기 쉽습니다. 필요한 패키지를 직접 설치하고 관리할 수 있으며, 원하는 환경을 구축할 수 있습니다.
위와 같은 이유 때문에, ONNX로 변환한 모델을 로컬 환경에서 실행하는 것이 일반적으로 더 효율적이고 안전한 방법입니다. 로컬 환경에서 모델을 실행하기 위해서는 필요한 라이브러리와 의존성을 설치하고, 해당 모델을 로드하고 실행하는 코드를 작성하여 진행할 수 있습니다.
로컬에 도커를 다운받고 tensor로 변환하기로 했다.