KServe(原KFServing)是云原生环境的一个模型服务器和推理引擎,具备自动缩放、零缩放和金丝雀部署等能力。通过ASM集成KServe,开发人员可以在云原生应用程序中快速部署和管理机器学习模型的推理服务,减少手动配置和维护的工作量,提高开发效率。
前提条件
- 已添加集群到ASM实例,且ASM实例版本为1.17.2.7及以上。 
- 已在ACK集群中部署Knative组件,并开启Knative on ASM功能 。具体操作,请参见使用Knative on ASM部署Serverless应用的步骤一。 
KServe介绍
KServe作为模型服务器,为大规模服务机器学习和深度学习模型提供了基础。KServe可以部署为传统的Kubernetes Deployment方式,也可以部署为支持归零的Serverless方式,提供基于流量的自动扩缩功能以及模型的蓝绿和金丝雀部署等。更多信息,请参见KServe。

步骤一:安装KServe组件
- 登录ASM控制台,在左侧导航栏,选择。 
- 在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择。 
- 在KServe on ASM页面,单击开启KServe on ASM。 - KServe依赖于CertManager,安装KServe会自动安装CertManager组件。如需使用自建CertManager,请关闭在集群中自动安装CertManager组件。 
步骤二:获取ASM网关地址
- 登录ASM控制台,在左侧导航栏,选择。 
- 在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择。 
- 在入口网关页面,查看并记录目标网关的服务地址。 
步骤三:创建推理服务
本文使用scikit-learn的训练模型进行测试。
- 使用kubectl连接到数据面集群,执行以下命令,创建用于部署KServe资源的命名空间。 - kubectl create namespace kserve-test
- 创建InferenceService。 - 使用以下内容,创建isvc.yaml文件。 - 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"
- 执行以下命令,在kserve-test命名空间中创建InferenceService。 - kubectl apply -f isvc.yaml -n kserve-test
 
- 执行以下命令,查询InferenceService sklearn-iris的安装状态。 - kubectl get inferenceservices sklearn-iris -n kserve-test- 预期输出: - NAME URL READY PREV LATEST PREVROLLEDOUTREVISION LATESTREADYREVISION AGE sklearn-iris http://sklearn-iris.kserve-test.example.com True 100 sklearn-iris-predictor-00001 3h26m- READY为- True,表明InferenceService sklearn-iris安装成功。
- 可选:查看虚拟服务和网关规则。 - InferenceService sklearn-iris安装成功后,会自动创建对应模型配置的虚拟服务和网关规则。您可以执行以下步骤进行查看。 - 登录ASM控制台,在左侧导航栏,选择。 
- 在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择。 
- 在虚拟服务页面上方,单击命名空间右侧的  图标,选择命名空间为kserve-test,查看新建的虚拟服务。 图标,选择命名空间为kserve-test,查看新建的虚拟服务。
- 在左侧导航栏,选择。 
- 在网关规则页面上方,选择命名空间为knative-serving,查看新建的网关规则。 
 
步骤四:访问模型服务
下文以Linux和Mac环境为例进行说明。
- 执行以下命令,创建模型输入文件。 - cat <<EOF > "./iris-input.json" { "instances": [ [6.8, 2.8, 4.8, 1.4], [6.0, 3.4, 4.5, 1.6] ] } EOF
- 通过ASM网关进行访问测试。 - 执行以下命令,获取SERVICE_HOSTNAME。 - SERVICE_HOSTNAME=$(kubectl get inferenceservice sklearn-iris -n kserve-test -o jsonpath='{.status.url}' | cut -d "/" -f 3) echo $SERVICE_HOSTNAME- 预期输出: - sklearn-iris.kserve-test.example.com
- 执行以下命令,使用步骤二获取的ASM网关地址,访问模型服务。 - ASM_GATEWAY="XXXX" # 请将XXXX替换为ASM网关地址。 curl -H "Host: ${SERVICE_HOSTNAME}" http://${ASM_GATEWAY}:80/v1/models/sklearn-iris:predict -d @./iris-input.json- 预期输出: - {"predictions": [1, 1]}
 
- 对模型服务进行性能测试。 - 执行以下命令,部署测试端的应用进行压测。 - kubectl create -f https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/kserve/v0.7/loadtest.yaml
- 执行以下命令,查看Pod名称。 - kubectl get pod- 预期输出: - NAME READY STATUS RESTARTS AGE load-testxhwtq-pj9fq 0/1 Completed 0 3m24s sklearn-iris-predictor-00001-deployment-857f9bb56c-vg8tf 2/2 Running 0 51m
- 执行以下命令,查看测试的日志结果。 - kubectl logs load-testxhwtq-pj9fq # 请替换Pod名称为实际的测试应用Pod名称。- 预期输出: - Requests [total, rate, throughput] 30000, 500.02, 500.01 Duration [total, attack, wait] 59.999s, 59.998s, 1.352ms Latencies [min, mean, 50, 90, 95, 99, max] 1.196ms, 1.463ms, 1.378ms, 1.588ms, 1.746ms, 2.99ms, 18.873ms Bytes In [total, mean] 690000, 23.00 Bytes Out [total, mean] 2460000, 82.00 Success [ratio] 100.00% Status Codes [code:count] 200:30000 Error Set:
 
相关文档
- 如果您需要加速云原生环境中数据密集型应用(例如大数据应用、AI应用等)的模型加载过程,请参见ASM结合KServe与Fluid实现数据加速访问的AI Serving。 
- 如果您需要将原始输入数据转换为模型服务器所需的格式,请参见使用InferenceService部署Transformer服务。 
- 如果您部署的模型服务涉及大容量、高密度和频繁变化的用例,可以使用模型服务网格对多个模型服务进行管理、部署和调度。具体操作,请参见模型服务网格。