3. Quick Start
SeldonDeployment 는 Seldon-Core 에서 정의한 Custom Resource 중 하나입니다.
간단하게 말하면 이미 학습이 완료된 model 을 로드해서 Serving 하는 Server 를 쿠버네티스에서는 SeldonDeployment 라고 부르고 관리할 수 있습니다.
Flask 를 사용하는 경우에 필요했던 작업인 API 를 정의하거나, IP, PORT 를 정의하거나, API 문서를 작성해야하는 작업부터, 쿠버네티스에 배포하기 위해 필요했던 docker build, push, pod yaml 작성 후 배포와 같은 작업을 할 필요 없이, trained model 파일이 저장된 경로만 전달하면 자동화된 것이라고 볼 수 있습니다.
Sample Seldon Deployment 를 생성해보고, 생성된 SeldonDeployment 서버가 제공하는 URI 로 http request 를 호출하
여 정상적으로 응답이 오는지 확인해보겠습니다.
1) Seldon Deployment 생성
Seldon Deployment 를 생성할 용도의 namespace 를 하나 생성합니다.
kubectl create namespace seldon
SeldonDeployment YAML 파일 생성
$vi sample.yaml
apiVersion: machinelearning.seldon.io/v1
kind: SeldonDeployment
metadata:
name: iris-model
namespace: seldon
spec:
name: iris
predictors:
- graph:
implementation: SKLEARN_SERVER # seldon core 에서 sklearn 용으로 pre-package 된
model server
modelUri: gs://seldon-models/v1.11.0-dev/sklearn/iris # seldon core 에서 제공
하는 open source model - iris data 를 classification 하는 모델이 저장된 위치 : google st
orage 에 이미 trained model 이 저장되어 있습니다.
name: classifier
name: default
replicas: 1 # 로드밸런싱을 위한 replica 개수 (replica 끼리는 자동으로 동일한 uri 공유)
$kubectl apply -f sample.yaml
minikube tunnel
새로운 터미널을 열어 minikube tunnel 을 수행합니다.
minikube tunnel 이 열려있으면 miniukbe cluster 내부와 통신할 수 있게 됩니다.
본 예제에서는 ambassador 와 같은 loadbalancer service 를 expose 하여 clusterIP 를 externalIP 처럼 사용하기 위한 용도로 활용합니다.
ambassador external IP 확인
$kubectl get service -n seldon-system
ambassador 의 EXTERNAL IP 확인
2) API 문서 확인
Seldon Deployment 를 생성하면 다음 주소에서 API Reference 를 확인할 수 있습니다.
http://<ingress_url>/seldon/<namespace>/<model-name>/api/v1.0/doc/
해당 문서에는 해당 SeldonDeployment 에서 지원하는 API 와 해당 API 의 사용 법에 대한 예시가 포함되어 있습니다.
3) Let's Send API Request
With curl
# curl -X POST http://<ingress>/seldon/seldon/iris-model/api/v1.0/predictions
curl -X POST http://10.100.33.197/seldon/seldon/iris-model/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.00366803903
943666,0.995633441507447]]},"meta":{"requestPath":{"classifier":"seldonio/sklearnserve
r:1.11.0"}}}
# multi-class classification 에서 type 2 일 확률이 가장 높다는 결과를 return 함을 확인
# 잘못된 data 형식으로 API 를 보내보겠습니다.
curl -X POST http://10.100.33.197/seldon/seldon/iris-model/api/v1.0/predictions \
-H 'Content-Type: application/json' \
-d '{ "data": { "ndarray": [[1,2,3,4,5]] } }'
# 다음과 같은 '에러' 메시지가 출력됩니다.
# {"status":{"code":-1,"info":"Unknown data type returned as payload (must be list or
np array):None","reason":"MICROSERVICE_BAD_DATA","status":1}}
With Python Client
# python 가상환경 활성화
$python -V
# pypi 패키지 설치
$pip install numpy,seldon-core
$vi test.py
import numpy as np
from seldon_core.seldon_client import SeldonClient
sc = SeldonClient(
gateway="ambassador",
transport="rest",
gateway_endpoint="10.100.33.197:80", # Make sure you use the port above
namespace="seldon",
)
client_prediction = sc.predict(
data=np.array([[1, 2, 3, 4]]),
deployment_name="iris-model",
names=["text"],
payload_type="ndarray",
)
print(client_prediction)
위의 python code 를 실행해보겠습니다.
$python test.py
다음과 같은 메시지가 출력됩니다.
_
Success:True message:
Request:
meta {
}
data {
names: "text"
ndarray {
values {
list_value {
values {
number_value: 1.0
}
values {
number_value: 2.0
}
values {
number_value: 3.0
}
values {
number_value: 4.0
}
}
}
}
}
Response:
{'data': {'names': [], 'ndarray': [2.0]}, 'meta': {'requestPath': {'classifie
r': 'seldonio/xgboostserver:1.11.0'}}}
#직장인인강 #직장인자기계발 #패스트캠퍼스후기#온라인패키지:머신러닝서비스구축을위한실전MLOps#머신러닝서비스구축을위한실전MLOps온라인패키지Online.
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'MLops' 카테고리의 다른 글
패스트캠퍼스 챌린지 27일차 (0) | 2022.02.19 |
---|---|
패스트캠퍼스 챌린지 26일차 (0) | 2022.02.18 |
패스트캠퍼스 챌린지 24일차 (0) | 2022.02.16 |
패스트캠퍼스 챌린지 23일차 (0) | 2022.02.15 |
패스트캠퍼스 챌린지 22일차 (0) | 2022.02.14 |