Seldon
Seldon Core / Seldon Enterprise Platform
Kubernetes 기반의 ML 모델 배포 및 서빙 플랫폼입니다. 모델 배포, A/B 테스트, 카나리 배포, 설명 가능성(Explainability), 드리프트 모니터링 등 MLOps 전체 라이프사이클을 지원합니다.
Seldon Core / Seldon Enterprise Platform
Kubernetes 기반의 ML 모델 배포 및 서빙 플랫폼입니다. 모델 배포, A/B 테스트, 카나리 배포, 설명 가능성(Explainability), 드리프트 모니터링 등 MLOps 전체 라이프사이클을 지원합니다.
Seldon은 Kubernetes 환경에서 머신러닝 모델을 프로덕션에 배포하고 관리하기 위한 오픈소스 플랫폼입니다. 2018년 설립된 영국 기업 Seldon Technologies가 개발했으며, 금융, 자동차, 보험 등 엔터프라이즈 환경에서 널리 사용됩니다. Seldon의 핵심 철학은 "모든 ML 프레임워크를 지원하는 표준화된 서빙 레이어"를 제공하는 것입니다.
Seldon의 제품군은 크게 세 가지로 구성됩니다. MLServer는 Apache 2.0 라이선스의 오픈소스 추론 서버로, REST/gRPC API를 통해 모델을 서빙합니다. Seldon Core는 Kubernetes CRD(Custom Resource Definition) 기반의 배포 프레임워크로, SeldonDeployment 리소스를 통해 복잡한 추론 그래프를 정의할 수 있습니다. Seldon Enterprise Platform은 GUI 기반 관리 도구, 고급 모니터링, 기술 지원을 포함한 상용 버전입니다.
Seldon Core의 핵심 기능은 추론 그래프(Inference Graph)입니다. 단일 모델 배포뿐 아니라, 여러 모델을 파이프라인으로 연결하거나(A→B→C), A/B 테스트, 카나리 배포, 앙상블, 라우터 등 복잡한 배포 패턴을 YAML 한 파일로 정의할 수 있습니다. 또한 Alibi Explain과 Alibi Detect를 통해 모델 설명 가능성(SHAP, Anchors 등)과 데이터 드리프트/이상치 탐지 기능을 기본 제공합니다.
2024년 1월부터 Seldon Core v1, v2, Alibi 프로젝트의 라이선스가 Apache 2.0에서 BSL 1.1(Business Source License)로 변경되었습니다. 이는 상업적 SaaS 제공 시 라이선스 구매가 필요함을 의미하지만, 자체 인프라 내 사용은 여전히 무료입니다. MLServer는 계속 Apache 2.0을 유지합니다. Seldon Core+는 테스트된 바이너리, SLA 지원, 전용 기술 지원을 제공하는 엔터프라이즈 버전입니다.
Seldon Core를 사용하여 scikit-learn 모델을 Kubernetes에 배포하는 예제입니다.
# 1. 모델 학습 및 저장 (model.py)
import joblib
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
# 모델 학습
iris = load_iris()
model = LogisticRegression(max_iter=200)
model.fit(iris.data, iris.target)
# 모델 저장
joblib.dump(model, "model.joblib")
# 2. Seldon 래퍼 클래스 작성 (MyModel.py)
import joblib
class MyModel:
def __init__(self):
self.model = joblib.load("model.joblib")
def predict(self, X, features_names=None):
"""
X: numpy array 형태의 입력 데이터
returns: 예측 결과
"""
return self.model.predict(X)
def predict_proba(self, X, features_names=None):
"""확률 예측 (선택적)"""
return self.model.predict_proba(X)
# 3. Dockerfile
"""
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY model.joblib .
COPY MyModel.py .
EXPOSE 9000
CMD ["seldon-core-microservice", "MyModel", "--service-type", "MODEL"]
"""
# 4. requirements.txt
"""
seldon-core
scikit-learn
joblib
"""
SeldonDeployment YAML 정의
# seldon-deployment.yaml
apiVersion: machinelearning.seldon.io/v1
kind: SeldonDeployment
metadata:
name: iris-model
namespace: seldon
spec:
predictors:
- name: default
replicas: 2
graph:
name: classifier
implementation: SKLEARN_SERVER
modelUri: gs://your-bucket/iris-model
# 또는 커스텀 이미지 사용:
# children: []
# implementation: null
# name: classifier
componentSpecs:
- spec:
containers:
- name: classifier
image: your-registry/iris-model:v1
resources:
requests:
memory: "256Mi"
cpu: "100m"
limits:
memory: "512Mi"
cpu: "500m"
traffic: 100
---
# A/B 테스트 예제
apiVersion: machinelearning.seldon.io/v1
kind: SeldonDeployment
metadata:
name: iris-ab-test
spec:
predictors:
- name: model-a
traffic: 80
graph:
name: classifier-a
implementation: SKLEARN_SERVER
modelUri: gs://bucket/model-v1
- name: model-b
traffic: 20
graph:
name: classifier-b
implementation: SKLEARN_SERVER
modelUri: gs://bucket/model-v2
배포 및 테스트
# Seldon Core 설치 (Helm)
helm repo add seldon https://storage.googleapis.com/seldon-charts
helm repo update
helm install seldon-core seldon-core-operator \
--namespace seldon-system \
--create-namespace \
--set usageMetrics.enabled=true
# 모델 배포
kubectl apply -f seldon-deployment.yaml
# 배포 상태 확인
kubectl get seldondeployments -n seldon
kubectl get pods -n seldon
# 추론 요청 (curl)
curl -X POST http://<INGRESS_IP>/seldon/seldon/iris-model/api/v1.0/predictions \
-H "Content-Type: application/json" \
-d '{"data": {"ndarray": [[5.1, 3.5, 1.4, 0.2]]}}'
# Python 클라이언트
import requests
import json
url = "http://<INGRESS_IP>/seldon/seldon/iris-model/api/v1.0/predictions"
payload = {"data": {"ndarray": [[5.1, 3.5, 1.4, 0.2], [6.2, 3.4, 5.4, 2.3]]}}
response = requests.post(url, json=payload)
print(json.dumps(response.json(), indent=2))
Seldon은 오픈소스와 엔터프라이즈 버전으로 제공됩니다.
| 제품 | 라이선스 | 가격 | 주요 기능 |
|---|---|---|---|
| MLServer | Apache 2.0 | 무료 | REST/gRPC 추론 서버, 다중 모델 지원 |
| Seldon Core | BSL 1.1 | 무료* | K8s 배포, 추론 그래프, A/B 테스트 |
| Seldon Core+ | Commercial | 커스텀 | 테스트된 바이너리, SLA 지원, 기술 지원 |
| Enterprise Platform | Commercial | 커스텀 | GUI 대시보드, 고급 모니터링, GenAI 지원 |
* 자체 인프라 내 사용 무료, 상업적 SaaS 제공 시 라이선스 필요
기능 비교
| 기능 | Core (오픈소스) | Core+ | Enterprise Platform |
|---|---|---|---|
| 모델 배포 | O | O | O |
| A/B 테스트, 카나리 | O | O | O |
| Alibi Explain/Detect | O (BSL) | O | O |
| Multi-Model Serving | O | O (최적화) | O (최적화) |
| GUI 대시보드 | X | X | O |
| GenAI/LLM 지원 | 제한적 | 애드온 | O |
| 기술 지원 | 커뮤니티 | SLA 포함 | 전담 팀 |
"새 모델 배포할 때 Seldon으로 카나리 배포하면 트래픽 10%만 먼저 테스트해볼 수 있어요. 문제 없으면 점진적으로 올리면 됩니다."
"모델 설명이 필요하면 Seldon에 Alibi Explain 붙여서 SHAP 값을 API로 제공할 수 있습니다. 추가 서버 구축 없이요."
"Seldon으로 모델 학습하면 됩니다." → Seldon은 서빙 플랫폼이지 학습 플랫폼이 아닙니다. 학습은 별도 환경에서 하고 Seldon으로 배포합니다.