Seldon Core:Kubernetes 上的 MLOps 服务
模型服务框架 Seldon Core 完整教程
为什么选择 Seldon Core?Kubernetes 上的 MLOps 终极服务引擎
在现代机器学习工作流中,将训练好的模型从实验环境转化到生产端点,是令无数团队头痛的“最后一公里”。Seldon Core 正是为简化这一跃迁而生的开源框架。它原生运行在 Kubernetes 之上,通过声明式 API 将模型打包成可扩展的微服务,瞬间支持 REST 和 gRPC 接口,并内置金丝雀部署、A/B 测试、解释性监控等企业级 MLOps 能力。
本教程将带你从零掌握 Seldon Core,无论你是数据科学家、ML 工程师还是 DevOps,都能找到直接可用的实战技能。所有示例均基于最新稳定版,确保内容可复现。
Seldon Core 核心特性一览
- Kubernetes 原生:通过自定义资源定义(CRD)
SeldonDeployment描述模型,与现有 K8s 生态无缝集成。 - 多框架兼容:支持 TensorFlow、PyTorch、scikit-learn、XGBoost、MLflow、Hugging Face 等,无需修改代码即可转换为生产服务。
- 高级流量管理:自带金丝雀、A/B 测试、多臂强盗等策略,与 Istio/Ambassador 智能集成。
- 模型解释与监控:开箱即用的模型解释器(Alibi Explain),结合 Prometheus 指标和请求日志。
- Pipeline 抽象:轻松串联预处理、模型、后处理,构成推理图。
Seldon Core 架构概览
Seldon Core 的架构包含四个关键组件:
- Seldon Controller:集群内的控制器,监听
SeldonDeploymentCRD,自动创建对应的 Service、Deployment 和 VirtualService。 - Service Orchestrator:每个模型 Pod 内的协调器,负责加载模型元数据,决定执行图(Graph)或简单模型。
- 预测器(Predictor):实际的模型推理逻辑,可以是预制服务器(如 TensorFlow Serving)或自定义代码。
- Transformers 与 Explainer:可选的前置/后置数据处理转换器和模型解释器,作为推理图的节点。
安装 Seldon Core
在已有 Kubernetes 集群(推荐 v1.20+)中执行:
# 安装 Seldon Core Operator(使用 Helm)
helm repo add seldon-charts https://seldonio.github.io/helm-charts
helm repo update
kubectl create namespace seldon-system
helm install seldon-core seldon-charts/seldon-core \
--namespace seldon-system \
--set ambassador.enabled=true # 启用 Ambassador API 网关
等待所有 Pod 就绪:
kubectl get pods -n seldon-system
同时安装 Python SDK:
pip install seldon-core
快速入门:部署你人生的第一个 Seldon 模型
我们将部署一个简单的 Iris 分类模型(scikit-learn),展示从模型工件到可调用 API 的全流程。
第1步:准备模型并保存
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
import joblib
X, y = load_iris(return_X_y=True)
clf = RandomForestClassifier()
clf.fit(X, y)
joblib.dump(clf, 'model.joblib')
第2步:编写 Seldon 组件
创建 MyModel.py,实现 predict 方法:
import joblib
import numpy as np
class MyModel:
def __init__(self):
self.model = joblib.load('model.joblib')
def predict(self, X, features_names=None, meta=None):
prediction = self.model.predict(X)
return prediction
第3步:构建并推送 Docker 镜像(或使用预置镜像)
FROM seldonio/seldon-core-s2i-python3:1.14.0
COPY model.joblib /microservice/model.joblib
COPY MyModel.py /microservice/MyModel.py
构建并推送至镜像仓库(替换为你的仓库):
docker build -t your-registry/iris-model:0.1 .
docker push your-registry/iris-model:0.1
第4步:创建 SeldonDeployment
apiVersion: machinelearning.seldon.io/v1
kind: SeldonDeployment
metadata:
name: iris-classifier
spec:
predictors:
- name: default
graph:
name: classifier
implementation: MY_MODEL
modelUri: your-registry/iris-model:0.1
replicas: 1
应用配置:
kubectl apply -f iris-deployment.yaml
第5步:测试端点
通过 Ambassador 网关访问:
curl -X POST http://<ambassador-endpoint>/seldon/default/iris-classifier/api/v1.0/predictions \
-H 'Content-Type: application/json' \
-d '{"data":{"ndarray":[[5.1, 3.5, 1.4, 0.2]]}}'
返回类似:
{"data":{"ndarray":[0]},"meta":{}}
恭喜!你刚刚在 Kubernetes 上实现了一个生产级模型服务。
高级部署策略
金丝雀部署与 A/B 测试
只需在 SeldonDeployment 中添加多个 predictors 并配置流量权重:
spec:
predictors:
- name: v1
replicas: 1
traffic: 80
graph:
name: classifier-v1
modelUri: your-registry/iris-model:0.1
- name: v2
replicas: 1
traffic: 20
graph:
name: classifier-v2
modelUri: your-registry/iris-model:0.2
Seldon 会基于权重将 80% 流量路由给 v1,20% 给 v2,轻松验证新模型版本。
多臂强盗(Multi-Armed Bandit)
对于自适应流量分配,Seldon 内置了 Epsilon-Greedy 算法,只需在 spec 中指定:
spec:
engine:
type: MLP
epsilon: 0.2
系统会自动根据每个预测器的反馈(reward)动态调整流量。
推理图(Inference Graph)
将预处理、模型、后处理串联为 graph:
graph:
name: preprocess
children:
- name: model
type: MODEL
modelUri: ...
children:
- name: postprocess
每个节点可以是 Transformer 或 Router,实现复杂管道。
模型监控与可解释性
启用指标
Seldon 默认暴露 Prometheus 端点,自动收集请求延迟、错误率等。可进一步集成 Grafana 仪表板。
添加解释器
graph:
name: mymodel
modelUri: ...
explainer:
type: AnchorTabular
modelUri: your-registry/explainer-image
请求时传入 ?explain 参数或专用端点,即可得到模型解释结果。
与 MLflow、Kubeflow 集成
- MLflow:直接将 MLflow 打包的模型注册为 Seldon 服务:
seldon model infer --mlflow-uri http://mlflow-server --model-name mymodel --stage Production - Kubeflow:Seldon 是 Kubeflow 的默认服务引擎,在 Kubeflow Pipelines 中可一键部署。
生产环境最佳实践
- 资源限制:为每个 Predictor 设置 CPU/内存 request 和 limit。
- 自动伸缩:结合 HPA(水平自动伸缩)根据 QPS 动态调整副本数。
- TLS 终结:在 Ingress/Ambassador 层配置 SSL,保护模型端点。
- 请求日志与告警:使用 Fluentd 收集日志,设置 PrometheusRule 在延迟升高时告警。
常见问题排查
- Pod 无法启动:检查模型镜像路径和
modelUri是否正确拉取。 - 路由不通:确认 Ambassador 或 Istio 网关已正确安装,且
SeldonDeployment状态为Available。 - Python 模型加载错误:确保 Python 类实现了
predict方法,且依赖已打包。
总结
Seldon Core 将 Kubernetes 的强大编排能力与 MLOps 诉求深度融合,让模型服务从“临时脚本”进化到“企业级基础设施”。通过本教程,你已经学会了安装、部署、高级流量管理和监控的核心技能。下一步,建议探索自定义转换器、反馈循环以及与特征存储的集成,构建更完善的推理链条。
继续学习:官方文档提供更多范式(如 TensorFlow Serving、Java 模型等),以及详细的 API 参考。