Overview
- SeldonDeployment를 통한 API Deployment
- SeldonDeployment는 쿠버네티스 모델을 REST/gRPC 서버의 형태로 배포하여 정의된 CRD(Custom Resource Definition)이다.
Prerequisites
kubectl create namespace seldon-deploy
kubectl config set-context --current --namespace=seldon-deploy
- seldon-deploy를 현 namespace로 설정
Spec
cat <<EOF > iris-sdep.yaml
apiVersion: machinelearning.seldon.io/v1alpha2
kind: SeldonDeployment
metadata:
name: sklearn
namespace: seldon-deploy
spec:
name: iris
predictors:
- graph:
children: []
implementation: SKLEARN_SERVER
modelUri: gs://seldon-models/v1.12.0-dev/sklearn/iris
name: classifier
name: default
replicas: 1
EOF
apiVersion: machinelearning.seldon.io/v1alpha2
kind: SeldonDeployment
metadata:
name: sklearn
namespace: seldon-deploy
spec:
name: iris
predictors:
- graph:
children: []
implementation: SKLEARN_SERVER
modelUri: gs://seldon-models/v1.12.0-dev/sklearn/iris
name: classifier
name: default
replicas: 1
- 공개된 iris model을 사용한 것이며 sklearn 프레임워크를 통해 학습되어
implementation: SKLEARN_SERVER
으로 설정
kubectl apply -f iris-sdep.yaml
kubectl get pods --selector seldon-app=sklearn-default -n seldon-deploy
Ingress URL
- 배포된 모델에 추론 요청 보내서 추론 결괏값을 받아온다.
- 배포된 API의 규칙
http://{NODE_IP}:{NODE_PORT}/seldon/{namespace}/{seldon-deployment-name}/api/v1.0/{method-name}/
NODE_IP / NODE_PORT
- Seldon Core 설치 시 Ambassador를 Ingress Controller로 설정했으므로 SeldonDeployment로 생성된 API 서버는 모두 Ambassador의 Ingress gateway를 통해 요청할 수 있다.
export NODE_IP=$(kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }')
export NODE_PORT=$(kubectl get service ambassador -n seldon-system -o jsonpath="{.spec.ports[0].nodePort}")
- 먼저, Ambassador Ingress Gateway's url을 환경 변수로 설정한다.
echo "NODE_IP"=$NODE_IP
echo "NODE_PORT"=$NODE_PORT
NODE_IP=172.16.100.135
NODE_PORT=31770
- Cloud를 이용하면 internal ip 주소가 설정된다.
namespace / seldon-deployment-name
metadata:
name: sklearn
namespace: seldon-deploy
- 배포된 namespace, seldon-deployment-name을 의미
- Spec 정의 시 metadata에 정의된 값을 사용
- namespace : seldon-deploy, seldon-deployment-name : sklearn
method-name
- SeldonDeployment에서 주로 사용하는 model-name은 2가지가 있다.
User Swagger
- doc method 사용하는 방법 먼저
- doc method 사용 시 seldonㅇ서 생성한 swagger에 접속 가능
http://172.16.100.135:31770/seldon/seldon-deploy/sklearn/api/v1.0/doc/
- predictions의
Try it out
버튼 클릭
- request body에 data 입력 후
Execute
버튼 클릭
Using CLI
curl -X POST http://$NODE_IP:$NODE_PORT/seldon/seldon-deploy/sklearn/api/v1.0/predictions \
-H 'Content-Type: application/json' \
-d '{ "data": { "ndarray": [[1,2,3,4]] } }'
{"data":{"names":["t:0","t:1","t:2"],"ndarray":[[0.0006985194531162835,0.00366803903943666,0.995633441507447]]},"meta":{"requestPath":{"classifier":"seldonio/sklearnserver:1.11.2"}}}
안녕하세요 mlops 분야를 공부하고 있던 와중에 seldoncore와 ambassador, kubernetes의 버전 문제가 해결이 안되어 seldoncore로 serving test에 몇일을 다시해봤는데도 해결 못했었습니다. 올려주신 포스트 덕분에 해결하게 되었습니다. 좋은 정보 감사합니다. ㅜㅡㅜ