Seldon Core:Kubernetes 上的 MLOps 服务

FreeGuideOnline 最新 2026-06-14

模型服务框架 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 的架构包含四个关键组件:

  1. Seldon Controller:集群内的控制器,监听 SeldonDeployment CRD,自动创建对应的 Service、Deployment 和 VirtualService。
  2. Service Orchestrator:每个模型 Pod 内的协调器,负责加载模型元数据,决定执行图(Graph)或简单模型。
  3. 预测器(Predictor):实际的模型推理逻辑,可以是预制服务器(如 TensorFlow Serving)或自定义代码。
  4. 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 参考。