logo
logo
실시간 추천을 위한 Kubeflow 환경
코드너리  |  2022. 03. 16
추천 서비스
사용된 기술:
kubeflow-image
kubernetes-image
redis-image
tensorflow-image
content

개요

"기존에 저장된 결과를 정적으로 추천하지 말고, 새로운 Input에 동적으로 변화하는 실시간 추천을 만들자" 라는 목표 아래 실시간 Serving Model 의 inference 결과를 추천하는 방식을 구현 하자.

직면한 문제점

대국민 서비스로 실시간 추천을 준비하며 가장 신경썼던 부분은 “속도”문제 였습니다. Model 의 Inference 속도, Model 의 input을 만드는 API의 속도가 매우 빨라야 매초 접속하는 수백명의 고객에게 Model 기반 추천 결과를 고객에게 서비스 할 수 있었습니다. 이를 해결하기 위해 아래와 같은 방법을 사용했습니다.

  1. AWS EC2의 다양한 Instance type에서의 Model Serving을 부하테스트 및 최적의 instance 사용
  2. Gateway 역할을 하는 python api의 경우 gunicorn의 worker 갯수를 늘리고 전처리 로직을 최소화
  3. TF Serving Model과 Gateway API사이의 GRPC 통신

그 결과 초당 평균 650개 정도의 request를 처리할 수 있었습니다

모델 업데이트 과정

Kubeflow pipeline이 정상적으로 동작하면 최신화된 Model이 AWS의 특정 S3 Bucket에 upload되는데, 이를 trigger하여 Serving model을 update하는 역할의 API개발이 추가적으로 필요했습니다. 고민 중 Sam이 AWS SQS를 활용하면 이를 해결할 수 있겠다고 얘기해주셨고 이를 바탕으로 아래와 같은 Architecture가 만들어졌습니다.

  1. 추천 모델러들이 kubeflow notebook에서 ML engineering 관련 코드 작성 및 ML pipeline 작성
  2. GPU Node에 Pipeline 배포
  3. 새로 생성된 model 및 inference에 필요한 데이터 S3에 저장
  4. AWS SQS 가 S3 Bucket update catch
  5. AWS SQS 가 Bucket update 사실을 Queue S3 monitoring API가 Queue를 받아서 새로 update될 모델 검증 ( prediction ), 검증 완료시 Efs volume update TF serving pod, Gateway API rollout
Copyright © 2024. Codenary All Rights Reserved.