参考:
Home - KServe Documentation Website
简介
Kserve 提供一个Kubernetes 自定义资源定义(InferenceService),用于在任意框架上提供机器学习模型服务。它旨在通过为常见的ML框架(如:Tensorflow、XGBoost、Scikit-Learn、PyTorch和ONNX)提供高性能、高度抽象的接口来解决生产上的模型推理场景。
它封装了自动缩放、网络、健康检查和服务配置的复杂性,为 ML 部署带来了尖端的服务功能,如:GPU 自动缩放、归零缩放和金丝雀发布等。 它为 Production ML Serving 提供了一个简单、可插拔且完整的故事(story),包括预测、预处理、后处理和可解释性。
入门使用
1. 构建一个 InferenceService
kubectl create namespace kserve-test
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
2、检查 InferenceService 状态
# inferenceservices 可以简写成 isvc
kubectl get inferenceservices sklearn-iris -n kserve-test
3、集群内访问
# 检查SVC
k get svc -n kserve-test
# 发送测试实例
cat <<EOF > "./iris-input.json"
{
"instances": [
[6.8, 2.8, 4.8, 1.4],
[6.0, 3.4, 4.5, 1.6]
]
}
EOF
curl -v http://sklearn-iris.kserve-test.svc.cluster.local/v1/models/sklearn-iris:predict -d @./iris-input.json
4、集群外访问
Kserve默认使用LoadBalancer类型的 istio 网关进行AI推理服务的统一代理。如不具备使用LoadBanlancer 条件的,也可以将 "ingressgateway"的类型修改成NodePort。如下:
[root@node-1 working]# kubectl get svc istio-ingressgateway -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
istio-ingressgateway NodePort 10.96.232.11 <none> 15021:32395/TCP,80:31477/TCP,443:31675/TCP
查看并设置ingress的IP、端口,推理服务的名称,进行访问。
export INGRESS_HOST=$(kubectl get po -l istio=ingressgateway -n istio-system -o jsonpath='{.items[0].status.hostIP}')
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')
SERVICE_HOSTNAME=$(kubectl get inferenceservice sklearn-iris -n kserve-test -o jsonpath='{.status.url}' | cut -d "/" -f 3)
curl -v -H "Host: ${SERVICE_HOSTNAME}" http://${INGRESS_HOST}:${INGRESS_PORT}/v1/models/sklearn-iris:predict -d @./iris-input.json