KServe Inference Batcher는 여러 개의 개별 예측 요청을 하나의 배치로 묶어 처리함으로써 전체적인 처리량을 증가시키는 기능이다.
주요 특징
- 구현 위치: KServe 모델 에이전트 사이드카
- 주입 메커니즘: 웹훅을 통한 InferenceService 파드에 주입
- 내부 통신: Go 채널을 사용한 데이터 전송
- 프로토콜 지원: KServe v1 HTTP 프로토콜 (gRPC 미지원)
작동 방식
- 예측 요청이 모델 에이전트 사이드카에 도착
- Batcher가 요청을 모아 배치 생성
- 배치 완성 시 예측기 컨테이너로 추론 요청 전송
배치 트리거
- maxBatchSize: 최소 배치 크기. HTTP 요청의 수가 아닌 배치에 포함된 데이터 인스턴스의 수를 의미한다. 최소한 maxBatchSize 만큼의 데이터 인스턴스가 입력되어야 추론 요청을 전달한다.
- maxLatency: 최대 대기 시간 (ms)
maxBatchSize 만큼의 데이터 인스턴스가 충족되면, 추론 컨테이너로 요청이 전송되고, maxBatchSize가 요구를 충족시키지 못한 상태로 maxLatency가 초과하면 추론 컨테이너로 요청이 전송된다.
maxBatchSize가 `32` 일 때 20 + 32의 요청이 오면 52개의 데이터 인스턴스는 하나의 batch로 처리된다.
Batcher 사용 예시
InferenceService YAML 파일에서 `batcher` 섹션을 추가하여 구성할 수 있다.
maxBatchSize는 32로 maxBatchSize는 10초로 설정했다.
apiVersion: "serving.kserve.io/v1beta1"
kind: "InferenceService"
metadata:
name: "batcher"
spec:
predictor:
serviceAccountName: s3-sa
batcher:
maxBatchSize: 32
maxLatency: 10000
model:
modelFormat:
name: sklearn
protocolVersion: v1
storageUri: "s3://sandbox/iris_svm/v1/"
추론 요청을 보낸다. maxBatchSize보다 작은 데이터 인스턴스를 사용했기에 10초 후 추론 결과가 출력된다.
import requests
import json
import numpy as np
from sklearn import datasets
from pprint import pprint
# Iris 데이터셋 로드
iris = datasets.load_iris()
input_data = iris.data[:3]
# KServe 요청 형식에 맞게 데이터 구성 (단일 텐서로)
v1_data = dict(instances = input_data.tolist())
v2_data = {
"inputs": [
{
"name": "input-0",
"shape": list(input_data.shape),
"datatype": "FP64",
"data": input_data.tolist()
}
]
}
# KServe 엔드포인트 URL
url = "http://batcher.kubeflow-user-example-com.10.0.2.6.sslip.io/v1/models/batcher:predict"
# 요청 보내기
resp = requests.post(url, data=json.dumps(v1_data))
pprint(resp.json())
결과 예시
동일한 batch에서 처리된 결과들은 동일한 batchId를 가진다.
{'batchId': '3bc87547-c1bc-4315-8eb0-1b0b9c04af5a',
'message': '',
'predictions': [0, 0, 0]}
'kubenetes' 카테고리의 다른 글
JuiceFS CSI driver를 이용해 MinIO와 HDFS를 Kubernetes와 연동하기 (1) | 2024.10.11 |
---|---|
KServe Autoscaler KPA와 HPA 비교 (0) | 2024.10.11 |
KServe Autoscaling & Zero Scale (0) | 2024.10.09 |
KServe v2 프로토콜: 모델 메타데이터 (2) | 2024.10.01 |
KServe Custom Predictor 이미지 빌드 가이드 - v2 protocol (1) | 2024.10.01 |
댓글