基于Kubernetes环境的高扩展机器学习部署利器——KServe( 三 )


4)为模型创建一个命名空间 。
kubectl create namespace kserve
5)克隆存储库 。
git clone git@github.com:kserve/kserve.git
6)将定制资源定义和运行时安装到集群中的模型命名空间中 。
cd kservehelm install kserve-crd charts/kserve-crd -n kservehelm install kserve-resources charts/kserve-resources -n kserve
我们现在已经在集群上安装了 。接下来 , 让我们开始部署吧!
三、第一个推理服务
为了确保部署顺利进行 , 让我们部署一个演示推理服务 。您可以在链接#1--a-处找到部署的完整源代码 。
kubectl apply -n kserve -f - <
上面的yaml资源定义部署了一个测试推理服务 , 该服务来源于使用学习库训练的公开可用模型 。支持许多不同风格的机器学习库() 。
其中包括、或模型;每次发布时都会添加更多的类似支持 。如果这些现成的库都不能满足您的要求 , 还支持自定义预测器() 。
注意 , 您可以通过获取命名空间中的可用pod数量来监控当前部署的状态 。
kubectl get pods -n kserve
如果在部署中遇到问题 , 请使用以下方法进行调试:
kubectl describe pod-n kserve
我们还可以通过以下方式检查推理服务部署的状态:
kubectl get isvc -A
如果推理服务被标记为true , 我们就可以执行我们的第一个预测了 。
四、执行预测
为了进行预测 , 我们需要确定我们的集群是否在支持外部负载均衡器的环境中运行 。
kubectl get svc istio-ingressgateway -n istio-system
1、Kind群集
值得注意的是 , 使用Kind部署的集群不支持外部负载均衡器;因此 , 您将拥有一个与下面类似的入口网关 。
Kind外部负载均衡器(图片由作者提供)
在这种情况下 , 我们必须转发istio- , 这将允许我们通过访问它 。
端口将istio-网关服务转发到本地主机上的端口8080 , 使用如下命令:
kubectl port-forward -n istio-system service/istio-ingressgateway 8080:80
然后设置入口主机和端口:
export INGRESS_HOST=localhostexport INGRESS_PORT=8080
2、集群
如果外部IP有效且未显示<> , 那么我们可以通过IP地址的互联网发送推理请求 。
入口网关IP地址(图片由作者提供)
将入口主机和端口设置为:
export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
3、进行推理
为推理请求准备一个输入请求json文件 。
cat <"./iris-input.json"{"instances": [[6.8,2.8,4.8,1.4],[6.0,3.4,4.5,1.6]]}EOF
然后用curl命令进行推理:
SERVICE_HOSTNAME=$(kubectl get inferenceservice sklearn-iris -n kserve -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
该请求将通过istio-网关发送到部署 。如果一切正常 , 我们将从推理服务中获得一个json回复 , 其中每个实例的预测值为[1 , 1] 。