MLOPS/SERVING

CLOPS - MODEL SERVING

개발허재 2022. 8. 17. 23:00

본 글은 NAVER DEVIEW 2021 의 'CLOps: 넌 모델링만해, 난 서빙할테니' 발표를 보고 정리하였습니다.

 

전체 아키텍처 ( 구성 컴포넌트)
CLOps 의 여러 리소스

CLOps 의 여러 리소스

- Kubeflow의 profile 과 비슷


모델 서빙을 위한 필수 요소

Auth

- 접근제어 : 인가된 사용자에 의해서만 CLOps 사용 가능 (admin, readonly...)

- 프로젝트별 권한 관리: 권한에 따라 각각 다른 기능 사용 가능


Authenticator로 Webhook 방식을 사용

1. 사용자가 k8s API 호출 

2. 발행된 토큰을 webhook 서버에 전달하여 인증여부 확인 ( TokenReview 라는 오브젝트형태로 사용자 토큰 담아서 요청 / 응답 처리)

 


Operator

Resource 

- 의도를 담은 레코드, 사용자가 k8s API 사용을 위한 인터페이스 역할, 

- Deployment, Service, Daemonset 등이 존재

 

Custom Resource(CR)

- 기본리소스 외에 애플리케이션 제공자가 정의한 리소스

- 모든 오브젝트 리소스는 동일한 형태로 안정적으로 확장 가능한 구조

 

오퍼레이터는 SDK 로 손쉽게 개발가능

Operator-SDK : https://sdk.operatorframework.io/docs/building-operators/golang/installation/

 

Installation Guide

Install operator-sdk Follow the steps in the installation guide to learn how to install the operator-sdk CLI tool. Additional Prerequisites git go version 1.18 docker version 17.03+. kubectl and access to a Kubernetes cluster of a compatible version.

sdk.operatorframework.io

Operator-SDK tutorilas : https://frozenpond.tistory.com/146?category=1209055 

 

[kubernetes] operator-sdk를 사용하여 쿠버네티스 오퍼레이터 구축하기 (operator sdk 예제)

operator-sdk는 operator 개발 플로우를 제공하는 프레임워크로 해당 게시글은 operator의 개념에 대해 먼저 숙지해야 합니다. [kubernetes] 쿠버네티스 오퍼레이터란(kubernetes operator) 이번 게시글에서는 쿠.

frozenpond.tistory.com

kubebuilder : https://github.com/kubernetes-sigs/kubebuilder

 

GitHub - kubernetes-sigs/kubebuilder: Kubebuilder - SDK for building Kubernetes APIs using CRDs

Kubebuilder - SDK for building Kubernetes APIs using CRDs - GitHub - kubernetes-sigs/kubebuilder: Kubebuilder - SDK for building Kubernetes APIs using CRDs

github.com


Operator - detail

1 단계: 정의된 커스텀 리소스에 문제가 없는지 검증

2단계: 기본값을 설정하거나 조건에 맞게 값을 변경

위 두단계를 거쳐야만 요구사항이 큐에 전달된다.

아래 Reconciling 그림 참조

 

Reconciling


모델 배포 일반화 및 부가기능 주입

- 모델 어플리케이션 변경 없이 사이드카 형태로 excutor 주입

- 모델 엔드포인트 일반화 및 미들웨어 주입

Executor 단에서 리퀘스트를 대신 받아서 프록시 하는 역할을 한다.

이렇게 하면, 기존 모델 어플리케이션을 건들지 않고 여러 기능을 하는 Executor를 주입할 수 있게 된다.

 


모델 서버에 여러 모델이 배포되어있을경우 하나의 엔드포인트로 묶어주는 단일화 기능 가능

명세된 스펙의 트래픽에 따라 모델에 트래픽을 전달 가능

 

이외에도

로깅 포워드 - 컨테이너 내의 로그를 타겟으로 포워딩 사이드카 주입

이미지 빌드 - 이미지 빌드 파이프라인 실행(CLOps CLI 명령어로...) 및 로컬 데이터 전송 자동화 

오토스케일러, 모델 레지스트릐 및 캐시, 모델 요청 형태 제어(sync, async), 요청량 제어(Provider/Consumer)


Scheduler

쿠버네티스가 특정 애플리케이션 배포를 요청할 때 어떤 노드가 적합한지 결정하여 스케줄링하는 중요한 컴포넌트

 

프로젝트 당 모델 종류에 따라 다양한 필요 리소스

- cpu/gpu 사용여부, gpu 필요코어, fp32/fp16에 따른 아키텍처

- 프로젝트별 머신 타입 사용량 제한 스케줄링

 

효율적인 리소스 관리를 위한 스케줄링 정책

Horizontal Pod Autoscaler (HPA)

 

요청량에 따른 오토스케일링

- 모델러가 요청량 threshold 설정하면 HPA 는 요청량에 따른 스케일 인/아웃 진행

Model Resistry

- 학습된 모델 파일을 contain 해야 함

- 모델 버전관리가 가능해야 함

- 모델 메타데이터(파라미터 등)들을 저장하여 손쉽게 바꾸면서 테스트할 수 있는 환경을 세팅해주어야함

- 거대 모델의 경우, 캐시 볼륨을 통해 캐싱을 지원해야됨

- 많은 모델을 업로드/다운로드 경우 사이즈가 크기 때문에 parrell 업로드/다운로드 필요...그리고 추론시 멀티스레드 사용하여 throughput 줄임,,,