部署model on seldon(MinIO)

上一篇我们已使用notebook已经将训练好的model上传到MinIO储存空间, 本篇我们将使用seldon读取MinIO中的模型档以完成模型的部署

  • github下载yaml档
    • secret.yaml
    • seldon_deploy_xgb_cardio_minio.yaml

使用 seldon部署模型

  • 加入secret.yaml
    需要加入secret.yaml. 这个YAML档的目的是要设定MinIO的连线方式. 完整的文件说明可以参考这里, 在这个overview网页中说明串接各种储存空间的方式与参数

    apiVersion: v1
    kind: Secret
    metadata:
      name: seldon-init-container-secret
    type: Opaque
    stringData:
      RCLONE_CONFIG_S3_TYPE: s3
      RCLONE_CONFIG_S3_PROVIDER: minio
      RCLONE_CONFIG_S3_ENV_AUTH: "false"
      RCLONE_CONFIG_S3_ACCESS_KEY_ID: minioadmin
      RCLONE_CONFIG_S3_SECRET_ACCESS_KEY: minioadmin
      RCLONE_CONFIG_S3_ENDPOINT: http://172.20.3.42:9000
    

    然後执行yaml档

    kubectl apply -f secret.yaml
    
  • 修改seldon_deploy_xgb_cardio_minio.yaml
    只要修改 modelUri这一行就好了, 将uri指向MinIO的储存空间. 而s3://seldon-models/cardio这个空间我们已在上一篇将模型上传到这个路径.

    kind: SeldonDeployment
    metadata:
      name: xgboost-minio
    spec:
      name: cardio-xgb-minio
      predictors:
        - graph:
            children: []
            implementation: XGBOOST_SERVER
            modelUri: s3://seldon-models/cardio
            envSecretRefName: seldon-init-container-secret
            name: classifier
          name: default
          replicas: 1
    

    然後执行yaml档

    kubtctl apply -f seldon_deploy_xgb_cardio_minio.yaml
    

    这时可以看到下列pod与service都正常运作中(使用kubtctl get all).
    也可参考Day16的方式查看每一个pod的log以了解seldon为我们做了什麽.

    NAME                                                      READY   STATUS    RESTARTS   AGE
    pod/xgboost-minio-default-0-classifier-54dd7bf68d-77zd7   2/2     Running   0          18h
    
    NAME                                       TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGE
    service/xgboost-minio-default              ClusterIP   10.98.251.148   <none>        8000/TCP,5001/TCP   18h
    service/xgboost-minio-default-classifier   ClusterIP   10.106.70.78    <none>        9000/TCP,9500/TCP   18h
    

使用curl确认endpoint

我们仍然使用istio所提供的方式来存取endpoint. 关於endpoint如何组成, 请参考Day 15内容:

  • 取得istio ingress url
  • 取得网址规则(the path for predictions)

然後下这个指令:

curl -X POST -H 'Content-Type: application/json' -d '{"data": {"ndarray": [[80.1,2,168,92.3,150,100,1,1,1,0,1]]}}'  http://172.23.180.10:31655/seldon/default/xgboost-minio/api/v1.0/predictions

回传结果如下:

{"data":{"names":[],"ndarray":[0.8462969660758972]},"meta":{"requestPath":{"classifier":"seldonio/xgboostserver:1.10.0"}}}

推论的结果显示该员罹患心血管疾病的机率为84.6%

到这里我们完成了使用MinIO储存模型档案, 并且使用sledon读取model档进行部署, 这个方法是不是方便许多呢?(跟使用pvc方式比较). 这的确是一个比较好的整合方式.

参考资料

https://docs.seldon.io/projects/seldon-core/en/latest/servers/overview.html


<<:  [Lesson16] Data Binding

>>:  Angular 深入浅出三十天:表单与测试 Day16 - Template Driven Forms vs Reactive Forms

[NestJS 带你飞!] DAY02 - Hello NestJS

Nest 基本概念 Nest 采用模组化设计,将各个不同的功能区块打包成 模组 (Module),而...

[Day4]-基本串列(list)

串列基本定义 串列可以储存不同的资料型态,如:整数、字串、浮点数,基本格式如下: List = [...

Day14 突如其来的Minecraft

通常有玩过线上游戏的工程师都会有个小小的梦想,是自己能架个私服跟朋友们一起玩乐,前阵子因为疫情的缘故...

【C++】Encryption and Decryption

在学习Encryption 跟Decryption前~ ASCII电脑编码系统是必须要知道的。 AS...

Day 7 - 神奇的工具 Cloud-Init

ok... 我真的要爆肝了 QQ 那前几天安装好路由器,也把网路设定完成了。 我们今天要来安装虚拟机...