예전에 공부했던 KFServing v0.4에 대해 정리해 본다.
지금은 버전업데이트 되어서 이름이 KFServe로 이름이 바뀌고 Kubeflow 프로젝트에서 떨어져 독립 프로젝트로 된거 같다.
Kubeflow 프로젝트의 일부로 K8s에서 inference를 지원하는 serving 도구
Kubeflow와 함께 설치되지만 별도로 설치할 수 있다.
KFServing은 Auto-scaling, canary rollout을 위해 Knative와
Traffic routing과 ingress를 위해 Istio가 필요하다.
서버리스(serverless) application을 빌드, 배포, 관리하기 위해 K8s 기반 플랫폼
*서버리스는 개발자가 서버를 관리할 필요 없이 어플리케이션을 빌드하고 실행할 수 있도록 하는 클라우드 네이티브 모델을 말함
Knative는 크게 Serving과 Eventing 2개의 기능이 있다.
컨테이너의 신속한 배치, 오토 스케일링, 복잡한 배포(rolling/canary)등을 지원
Istio를 백엔드로 Knative 서비스를 라우팅
다양한 이벤트 소스로 부터 이벤트를 받아 처리할 수 있는 메세지 처리 모듈
이벤트 소스(구글 클라우드 pub/sub, AWS SQS, cronjob, websocket)
브로커(버킷), 채널(Kafka, NATS), 이벤트 Trigger 기능이 있다.
마이크로서비스를 서로 연결, 관리, 보안기능을 제공하는 오프소스 플랫폼
주요 기능
논리적으로 data plane과 control plane으로 나뉨
마이크로서비스 사이의 네트워크 통신을 조정하고 제어
서비스 pod에 Envoy Proxy를 사이드카 형식으로 배포하고 서비스로 들어오고 나가는 트래픽을 통제
Knative는 Envoy를 감싸서 만들어 졌다.
Data plane에 배포된 Envoy를 컨트롤 하는 부분
Pilot, Mixer, Citadel로 구성
InferenceService는 2개의 endpoint를 가짐(Default, Canary)
Canary endpoint는 옵션
InferenceService의 핵심
단순히 모델이자 모델 서버
Model explanation을 제공
KFServing은 Alibi 같은 explainer를 제공
Prediction과 explanation 워크플로우 전에 pre and post processing 기능
Inference 서비스의 동시 요청수에 따른 서비스 scaling 기능
Kubernetes에서 지원(HPA)되는 기능 이외에 Knative(KPA)에서 지원되는 기능도 포함된다.
Knative에서는 대표적으로 gpu, concurrency 요청 기반으로 Autoscalin을 할 수 있다.
Pod당 동시 request의 평균을 1로 설정(default), 그 이상 들어오면 Pod를 늘림
ex) 5 concurrent requests, try to scaling up 5 Pods
"autoscaling.knative.dev/target" : target concurrency
KFserving 인터페이스를 상속받아 사용자 모델을 정의한 후 KFserving에 배포할 수 있다.
사용자가 커스텀하게 모델서빙을 하기 위해 사용한다.
모델 프레임워크와 KFServing 인터페이스 구현체를 모두 작성해서 Dockerfile로 생성해 배포한다.
추론에 대한 Request, response 로깅 제공
EFK(Elasticsearch - Fluent - Kibana) 구축해서 수집 가능