跳过正文
  1. 云原生AI技术/

kserve安装使用

·1825 字·4 分钟·
Kubernetes Cloud Machinelearning Ai
古德
作者
古德
目录

注意
#

  • 需要注意的是kserve使用的模型下载链接storageUri: "http://172.16.2.132:9999/00000123.tar"对应的模型压缩包:应该是解压后模型及配置文件平铺开来的,而不是解压后还有一层目录包裹的
  • 同时对于storageUri: "http://172.16.2.132:9999/00000123"的模型链接,00000123里面的内容应该直接是模型及配置文件,而不应该再有深层次的目录

1. kserve-0.10.0版本安装
#

1.1 kserve与依赖版本对应
#

K8s v1.22.15
KServe v0.10.0
Cert-manager v1.11.0
Ingress-nginx与k8s版本对应关系 v1.3.0

1.2 部署ingress-nginx
#

采用RawDeployment模式,因此不需要按照官网要求安装Istio(Istio较重)

  • 通过管理Ingress,控制路由,因此部署 Ingress-Nginx 即可。
kubectl apply -f nginx-ingress-1.3.1.yml

1.3 部署CertManager
#

kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.11.0/cert-manager.yaml

1.4 部署Kserve
#

  • 需修改kserve.yaml中ingressClassName为创建的IngressClass(本例为nginx)
ingress: |-
{
    "ingressClassName" : "nginx",
}
# 下载
wget https://github.com/kserve/kserve/releases/download/v0.10.0/kserve.yaml

# 修改以后部署
kubectl apply -f kserve.yaml

# 下载
wget https://github.com/kserve/kserve/releases/download/v0.10.0/kserve-runtimes.yaml

kubectl apply -f kserve-runtimes.yaml
  • 修改inferenceservice-config部署模式为RawDeployment
kubectl patch configmap/inferenceservice-config -n kserve --type=strategic -p '{"data": {"deploy": "{\"defaultDeploymentMode\": \"RawDeployment\"}"}}'

1.5 测试
#

1.5.1 配置模型crd
#

apiVersion: "serving.kserve.io/v1beta1"
kind: "InferenceService"
metadata:
  name: "tensorflow-kserve"
spec:
  predictor:
    tensorflow:
      storageUri: "http://172.16.2.132:9999/00000123.tar"

1.5.2 使用ingress测试
#

  • INGRESS_HOST:10.96.1.200(Ingress-nginx地址)
  • MODEL_NAME:1.5.1定义的name
  • INPUT_PATH:模型入参
#!/bin/bash

# nginx ingress 的访问地址
INGRESS_HOST=10.96.1.200
INGRESS_PORT=80

MODEL_NAME=tensorflow-kserve
INPUT_PATH=@./input.json
SERVICE_HOSTNAME=$(kubectl get inferenceservice ${MODEL_NAME} -o jsonpath='{.status.url}' | cut -d "/" -f 3)

curl -H "Host: ${SERVICE_HOSTNAME}" http://${INGRESS_HOST}:${INGRESS_PORT}/v1/models/$MODEL_NAME:predict -d $INPUT_PATH
  • input.json
{
"instances":[1,2,3]
}
  • 结果如下
    image.png

2. kserve-0.13.0版本安装
#

2.1 kserve与依赖版本对应
#

K8s v1.29.7
KServe v0.13.0
Cert-manager v1.15.3
Ingress-nginx与k8s版本对应关系 v1.11.2

2.2 部署ingress-nginx
#

采用RawDeployment模式,因此不需要按照官网要求安装Istio(Istio较重)

  • 通过管理Ingress,控制路由,因此部署 Ingress-Nginx 即可。
  • 本版本ingress-nginx采用helm安装
wget https://github.com/kubernetes/ingress-nginx/releases/download/helm-chart-4.11.2/ingress-nginx-4.11.2.tgz

tar -zxf ingress-nginx-4.11.2.tgz

helm install ingress-nginx ./ingress-nginx --namespace ingress-nginx --create-namespace
  • 安装成功信息
(base) [root@node77 ingress-nginx]# kubectl get service --namespace ingress-nginx ingress-nginx-controller --output wide --watch
NAME                       TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)                      AGE   SELECTOR
ingress-nginx-controller   LoadBalancer   10.96.1.190   <pending>     80:32702/TCP,443:32064/TCP   37s   app.kubernetes.io/component=controller,app.kubernetes.io/instance=ingress-nginx,app.kubernetes.io/name=ingress-nginx

2.3 部署 CertManager
#

kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.15.3/cert-manager.yaml

2.4 部署Kserve
#

  • 需修改kserve.yaml中ingressClassName为创建的IngressClass(本例为nginx)
ingress: |-
{
    "ingressClassName" : "nginx",
}
  • 需要注意的是在kserve v0.13.0版本中kserve-runtimes.yaml组件改名为kserve-cluster-resources.yaml
# 下载
wget https://github.com/kserve/kserve/releases/download/v0.13.0/kserve.yaml

# 修改以后部署
kubectl apply -f kserve.yaml

# 下载
wget https://github.com/kserve/kserve/releases/download/v0.13.0/kserve-cluster-resources.yaml

kubectl apply -f kserve-cluster-resources.yaml
  • 修改inferenceservice-config部署模式为RawDeployment
kubectl patch configmap/inferenceservice-config -n kserve --type=strategic -p '{"data": {"deploy": "{\"defaultDeploymentMode\": \"RawDeployment\"}"}}'

2.5 测试
#

2.5.1 配置模型crd
#

  • 创建namespace
kubectl create namespace test
  • demo-tensorflow.yaml
    • 注意:在kserve v0.13.0版本中,模型发布需要发布在非default命名空间或是kserve具有权限的命名空间中,否则模型对应Pod会报错No such file or directory: '/mnt/models',初步怀疑跟2.3部署的CertManager配置有关系,暂未深究
    • 注意:kserve创建的模型发布不能发布在kserve命名空间以及没有权限的命名空间中,否则模型对应Pod会报错No such file or directory: '/mnt/models',这是kserve的webhook检查导致的,具体可以参考这个issue
    • name:tensorflow-kserve
    • storageUri:http://172.16.2.132:9999/00000123.tar(采用文件服务器形式提供模型文件tar包或zip包,服务会自动解压)
    • 模型下载链接,tags2 4
apiVersion: "serving.kserve.io/v1beta1"
kind: "InferenceService"
metadata:
  name: "tensorflow-kserve"
  namespace: "test"
spec:
  predictor:
    tensorflow:
      storageUri: "http://172.16.2.132:9999/00000123.tar"

2.5.2 使用ingress测试
#

  • INGRESS_HOST:10.96.0.158(Ingress-nginx地址)
  • MODEL_NAME:2.5.1定义的name
  • INPUT_PATH:模型入参
#!/bin/bash

# nginx ingress 的访问地址
INGRESS_HOST=10.96.0.158
INGRESS_PORT=80

MODEL_NAME=tensorflow-kserve
INPUT_PATH=@./input.json
SERVICE_HOSTNAME=$(kubectl -n test get inferenceservice ${MODEL_NAME} -o jsonpath='{.status.url}' | cut -d "/" -f 3)

curl -H "Host: ${SERVICE_HOSTNAME}" http://${INGRESS_HOST}:${INGRESS_PORT}/v1/models/$MODEL_NAME:predict -d $INPUT_PATH
  • input.json
{
"instances":[1,2,3]
}
  • 结果如下
    image.png

相关文章

Harbor镜像仓库迁移
·205 字·1 分钟
Kubernetes Harbor Backup Image
kubernetes问题解决集合
·990 字·2 分钟
Kubernetes Solve Containerd Question
k8s资源删除报Terminating卡住
·190 字·1 分钟
Kubernetes Terminating Crd Namespace
Windows通过KTConnect连接服务器K8S集群
·768 字·2 分钟
Kubernetes Ktconnect Windows Proxy
【Kubernetes知识】OwnerReference和Finalizers
·1336 字·3 分钟
Kubernetes Pod Spec
PVC误删除后恢复操作
·275 字·1 分钟
Kubernetes Pvc Volume