머신러닝 서비스를 어떻게 서빙하는지 궁금증이 생겨 여러 툴들을 찾아보니
kubeflow, mlflow, bentoml 등 정말 너무 다양한 서빙 도구들이 많았다.
mlflow는 아주 잠깐 건드려 본 적이 있지만 kubeflow 같은 경우는 그 어려운 쿠버네티스를
잘 이해하지 못하면 하지 못할 것이라는 두려움에 차마 공부할 생각을 못했다.
이번 포스팅에서는 모델 서빙이 무엇인지 간단하게 알아보고
비슷하면서도 다른 kubeflow와 mlflow를 비교해보려고 한다.
먼저 모델 서빙이란?
서빙은 손님에게 음식을 가져다주는 행위를 말한다. 모델 서빙도 이와 같은 개념인데,
딥러닝이든 머신러닝이든 어떠한 모델이 예측한 예측값을 사용자에게 전달하는 것이다.
모델 서빙을 위해서는 여러 상황을 고려해야 하는데, 시간에 따라 변화하는 모델의 변경이력과
성능을 관리하는 형상관리와 장애와 유연함에 대응하는 고가용성/확장성이다.
이러한 고려사항을 해결하기 위해 최근 모델 서빙에 대한 연구가 활발하게 이루어지고 있는데,
대표적으로 소개되는 해결책으로 모델 컨테이너와 카나리 모델/롤백이다.
모델 컨테이너를 통해 모델 운영을 추상화하여 마치 도커 컨테이너를 이용하여 개발자들이 운영을
신경쓰지 않고 개발에 집중할 수 있게 하듯이 데이터 과학자가 모델 개발에 집중할 수 있게끔한다.
카나리는 옛날 석탄 광산에서 유독가스의 누출 위험을 알려주는 새이다.
MLOps에서 새로운 모델을 서빙하는 것은 꽤나 위험한 일이기 때문에, 광부가 카나리를 이용하여
미리 위험을 알 수 있듯이, 데이터 과학자들도 카나리 모델을 통해 테스트를 해볼 수 있다.
또한 운영중인 모델의 성능이 기준보다 좋지 않다면 특정 모델로 교체해야 하는데, 이것이 롤백이다.
모델 컨테이너를 사용하기 때문에 내부 모델의 바이너리 파일을 교체하는 것으로 간단히 롤백할 수 있다.
서빙을 간편하게 해주는 도구
이러한 서빙을 간편하게 해주는 도구가 오늘 비교해볼 kubeflow와 mlflow이다.
우선 둘의 유사점과 차이점부터 살펴볼까 한다.
유사점
1. 모델 개발에 대한 협력적인 환경을 조성하기 위해 만들어졌다.
2. 확장과 커스터마이징이 가능하다.
3. 머신러닝 플랫폼으로 대표되는 기술이다.
차이점
1. ☆ 동작방식 ☆
참고한 글에서도 이야기하고 있지만, 이것만 기억해도 될 정도로 중요한 차이로, 둘의 동작방식이 있다.
kubeflow는 기본적으로 쿠버네티스를 기반으로 동작하는 컨테이너 오케스트레이터이다.
따라서 kubeflow에서 모델을 학습시킨다는 것은 "쿠버네티스 클러스터" 안에서 일어나는 일이다.
(위의 그림을 참고하면 이해가 더 편할 것이다)
반면 mlflow는 모델에 대한 실험과 버전을 트래킹하는 파이썬 프로그램으로,
실제 학습은 내가 지정한 환경(ex. 로컬, 특정 서버)에서 실행되는 것이다.
mlflow는 단지 모델의 파라미터나 metric만 추척하며 기록한다.
kubeflow는 기본적으로 쿠버네티스에 대한 지식이 필요하기 때문에
그런 이유로 데이터 과학자들이 mlflow를 더 선호하는 경우도 많다.
kubeflow는 어렵지만 그만큼 높은 생산성을 가지고 있고, 최근 많은 기업에서 사용되고 있다.
2. 확장성
kubeflow는 근본적으로 확장성 있는 환경을 위해 만들어졌기 때문에 이 부분에 있어 mlflow보다
막강한 장점을 지니고 있다.
더 알아보면 좋을 것
위에서 설명한 서빙 도구 외에도 BentoML이라는 또다른 도구도 있다.
찾아보니 현업에서 꽤 많이 쓰이던데 다음에는 BentoML은 무엇인지 살펴보는 것도 좋을 것 같다😀
참고
A Comprehensive Comparison Between Kubeflow and MLflow