文档: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, 便于用户可以快速部署常见的模型格式,而不必自己去定义运行时。
| Name | Supported Model Formats |
|---|---|
| kserve-lgbserver | LightGBM |
| kserve-mlserver | SKLearn, XGBoost, LightGBM, MLflow |
| kserve-paddleserver | Paddle |
| kserve-pmmlserver | PMML |
| kserve-sklearnserver | SKLearn |
| kserve-tensorflow-serving | TensorFlow |
| kserve-torchserve | PyTorch |
| kserve-tritonserver | TensorFlow, ONNX, PyTorch, TensorRT |
| kserve-xgbserver | XGBoost |
可以通过命令,查看:
kubectl get clusterservingruntimes
如果要自定义一个 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.name为sklearn的时候,触发隐式条件,KServe会自动选择相应的Serving Runtime。
兼容,文档中提到了。旧的结构同样被兼容,会被转换成新结构: