Deploy Seldon Deployment

JeongChaeJin·2022년 12월 1일
0

모두의 MLOps (Kubeflow)

목록 보기
17/21

Overview

  • SeldonDeployment를 통한 API Deployment
  • SeldonDeployment는 쿠버네티스 모델을 REST/gRPC 서버의 형태로 배포하여 정의된 CRD(Custom Resource Definition)이다.

Prerequisites

kubectl create namespace seldon-deploy
  • 새로운 namespace 생성
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
  • Shell에서 실행
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
  • 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가지가 있다.
      1. doc
      1. predictions

User Swagger

  • doc method 사용하는 방법 먼저
  • doc method 사용 시 seldonㅇ서 생성한 swagger에 접속 가능
http://172.16.100.135:31770/seldon/seldon-deploy/sklearn/api/v1.0/doc/
  • Swagger 접속

  • 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"}}}
  • 응답 결과
profile
OnePunchLotto

1개의 댓글

comment-user-thumbnail
2024년 1월 16일

안녕하세요 mlops 분야를 공부하고 있던 와중에 seldoncore와 ambassador, kubernetes의 버전 문제가 해결이 안되어 seldoncore로 serving test에 몇일을 다시해봤는데도 해결 못했었습니다. 올려주신 포스트 덕분에 해결하게 되었습니다. 좋은 정보 감사합니다. ㅜㅡㅜ

답글 달기