이번 포스트에서는 Ambassador를 사용하는 Seldon Core를 설치하는 방법에 대해서 설명합니다.
Istio를 사용해 설치하려면 다음 글을 확인해 주세요.
Pre-requisites
이번 실습에서는 Local에서 Seldon Core를 설치후 사용해보기 위한 k8s Tool로 minikube를 사용합니다.
- Minikube
- Helm
- Ingress
- Istio
1. Minikube
사용한 minikube version은 다음과 같습니다.
|
|
minikube의 default config는 memory의 경우 2048mb 입니다.
이 경우 실습 중 메모리가 부족해서 OOM이슈가 생겨서 정상적으로 진행이 어려울 수 있습니다.
OOM을 방지하기 위해서 minikube의 메모리를 4096mb로 늘린 후 진행하도록 하겠습니다.
|
|
minikube를 실행합니다.
|
|
2. Helm
helm 공식 홈페이지의 방법을 따라 합니다. 이 때 설치해야 하는 버전은 3.x.x 입니다.
스크립트 방법을 이용해 설치하겠습니다.
|
|
3. Ambassador
helm chart를 이용해 설치합니다.
|
|
상태를 확인합니다.
|
|
다음과 같이 ambassador와 관련된 리소스들이 생성되었습니다.
|
|
Seldon-core
1. Install seldon-core
namespace 생성
1
kubectl create namespace seldon-system
helm chart 생성
1 2 3 4 5
helm install seldon-core seldon-core-operator \\ --repo <https://storage.googleapis.com/seldon-charts> \\ --set usageMetrics.enabled=true \\ --namespace seldon-system \\ --set istio.enabled=true
상태 확인
1
kubectl get po -n seldon-system
다음과 같이 출력됩니다.
1 2
NAME READY STATUS RESTARTS AGE seldon-controller-manager-559c567c9-pjtpl 1/1 Running 0 11s
2. Sample deploy
namespace 생성
1
kubectl create namespace seldon
pod 생성
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
kubectl apply -f - << END apiVersion: machinelearning.seldon.io/v1 kind: SeldonDeployment metadata: name: iris-model namespace: seldon spec: name: iris predictors: - graph: implementation: SKLEARN_SERVER modelUri: gs://seldon-models/sklearn/iris name: classifier name: default replicas: 1 END
pod 생성 확인
1
kubectl get all -n seldon
다음과 같이 출력됩니다.
1 2 3 4 5 6 7 8 9 10 11 12
NAME READY STATUS RESTARTS AGE pod/iris-model-default-0-classifier-546fb8bfff-cd5gm 2/2 Running 0 5m47s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/iris-model-default ClusterIP 10.98.254.42 <none> 8000/TCP,5001/TCP 71s service/iris-model-default-classifier ClusterIP 10.101.118.187 <none> 9000/TCP,9500/TCP 5m47s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/iris-model-default-0-classifier 1/1 1 1 5m47s NAME DESIRED CURRENT READY AGE replicaset.apps/iris-model-default-0-classifier-546fb8bfff 1 1 1 5m47s
minikube tunnel
1
minikube tunnel
다음과 같은 출력을 얻습니다.
1 2 3 4 5 6 7 8 9 10
Status: machine: minikube pid: 117019 route: 10.96.0.0/12 -> 192.168.49.2 minikube: Running services: [istio-ingressgateway] errors: minikube: no errors router: no errors loadbalancer emulator: no errors
ambassador external ip 확인하기
1
k get svc -n ambassador
1 2 3
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ambassador LoadBalancer 10.102.231.216 10.102.231.216 80:30904/TCP,443:32156/TCP 5m6s ambassador-admin ClusterIP 10.99.228.85 <none> 8877/TCP,8005/TCP 5m6s
→ 이 경우 10.102.231.216
predict 요청하기
1 2 3
curl -X POST <http://10.102.231.216/seldon/seldon/iris-model/api/v1.0/predictions> \\ -H 'Content-Type: application/json' \\ -d '{ "data": { "ndarray": [[1,2,3,4]] } }'
- predict 요청을 하는 format은 다음과 같습니다.
http://<AMBASSADOR_URL>/seldon/<NAMESPACE>/<MODEL-NAME>/api/v1.0/doc/
- predict 요청을 하는 format은 다음과 같습니다.
- 다음과 같은 결과를 얻을 수 있습니다.
1
{"data":{"names":["t:0","t:1","t:2"],"ndarray":[[0.0006985194531162841,0.003668039039435755,0.9956334415074478]]},"meta":{"requestPath":{"classifier":"seldonio/sklearnserver:1.7.0"}}}
Seldon-analytics
1. Install
helm chart를 이용해 설치합니다.
|
|
2.Usage
설치된 seldon-core-analytics port-forward 합니다.
|
|
http://localhost:3000 에 접속합니다.
- 기본 ID/PW는 다음과 같습니다.
- ID: admin
- PW: password
- dashboard에서 prediction analytics를 클릭합니다
- 다음과 같은 dashboard를 볼 수 있습니다.