[AITech][Product Serving] 20220530 - BentoML & AirFlow
본 포스팅은 SOCAR의 ‘변성윤’ 마스터 님의 강의를 바탕으로 작성되었습니다.
BentoML & AirFlow
BentoML
BentoML
은 Model Serving에 특화된 Serving Infrastructure입니다.
처음에는 Fast API로 서버를 개발하여 serving하는 것이 좋지만, 다수의 모델들을 만들고 서빙하다 보면 반복되는 작업이 존재합니다.
이러한 반복되는 작업들을 추상화하여 serving 과정을 더 빠르고 간단하게 만들어주는 것이 Serving Infrasturcture의 의의입니다.
이러한 Serving Infrasturcture로 많은 라이브러리들이 등장하고 있으며, 각 라이브러리들은 해결하려고 하는 핵심 문제가 무엇인지, 그 문제를 어떻게 해결했는지가 다르다고 할 수 있습니다.
그 중 BentoML은 Serving에 특화된 라이브러리라고 할 수 있습니다.
BentoML이 해결하는 문제
- 문제 1: Model Serving Infra의 어려움
- Serving을 위해 다양한 라이브러리, Artifact, Asset 등 사이즈가 큰 파일을 패키징
- Cloud Serving에 지속적인 배포를 위한 많은 작업이 필요
- BentoML은 CLI로 이 문제의 복잡도를 낮춤 (CLI 명령어로 모두 진행 가능하도록)
- 문제 2: Online Serving의 Monitoring 및 Error Handling
- Online Serving으로 API 형태로 생성
- Error 처리, Logging을 추가로 구현해야 함
- BentoML은 Python Logging Module을 사용해 Access Log, Prediction Log를 기본으로 제공
- Config를 수정해 Logging도 커스텀할 수 있고, Prometheus 같은 Metric 수집 서버에 전송할 수 있음
- 문제 3: Online Serving 퍼포먼스 튜닝의 어려움
- BentoML은 Adaptive Micro Batch 방식을 채택해 동시에 많은 요청이 들어와도 높은 처리량을 보여줌
현재 많이 사용되는 serving infra로는 아래와 같은 라이브러리들이 존재하며, BentoML은 2019년 출시되어 꾸준한 상승세를 보이고 있습니다.
BentoML의 특징
- 쉬운 사용성
- Online/Offline Serving 지원
- Tensorflow, PyTorch, Keras, XGBoost 등 Major 프레임워크 지원
- Docker, Kubernetes, AWS, Azure 등의 배포 환경 지원 및 가이드 제공
- Flask 대비 100배의 처리량
- 모델 저장소(Yatai) 웹 대시보드 제공
- 데이터 사이언스와 DevOps 사이의 간격을 이어주며 높은 성능의 Serving이 가능하게 함
Apache AirFlow
Apache AirFlow
는 Batch Process를 위한 라이브러리입니다.
Batch process란 예약된 시간에 주기적으로 실행되는 프로세스입니다.
- 모델을 주기적으로 학습시키는 경우 사용 (Continuous Training)
- 주기적인 Batch Serving을 하는 경우 사용
- 그 외 개발에서 필요한 배치성 작업
- 예) 매주 일요일 07:00에 새로 수집한 데이터로 모델 재학습
AirFlow의 등장 전에는 Linux Crontab
으로 Batch process를 구축하였습니다.
Linux에 기본적으로 설치되어 있는 Crontab을 이용하면 간단하게 batch process를 구현할 수 있습니다.
하지만 간단한 만큼, Linux Crontab을 사용할 때의 한계점들이 존재합니다.
- 재실행 및 알람
- 파일을 실행하다 오류가 발생한 경우, 크론탭이 별도의 처리를 하지 않음
- 예) 매주 일요일 07:00에 predict.py를 실행하다가 에러가 발생한 경우, 알람을 별도로 받지 못 함
- 실패할 경우, 자동으로 몇 번 더 실행(Retry)하고, 그래도 실패하면 실패했다는 알람을 받으면 좋음
- 과거 실행 이력 및 실행 로그를 보기 어려움
- 여러 파일을 실행하거나, 복잡한 파이프라인을 만들기 어려움
이를 위해 좀 더 정교한 스케쥴링 및 워크플로우 도구들이 등장하였습니다.
이 중 Apache AirFlow는 현시점에서 스케쥴링, 워크플로우 도구의 표준이라고 할 수 있습니다. (가장 많이 사용되고 있습니다)
아래는 AirFlow의 약력입니다.
- 에어비앤비(Airbnb)에서 개발
- 현재 릴리즈된 버전은 2.2.0으로, 업데이트 주기가 빠름
- 스케쥴링 도구로 무거울 수 있지만, 거의 모든 기능을 제공하고 확장성이 넓어 일반적으로 스케쥴링과 파이프라인 작성 도구로 많이 사용
- 특히 데이터 엔지니어링 팀에서 많이 사용
AirFlow에서 제공하는 기능
- 파이썬을 사용해 스케쥴링 및 파이프라인 작성
- 스케쥴링 및 파이프라인 목록을 볼 수 있는 웹 UI 제공
- 실패 시 알람, 재실행 시도
- 동시 실행 worker 수
- 설정 및 변수 값 분리
Leave a comment