KServe初识

281 阅读2分钟

文档:kserve.github.io/website/0.1…;提供了控制层和数据层,你只需要准备好训练好的模型,剩下的交给Kserve。

从使用上有个大致理解

kubectl apply -n kserve-test -f - <<EOF
apiVersion: "serving.kserve.io/v1beta1"
kind: "InferenceService"
metadata:
  name: "sklearn-iris"
spec:
  predictor:
    sklearn:
      storageUri: "gs://kfserving-examples/models/sklearn/1.0/model"
EOF

这是一个CRD(旧版),便于我们理解。kubectl apply -n ... -f ...直接创建一个 CR。InferenceService用于声明式定义模型服务的部署配置,包括运行时选择、模型存储路径、资源限制等。

第 8 行,指明当前部署配置的是一个sklearn算法程序。

第 9 行,指明sklearn模型文件的位置。

这样,一个sklearn算法程序就部署完毕了。

Serving Runtimes

其中第7,8行 predictor.sklearn指的是Serving Runtimes,文档链接:Serving Runtimes - KServe Documentation Website

Serving Runtimes主要作用:指底层实际执行模型推理的运行时环境,例如Triton Inference Server、TensorFlow Serving、TorchServe等。这些运行时负责加载模型、处理请求并返回推理结果。

可以这样理解,我们基于Pytorch开发的模型,可以使用torchserve来做部署,而kserve提供了kserve-torchserve来作为底层实际执行模型推理的运行时环境。

官方给我们提供了几个开箱即用的 ClusterServingRuntimes, 便于用户可以快速部署常见的模型格式,而不必自己去定义运行时。

NameSupported Model Formats
kserve-lgbserverLightGBM
kserve-mlserverSKLearn, XGBoost, LightGBM, MLflow
kserve-paddleserverPaddle
kserve-pmmlserverPMML
kserve-sklearnserverSKLearn
kserve-tensorflow-servingTensorFlow
kserve-torchservePyTorch
kserve-tritonserverTensorFlow, ONNX, PyTorch, TensorRT
kserve-xgbserverXGBoost

可以通过命令,查看:

kubectl get clusterservingruntimes

image.png

如果要自定义一个 serving runtimes,则可以根据文档(上述链接)中给定的示例和属性,去自定义。

前面介绍了旧版本InferenceService,现在根据Serving Runtimes来看看新版本的结构:

apiVersion: serving.kserve.io/v1beta1
kind: InferenceService
metadata:
  name: example-sklearn-isvc
spec:
  predictor:
    model:
      modelFormat:
        name: sklearn
      storageUri: s3://bucket/sklearn/mnist.joblib
      runtime: kserve-mlserver

predictor.model.runtime,显示的指定使用kserve-mlserver

predictor.model.modelFormat.name,是kserve-mlserver,支持的模型格式

predictor.model.storageUri,是模型存储的位置

上面是显式的指定,也可以隐式,(例)在官方定义的 ClusterServingRuntime

apiVersion: serving.kserve.io/v1alpha1
kind: ClusterServingRuntime
metadata:
  name: kserve-sklearnserver
spec:
  supportedModelFormats:
    - name: sklearn
      version: "1"
      autoSelect: true
...

supportedModelFormats 列表的每个条目中,可以选择指定 autoSelect: true,以指示如果未明确指定运行时,则可以考虑将给定的 ServingRuntime 用于自动选择具有相应模型格式的预测变量。

对应开始的 Getting started 教程中

kubectl apply -n kserve-test -f - <<EOF
apiVersion: "serving.kserve.io/v1beta1"
kind: "InferenceService"
metadata:
  name: "sklearn-iris"
spec:
  predictor:
    model:
      modelFormat:
        name: sklearn
      storageUri: "gs://kfserving-examples/models/sklearn/1.0/model"
EOF

当指定了predictor.model.modelFormat.namesklearn的时候,触发隐式条件,KServe会自动选择相应的Serving Runtime。

兼容,文档中提到了。旧的结构同样被兼容,会被转换成新结构:

image.png