빅웨이브에이아이 기술블로그

BentoML, 모델 서빙을 쉽고 빠르게 ! 본문

기술 블로그

BentoML, 모델 서빙을 쉽고 빠르게 !

빅웨이브 박정환 2021. 7. 1. 20:04

안녕하세요 ! 빅웨이브에이아이의 박정환입니다.

 

지난 포스팅글은 정형 데이터 분석 분야의 SOTA 알고리즘인 TabNet에 대해서 알아보았었는데요~

 

<혹시나 못보신 분들을 위한 링크 https://bigwaveai.tistory.com/7>

 

이번 포스팅글은 모델 서빙을 훨씬 쉽게 ! 훨씬 간단하게 ! 도와주는 BentoML에 대해서 알아보도록 하겠습니다 !

 

 

Serving

 

BentoML을 알기 전, 모델 서빙이 무엇인지부터 알아보도록 하겠습니다.

 

서빙(Serving)이란, 개발된 모델을 서빙 하는 것, 맛있는 음식을 손님에게 서빙해주는 것이라고 생각하면 되겠습니다 !

 

이 서빙의 방식으로는 Batch, Online, Edge(Mobile)으로 나뉘어져 있는데요, Serving 시 의존성 관리를 중요하게 취급되기 때문에 Docker나 쿠버네티스를 기반으로 합니다.

 

 

그럼, Batch Serving이 뭔지부터 알아볼까요?

 

Batch Serving이란 특정 주기로 서빙 하는 것을 말합니다, Batch로 많은 양을 한꺼번에 처리해요.

 

Airflow 나 Cronjob를 특정 주기 시간단위로 예측을 합니다.

 

예측 결과 DB에 저장하고 서버에서 활용을 합니다.

 

 

다음은, Online Serving입니다. 

 

Online Serving은 API 서빙, 실시간 요청에 따른 반응을 합니다.

 

동시 여러 요청에 대한 확장대책이 필요하며, Batch 처리가 불가능합니다.

 

Serving 라이브러리에는 Kfserving, BentoML, Tensorflow Serving, Seldon Core 등이 있습니다.

 

오늘 소개 시켜드릴 BentoML이 여기에 속하죠!

 

 

Bento ML

 

BentoML은 적은 코드로 production 서비스까지 가능합니다.

 

Flask 기반 모델 대비 100배의 처리량을 보여줄정도로 높은 성능을 가지고 있으며, 모델 관리를 위한 웹 대시보드 또한 존재합니다.

 

BentoML은 프레임워크 대부분을 지원하는 범용성을 보여주기도 하는데요, Python Script로 작성해 Airflow로 접근이 가능합니다.

 

 

장점

 

Tensorflow Serving은 Tf.savemodel 형식만 서빙이 가능하죠. BentoML은 파이썬 런타임 기반으로 사후 사전 처리 포함이 가능할 것으로 보입니다.

 

BentoML은 API 서버를 자동으로 만들어주는 편리함을 가지고있습니다 

 

CLI에서 정말 다양한 것들을 제공해주고 있는 것 역시 장점이죠.

 

그리고, 앞서 언급했듯 엄청 좋은 퍼포먼스를 보여줍니다.

 

 

고민할 포인트

 

BentoML은 코드를 production에 배포하는 것에 집중하고 있고, Auto Scailing, ABTest, MAB, Monitoring은 추가로 설정해줘야 합니다. (이 부분은 BentoML도 준비하고 있다고 합니다), KFserving 등과 결합하면 좋을 것 같네요.

 

수평 확장도 고려해야 좋을 것 같습니다.

 

그리고, 아직 많은 Use Case가 없어서 어떻게 아키텍처를 가져갈지 고민을 해봐야 합니다.

 

BentoML 등장 이후 깃 Star 수가 급증

 

Adaptive Micro Batching

 

BentoML은 Adaptive Micro Batching라는 방식을 사용하는데요, 모델 서빙시 개별 추론 요청을 배치단위로 처리하는 것은 성능에 큰 영향을 줍니다. 특히, GPU 기능을 제대로 활용하려면 배치 처리가 필수이죠 !

 

BentoML은 HTTP 처리 데이터 처리과정까지 Micro batching 지원을 합니다.

 

배치 최대 메모리 및 지연 제한 시간 제한을 둘 수 있습니다.

 

mb max batch size

mb max latency

 

배치 최대 메모리 및 지연 제한 시간 제한을 둘 수 있습니다.

 

 

Outbound Semaphore

 

동시 처리되는 최대 배치 수를 말합니다. 모델 서버 워커수에 맞추어 자동설정을 합니다.

 

 

Estimated time

 

배치 처리 예상시간을 말합니다.

 

아래 그림은 Adaptive Micro Batch가 적용되면 API에 요청이 어떤식으로 처리되는지 예시를 간략하게 그림으로 보여주고 있습니다.

 

 

그림과 같이 요청이 들어올 때 요청을 하나씩 처리하는 것이 아니라 여러 개를 한번에 처리하여 응답하고 있는 것을 확인할 수 있습니다.

 

이는 지정한 latency 를 넘지 않는 선에서 기다린시간과 예상 배치 처리시간이 초과되려는 경우 바로 요청들을 합해서 배치처리 진행시킵니다.

 

이후 API로 오는 다음 요청은 다음 마이크로 배치로 받아서 배치간은 비동기 처리로 진행하게 됩니다.

 

Mb_max_size 와 Mb_max_latency를 크게 잡으면  해당 배치의 처리량이 많을 경우 API 응답 시간이 최대 Mb_max_latency 만큼 지정된 시간만큼  걸릴수 있습니다.

 

Tensorflow Serving 과 달리 자동으로 배치 크기와 대기시간 제한을 조절하여 위에 지정한 Latency memory 제한을 맞춥니다.

 

다른 서빙 서비스와 간략 비교

 

Tensorflow Serving

 

Tensorflow Serving은 Tensor 형식 그래프만 저장하고, Savemodel 파일만 지원합니다. 

 

반면, BentoML은 파이썬 기반 런타임으로 사전 사후처리까지 포함된 서빙이 가능합니다.

 

AWS Sagemaker

 

AWS Sagemaker는 기본 제공 알고리즘 사용을 안할 시, 사용자가 직접 플라스크 앱을 구성해야 합니다.

 

BentoML로 패키지 되면, 모델도 Sagemaker로 적용이 가능합니다.

 

Horizontal Scaling

 

BentoML 자체가 Horizontal Scaling을 제공하지 않으나 컨테이너화해서 쿠버네티스와 함께 사용이 가능합니다.

 

AWS Lambda, ECS, GCP 클라우드 플랫폼으로 배포도 가능합니다.

 

BentoML API 응답 성능 테스트

BentoML 을 활용한 Serving API 성능을 간단하게 테스트 해보았습니다.

 

비교를 위해 Tensorflow serving API 성능도 함께 비교해보려고 합니다!

 

API 부하 성능 테스트를 위해 Apache Jmeter를 활용했습니다.

 

Serving에 활용되는 GPU 사양은 RTX 3090(vram 24GB)로 동일하게 유지했습니다.

 

BentoML - 적용 테스트 -1

모델 용량 : 3MB

Adative Micro Batch 처리 적용 여부 : O

사전 사후 전처리 과정 포함 여부 : O

동시접속자 : 6000

반복실행간격 : 1초

루프 : 10회

Max_latency : 4초

 

BentoML - 적용 테스트 2

모델 용량 : 86MB(RNN 과정 포함)

Adative Micro Batch 처리 적용 여부 : O

사전 사후 전처리 과정 포함 여부 : O

동시접속자 : 1000

반복실행 : 1

루프 : 10

Max_latency : 6.8

Tensorflow Serving - 적용 테스트

모델 용량 : 86MB(RNN 과정 포함)

Adative Micro Batch 처리 적용 여부 : X

사전 사후 전처리 과정 포함 여부 : X

동시접속자 : 200

반복실행 : 1

루프 : 10

Max_latency : 8

 

 

Tensorflow Serving에 Adaptive Mircro Batch 옵션을 적용하지 않았기에 BentoML의 성능이 압도적으로 우수한 것 처럼 보입니다.

 

추후, Tensorflow Serving에 Adaptive Micro Batch 를 적용하여 다시 비교한 결과도 업로드 하도록 하겠습니다.

 

BentoML에 대한 설명과 다양한 튜토리얼은 공식 Document 에서 더 자세히 확인할 수 있습니다!

 

지적 및 피드백은 감사한 마음으로 언제든 환영이니 댓글로 달아주시면 감사하겠습니다!

 

감사합니다 '_' ! !

 

참고 자료
https://docs.bentoml.org/en/latest/api/index.html 
https://zzsza.github.io/mlops/2021/04/18/bentoml-basic/
https://zzsza.github.io/mlops/2018/12/28/mlops/
Comments