上一篇我們已使用notebook已經將訓練好的model上傳到MinIO儲存空間, 本篇我們將使用seldon讀取MinIO中的模型檔以完成模型的部署
加入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
我們仍然使用istio所提供的方式來存取endpoint. 關於endpoint如何組成, 請參考Day 15內容:
然後下這個指令:
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