머신러닝 모델 배포 방법

Tensorflow 정리 2021. 6. 29. 13:27

머신러닝 모델 개발은 사용자 서비스를 위한 것.

머신러닝 파이프라인

위 파이프라인 중 '모델 서비스' 단계가 실제 서비스 환경에서 의사결정에 사용될 수 있도록 배치하는 것.

MNIST 데이터 학습을 예시로 들어보면 유저가 8을 손으로 그려서 서버로 보내면 서버에서 훈련된 모델이 해당 인풋을 숫자 8로 인식하여 아웃풋으로 내보내는 것.

 

 

모델 서비스란?

머신 러닝 모델을 배포하는 것은 단순히 머신 러닝 모델을 통합하고 입력을 받아 출력을 반환 할 수있는 기존 프로덕션 환경 (1)에 통합하는 것을 의미합니다. 모델을 배포하는 목적은 훈련 된 ML 모델에서 예측을 사용자, 관리 또는 기타 시스템에 관계없이 다른 사람이 사용할 수 있도록하는 것입니다. 모델 배포는 미리 정의 된 목표를 달성하기 위해 시스템 내 소프트웨어 구성 요소의 배열 및 상호 작용을 나타내는 ML 시스템 아키텍처와 밀접한 관련이 있습니다.

모델을 배포하기 전에 머신 러닝 모델이 배포 준비를 마치기 전에 달성해야하는 몇 가지 기준이 있습니다.

  • 이식성 : 이것은 한 기계 또는 시스템에서 다른 기계 또는 시스템으로 소프트웨어를 전송할 수있는 능력을 나타냅니다. 휴대용 모델은 응답 시간이 비교적 짧고 최소한의 노력으로 다시 작성할 수있는 모델입니다.
  • 확장 성 : 모델을 확장 할 수있는 크기를 나타냅니다. 확장 가능한 모델은 성능을 유지하기 위해 재 설계 할 필요가없는 모델입니다.

ML 모델을 배포하는 일반적인 방법에는 일회성, 배치 및 실시간의 세 가지가 있습니다.

일회성

배포하기 위해 머신 러닝 모델을 지속적으로 학습해야하는 것은 아닙니다. 때로는 모델이 한 번 또는 주기적으로 만 필요합니다. 이 경우 모델은 필요할 때 임시로 교육을 받고 일부 수정이 필요할 때까지 성능이 저하 될 때까지 생산에 투입 될 수 있습니다.

일괄

배치 학습을 사용하면 모델의 최신 버전을 지속적으로 유지할 수 있습니다. 한 번에 데이터의 하위 샘플을 가져 오는 확장 가능한 방법이므로 각 업데이트에 대해 전체 데이터 세트를 사용할 필요가 없습니다. 이는 모델을 일관되게 사용하는 경우 유용하지만 반드시 실시간 예측이 필요하지는 않습니다.

실시간

예를 들어 거래가 사기인지 아닌지를 판단하기 위해 실시간 예측을 원할 경우도 있습니다. 이것은 확률 적 경사 하강 법을 사용한 선형 회귀와 같은 온라인 머신 러닝 모델을 사용하여 가능합니다.

 

배포 방법을 결정할 때 고려할 요소

ML 모델을 배포하는 방법을 결정할 때 고려해야 할 여러 가지 요인과 의미가 있습니다. 이러한 요소에는 다음이 포함됩니다.

  • 예측이 생성되는 빈도와 결과가 얼마나 긴급한지
  • 예측을 개별적으로 또는 일괄 적으로 생성해야하는 경우
  • 모델의 대기 시간 요구 사항, 보유한 컴퓨팅 성능 및 원하는 서비스 수준 협약(SLA)
  • 모델을 배포하고 유지하는 데 필요한 운영상의 영향과 비용

 

TF Serving

텐서플로우는 모델 서빙을 위한 서버를 따로 제공하고 있다.

 - Tensorflow serving server

tensorflow serving server는 tfx(tensorflow extended)의 한 컴포넌트이며 다음과 같은 기능을 제공한다.

  1. 다양한 프레임워크 지원
  2. 동시 서빙
  3. 배치 단위의 서빙
  4. 모델 관리
  5. gpu 스케쥴링
  6. http/grpc 프로토콜
  7. metric

 

tfx를 이용한 ML 파이프라인에서는 학습 컴포넌트에서 학습이 된 모델을 tfx Pusher를 통해 클라우드 스토리지, 디렉토리에 전송하면, 서빙서버가 자동으로 추가된 모델을 읽고 로드하여 서빙에 사용하는 방식입니다. 아래 그림을 보면 스토리지가 모델 저장소 역할을 하면서, 모델 버전 관리 기능이 필요하게 됩니다. 한 모델이 학습하며 새로운 체크포인트를 내놓으면, TF Serving은 현재 최고 성능의 모델을 배포하면서 바로 이전 모델로 롤백을 할 준비를 하게 됩니다.

TF Serving은 GPU를 지원하기에 GPU를 사용하니 배치 단위의 요청을 처리할 수 있다는 특징이 있습니다. 물론 요청이 오자마자 바로 GPU로 보내 처리하는게 빠를수도 있으나, 그럴거면 CPU를 사용하는게 나을수도 있습니다. 또 요청을 바로바로 처리하면 처리량 자체가 낮아지는 문제가 있죠. 비싼 GPU 장비의 성능을 뽑고 싶은 것도 있고요.

응답속도는 약간 느려지지만 처리량을 올리기 위해 배치 단위의 서빙을 하기도 합니다. 요청이 실시간으로 들어오면 일정 시간, 요청 수 만큼 기다렸다 조건이 충족할 때 GPU로 보내는 방법이죠.

 

 

추가적으로..

머신러닝은 보통 python 혹은 R로 학습된 모델이 많다.

 

배포하고 싶은 시스템이 해당 언어를 사용하지 않을 경우 어떻게 배포해야할까?

학습 서버에서 API를 구현하고, 이용하고자 하는 서버에서는 해당 API를 호출하여 사용

Python : Flask, Django, Falcon, Hug, ...

R : Plumber

'Tensorflow 정리' 카테고리의 다른 글

base64 서명 데이터 학습  (0) 2021.07.20
SVM 알고리즘  (0) 2021.06.08
TensorFlow 연습  (0) 2021.05.19