정리 차원에서, 회사에서 썼던 BentoML deployment에 대해서 짧게 요약해놓고자 한다.
Introduction
BentoML은 MLops에서, Machine Learning으로 학습된 모델을 Serving하기 위해 만들어진 library로
- ML Serving?
Machine Learning으로 학습된 모델을 앱 내 서비스 같은 production 환경 (<> 학습환경)에서 사용할 수 있도록 하는 것으로, 포장의 개념으로 이해하면 될 듯.
학습 환경과 달리 production 환경에서는 보통 실시간으로 inference되기 때문에,
inference할 모델을 미리 저장 (packing)하거나 ;
* api형식으로 저장하거나, active learning을 적용해 inference와 동시에 학습할 수도 있음. (이는 다시 online/offline serving이라는 개념으로 들어가는데, 여기서는 이정도만 설명)
user data가 internal dataset에 포함관계인 경우 test 결과를 저장해둔 뒤 input에 맞게 뽑아낼 수도 있다.
이러한 과정들을 모두 model serving 과정이라 하며, serving은 곧 하나의 서비스라는 output이 나온다.
하나의 서비스는 하나 이상의 서버, 혹은 도커를 통해 배포될 수 있고, 배포는 bentoml 자체 (Yatai)로도 가능할 수 있고, 혹은 유명한 Kubernetes, AWS같은 컨테이너 관리 시스템을 통해 여러 서비스를 관리하는 단계로 이어질 수 있다.
- BentoML이 그래서 무엇인가?
BentoML은 그래서 앞에서 말한 ML serving, 나아가 배포까지 가능하게 해주는 python 라이브러리로, 다른 여타 serving 라이브러리에 비해 장점은
1. 정말 코드량이 적은 편이며,
2. 대부분의 ML 프레임워크 (pytorch, tensorflow, xgboost, etc)를 지원한다.
라는 것들이 있다. 일단 코드량이 적은 것과 직관적인 부분이, 빠르게 deployment를 해야했던 환경에서 많이 장점이었다.
Starting
설치는 간편하게
pip install bentoml
로 할 수 있다.
(require python>=3.7)
모든 이야기를 이 페이지에서 하고 싶지만, 코드 및 구조에 관한 것은 다음 페이지에서 진행하려 한다.
이번 페이지는 MLops 및 serving-deployment의 개념이 헷갈렸는데, 이를 정리하면 좋을 것 같아 분리하였다.
다음 페이지에서 코드 및 구조를 한번에 요약하여 정리하도록 하겠다.
(잘못된 부분이 보이신다면, 피드백주시면 감사하겠습니다)