SKLearn 服务

如果你有已经训练好的保存为 pickle 的 SKLearn 模型,你可以非常简洁的使用 Seldon’s prepackaged SKLearn server 进行发布。

要求

Seldon 预期模型使用 joblib 方式保存,并且命名未 model.joblib。 注意,这是 SKLearn 项目 推荐的序列化模型方法

请注意,当我们使用 joblib,在推理服务中,训练模型和框架版本的匹配非常重要。

在最新的 SKLearn 预封装服务中,预期的版本如下:

Package

Version

scikit-learn

0.24.2

要检测 Seldon Core 的版本兼容性,请常看兼容列表.

使用方法

要使用 pre-packaged SKLearn server,需要在模型的配置文件中将 implementation 声明为 SKLEARN_SERVER。 例如,针对保存的 Iris 预估模型,可以这样配置:

apiVersion: machinelearning.seldon.io/v1alpha2
kind: SeldonDeployment
metadata:
  name: sklearn
spec:
  name: iris
  predictors:
  - graph:
      children: []
      implementation: SKLEARN_SERVER
      modelUri: gs://seldon-models/v1.10.0-dev/sklearn/iris
      name: classifier
    name: default
    replicas: 1

可通过 可工作 notebook 进行尝试。

Sklearn 预估方法

默认情况下,服务会在加载的 model/pipeline 调用 predict_proba。 要想调用 predict 需设置参数 methodpredict。 例如:

apiVersion: machinelearning.seldon.io/v1alpha2
kind: SeldonDeployment
metadata:
  name: sklearn
spec:
  name: iris-predict
  predictors:
  - graph:
      children: []
      implementation: SKLEARN_SERVER
      modelUri: gs://seldon-models/v1.10.0-dev/sklearn/iris
      name: classifier
      parameters:
        - name: method
          type: STRING
          value: predict
    name: default
    replicas: 1

method 可选参数值为:predict, predict_proba, decision_function

V2 KFServing 协议 [孵化中]

Warning

V2 KFServing 协议支持被考虑在孵化特性中。 这意味着 Seldon Core 的某些特性仍未得到支持(比如:tracing, graphs等)。

MLFlow 服务也可用于暴露兼容 V2 KFServing 协议的 API。 注意,某些情况下,这会使用到 Seldon MLServer 运行时。

为了支持 V2 KFServing 协议,设置SeldonDeploymentprotocol 使用 kfserving,示例如下:

apiVersion: machinelearning.seldon.io/v1alpha2
kind: SeldonDeployment
metadata:
  name: sklearn
spec:
  name: iris-predict
  protocol: kfserving # Activate the V2 protocol
  predictors:
  - graph:
      children: []
      implementation: SKLEARN_SERVER
      modelUri: gs://seldon-models/v1.10.0-dev/sklearn/iris
      name: classifier
      parameters:
        - name: method
          type: STRING
          value: predict
    name: default

可通过相似的 已工作 notebook尝试。

版本兼容

SKLearn 使用的预编译包以来安装的 Seldon Core 版本。 特别的,

Seldon Version

SKLearn Version

>=1.3

0.23.2

<1.3 (latest 1.2.3)

0.20.3

注意,使用不同的版本训练和推会带来不可预期的问题。

使用老版本

若要使用老版本的 SKLearn inference server,可通过覆盖 componentSpecs 设置。 比如,使用 1.2.3 版本可以按照如下配置:

apiVersion: machinelearning.seldon.io/v1alpha2
kind: SeldonDeployment
metadata:
  name: sklearn
spec:
  name: iris
  predictors:
  - componentSpecs:
    - spec:
       containers:
       - name: classifier
         image: seldonio/sklearnserver_rest:1.2.3
    graph:
      children: []
      implementation: SKLEARN_SERVER
      modelUri: gs://seldon-models/v1.10.0-dev/sklearn/iris
      name: classifier
    name: default
    replicas: 1
    svcOrchSpec:
      env:
      - name: SELDON_LOG_LEVEL
        value: DEBUG

使用不同版本的 SKLearn

如果需要使用未被支持的 SKLearn 版本,可以通过扩展现有的 SKLearn server 来创建你自己的服务。 特别的,可通过代码目录的 ``servers/sklearnserver` <https://github.com/SeldonIO/seldon-core/tree/master/servers/sklearnserver>`__来创建自己的镜像。 此镜像用于 SKLEARN_SERVER 实现,可通过覆盖 componentSpecs 自定义。

注意,也可通过修改全局配置``seldon-config` configmap <custom.md>`__ 来指定使用SKLearn server。 这个修改将影响集群中所有的 SeldonDeploymentsSKLEARN_SERVER 实现。 比如,下面的 configmap 配置:

SKLEARN_SERVER:
  grpc:
    defaultImageVersion: "1.2.3"
    image: seldonio/sklearnserver_grpc
  rest:
    defaultImageVersion: "1.2.3"
    image: seldonio/sklearnserver_rest