본문 바로가기

MLOps & DevOps/BentoML

[BentoML] Machine Learning Model Serving (1) - Serving의 개념 Online vs Offline vs Edge

👋 Intro

안녕하세요, 유블린입니다.

 

이 시리즈에서는 BentoML의 기본 개념에 대해 공부해 보려고 합니다.

 

시리즈를 시작하기 앞서 BentoML은  BentoML은 머신러닝, 딥러닝 모델을 API 형태로 서빙할 수 있게 도와주는 라이브러리입니다. 그럼 BentoML을 공부하기 전에 Serving이 무엇인지 먼저 알아야 겠죠? 

이번 글에서는 Serving이란 무엇이고 각 서빙의 방식의 특징은 무엇인가에 대해 다뤄보려고 합니다.

1. Serving이란?
2. 각 Serving 방식의 특성?

😎 Serving

Machine Learning Model 개발 프로젝트의 성공적인 마지막 단계는 개발된 모델을 실제(production) 환경에 배포하는 것입니다. 아래 방법들은 일반적으로 MLOps 개발자들에게 익숙한 Serving 방식입니다. 

 

  • Offline serving (aka batch inference)
  • Online model as a service (aka incremental learning or active learning)
  • Edge deployment

 

그렇다면, 각 방식의 특징이 무엇인지 알아봅시다. 

 

⭐️  Offline serving (aka batch inference)

Offline serving을 간단하게 말하면, batch로 처리하는 서빙입니다. Offline serving은 특정 주기로 서빙을 하는데 이 때 Batch 단위로 많은 양을 한번에 처리합니다.  (Airflow, Cronjob 등을 특정 주기 시간단위 마다 예측합니다.)

 

Offline 모델은 모델을 학습시키고 시스템에 적용한 뒤에는 더 이상의 학습 없이 사용하는 방식입니다. Offline serving도 비슷한 느낌의 서빙이라고 생각하시면 됩니다. 모델이 미리 테스트 데이터에 대한 추론 작업을 진행하고 해당 결과를 고성능 데이터베이스 (redis, memcached 등)에 캐싱합니다. 그리고 이 결과를 최종 사용자에게 서빙하는 것이죠. Offline serving의 큰 장점 중 하나가 구현이 상대적으로 간단하다는 것입니다. 최종 사용자에게 직접적으로 모델이 노출되지 않고, 실시간으로 재학습되거나 변화 하는 부분이 없기 때문이죠. (Netflix의 추천 알고리즘도 이런 방식으로 작동한다고 합니다.)

 

Offline으로 Serving를 하는 경우 가장 큰 단점은 새로운 데이터를 처리하도록 확장할 때 발생합니다. 새로운 데이터가 추가되면 새로운 데이터 뿐만 아니라 전체 데이터를 사용해 시스템의 새로운 버전을 처음부터 다시 학습해야 하기 때문입니다. 다시 학습이 완료되면 이전 시스템을 중지하고 새로운 시스템으로 교체합니다.

 

⭐️  Online serving (aka incremental learning or active learning)

Online serving을 간단하게 말하면, API로 만들어서 처리하는 서빙 방식입니다. 즉, 실시간 요청에 따른 반응을 하게 됩니다. 따라서 동시다발적으로 들어오는 요청에 대한 확장 정책이 요구됩니다. 이 때 Batch처리는 불가능 합니다.

 

모델이 Online 상태라는 것은 사용자의 입력을 자동으로 학습하는 모델을 말합니다. 가장 대표적인 Online ML은 신경망을 배치사이즈 1로 학습하는 경우가 있죠. 이렇게 학습을 진행 하면, 사용자가 모델의 end-point에 입력을 줄 때 마다 이 입력을 기반으로 backpropagation이 진행되고 동시에(혹은 비동기적으로) 모델의 가중치를 업데이트 합니다. 따라서 이 방식의 가장 큰 강점은 새로운 데이터 세트에 대응을 한다고 해서 따로 재학습을 진행할 필요가 없다는 점입니다. 

 

앞서 설명드린 Offline serving의 경우처럼 미리 학습 시켜둔 고정된 가중치가 있는 모델을 사용해 배포한 서비스는 사용자의 변화, 데이터의 변화 등으로 인해 제대로 대응을 못하게 될 수 있습니다. 이런 문제 점을 "concept drift"라고 하며, 앞에서 설명한 것처럼 모델을 재훈련 시켜서 재배포 해야합니다.

(‘Concept drift’ 는 기계 학습 분야에서 사용하는 용어로써 ‘시간이 지남에 따라 모델링 대상의 통계적 특성이 바뀌는 현상’을 의미합니다. 예측 모델이 처음에는 잘 맞다가 시간이 지날수록 점점 정확도가 떨어지면서 결국 쓸모가 없어지는 현상입니다.)

 

하지만, Online 모델을 사용한다면 배포 이후에도 모델이 학습을 하기 때문에 재배포가 필요한 경우를 줄여줄 수 있습니다. Offline 방식이 배포 시 "concept drift"에 적응 하는 대신 Online 방식은 배포시점과 관계 없이 추론을 할때 "concept drift"에 적응하는 것이죠. 이 밖에도 사용자 입력 범위가 매우 큰 모델인 경우 상대적으로 모델이 사용자에 더 알맞게 반응하는 것 처럼 느껴진다는 장점이 있습니다.

 

하지만, Online 방식도 단점이 존재합니다. 첫번째로, 상대적으로 입력이 부족한 부분에 대해서 모델이 학습한 내용을 망각 할 수 있습니다. 이로 인해서 long-term performance regression이 일어날 수 있게 됩니다. 두번째로, 배포 이후에도 모델이 학습을 하기 때문에 적대적 공격(adversarial attack)에 취약합니다. (최근 이루다 서비스에서 비슷한 사례가 발생했죠) 세번째로, Online 방식은 학습하기 어렵습니다. 배치 사이즈가 작을 수록 학습이 더 불안정 하기 때문입니다. Online 모델이 상대적으로 수렴하는데 더 오래 걸리고, 모델 초기화가 더 복잡합니다. 모델 서버가 여러개의 인스턴스로 이루어 진 경우 모델 가중치 등의 동기화가 느리게 발생할 위험성도 존재하게됩니다. 따라서 모든 인스턴스는 정적인 가중치 파일 대신에 peer나 최근 백업 가중치를 가져와야 합니다. 

 

⭐️  Edge deployment

지금까지 이야기한 Offline, Online 방식은 모두 클라이언트-서버 아키텍처입니다. Edge deployment는 클라이언트에서 서버로 데이터를 이동했다가 다시 클라이언트로 이동하는 것이 본질적으로 다른 부분입니다. (대표적으로 모바일 기기에 배포하는 것이 있습니다.) 따라서 네트워크 보안이 중요한 요소가 됩니다. 중간에 손상이 된다면 사용자 데이터가 변조될 수 있기 때문이죠.

 

또한, 클라이언트로 사용할 수 있는 하드웨어(컴퓨터, 모바일 기기)나 웹 브라우저에 배포를 해야 하기 때문에 Edge 배포가 까다롭습니다. 그나마 다행인 점은 하드웨어 및 소프트웨어 측면에서 빠르게 발전하고 있다는 점 입니다. 소프트웨어 적으로는 Apple의 Core ML 및 Google의 TensorFlow JS와 같은 기술은 클라이언트 플랫폼에서 기계 학습 모델 추론을 실행하기 위한 SDK를 제공합니다. 이 뿐만 아니라 하드웨어 측면에서도 GPU, CPU 및 모바일 SoC에 텐서 코어와 같은 머신 러닝 추론 기능이 칩에 바로 내장된 상태로 제공되고 있습니다. 또한, Fritz AI등의 SDK는 다중 장치 배포를 개선하는데 도움을 주기도 합니다.

 


👍 Outro

이번글에서는 Serving이란 무엇이고 각 서빙의 방식의 특징은 무엇인가에 대해 다뤄보았습니다.

다음 글에서는 BentoML이 무엇이며 주요 특징이 무엇인지에 대해 다뤄보려고 합니다. 링크

 

[BentoML] Machine Learning Model Serving (2) - BentoML이란, 주요 특징

👋 Intro 안녕하세요, 유블린입니다. 이 시리즈에서는 BentoML의 기본 개념에 대해 공부해 보려고 합니다. 이번글에서는 BentoML이 무엇인지 그리고 주요 특징은 뭐가 있는지 간단히 살펴볼 예정입

yuvelyne.tistory.com

 

저도 공부하면서 정리하다보니 틀린 내용이 있을 수 있습니다. 내용 오류에 대한 피드백은 언제나 환영입니다 :)

미래의 저와 다른 분들께 도움이 되었길 바라며 이만 줄이겠습니다.

 


References

MLOps concepts for busy engineers: model serving  

BentoML github repo  

batch-inference vs. online inference