How Seldon Core works
- initContainer는 모델 저장소에서 필요한 모델 다운로드
- 다운로드 받은 모델을 container로 전달
- container는 전달받은 모델을 감싼 API 서버 실행
- 생성된 API 서버 주소로 API를 요청하여 모델의 추론값 받아본다.
Seldon Deployment Spec
apiVersion: machinelearning.seldon.io/v1
kind: SeldonDeployment
metadata:
name: seldon-example
namespace: kubeflow-user-example-com
spec:
name: model
predictors:
- name: model
componentSpecs:
- spec:
volumes:
- name: model-provision-location
emptyDir: {}
initContainers:
- name: model-initializer
image: gcr.io/kfserving/storage-initializer:v0.4.0
args:
- "gs://seldon-models/v1.12.0-dev/sklearn/iris"
- "/mnt/models"
volumeMounts:
- mountPath: /mnt/models
name: model-provision-location
containers:
- name: model
image: seldonio/sklearnserver:1.8.0-dev
volumeMounts:
- mountPath: /mnt/models
name: model-provision-location
readOnly: true
securityContext:
privileged: true
runAsUser: 0
runAsGroup: 0
graph:
name: model
type: MODEL
parameters:
- name: model_uri
type: STRING
value: "/mnt/models"
children: []
- Custom Resource인 Seldon Deployment를 정의하는 yaml 파일은 위와 같다.
- Seldon Deployment spec 중
name
, predictors
필드는 required field다.
- name은 pd을 구분하기 위한 이름으로 영향이 크지 않다.
- predictors는 한 개로 구성된 array로
name
, componentSepcs
, graph
가 정의되어야한다.
componentSpecs
componentSpecs
는 하나로 구성된 array로 spec
키 값이 정의되어야한다.
spec
에는 volumes
, initContainer
, containers
의 필드가 정의되어야한다.
volumes
volumes:
- name: model-provision-location
emptyDir: {}
- initContainer에서 다운로드 받는 모델을 저장하기 위한 공간을 의미
- array로 입력 받으며 구성요소는
name
, emptyDir
이다.
- 이 값들은 모델을 다운로드 받고, 옮길 때 한 번 사용되므로 크게 수정하지 않아도된다.
initContainer
- name: model-initializer
image: gcr.io/kfserving/storage-initializer:v0.4.0
args:
- "gs://seldon-models/v1.12.0-dev/sklearn/iris"
- "/mnt/models"
volumeMounts:
- mountPath: /mnt/models
name: model-provision-location
- API에서 사용할 모델을 다운로드 받는 역할
- 사용되는 필드들은 모델 Registry로 부터 데이터를 다운로드 받을 때 필요한 정보들을 정해준다.
- n개의 array로 구성되어 있으며 사용하는 모델마다 각각 지정해줘야한다.
name
- 쿠버네티스 상의 pod 이름
- 디버깅을 위해
{model_name}-initializer
로 사용 권장
image
- 모델을 다운로드 받기 위해 사용할 이미지 이름
gcr.io/kfserving/storage-initializer:v0.4.0
seldonio/rclone-storage-initializer:1.13.0-dev
- 위 두가지가 seldon core에서 권장하는 이미지다.
- Reference
- Reference2
args
gcr.io/kfserving/storage-initializer:v0.4.0
docker image 가 run될 때 입력 받는 argument를 입력
- array로 구성되며 첫 array 값은 다운로드 받을 모델의 주소
- 두 번째는 다운로드받은 모델을 저장할 주소
- seldon core에서는 주로
/mnt/models
에 저장한다.
volumeMounts
volumeMounts:
- mountPath: /mnt/models
name: model-provision-location
/mnt/models
를 쿠버네티스 상에서 공유할 수 있도록 볼륨을 붙여주는 필드
- Reference
container
containers:
- name: model
image: seldonio/sklearnserver:1.8.0-dev
volumeMounts:
- mountPath: /mnt/models
name: model-provision-location
readOnly: true
securityContext:
privileged: true
runAsUser: 0
runAsGroup: 0
- 실제로 모델이 API 형식으로 실행될 때의 설정을 정의하는 필드
name
image
- 모델을 API로 만들 때 사용할 이미지
- 이미지에는 모델이 로드될 때 필요한 패키지들이 모두 설치되어있어야한다.
seldonio/sklearnserver
seldonio/mlflowserver
seldonio/xgboostserver
seldonio/tfserving
- Seldon Core에서 지원하는 공식 이미지는 위와 같다.
volumenMounts
- initContainer에서 다운로드 받은 데이터가 있는 경로를 알려주는 필드이다.
- 모델이 수정되는 것을 방지하기 위해
readOnly: true
securityContext
- 필요한 패키지 설치 시 pod이 권한이 없어 패키지 설치를 수행하지 못할 수 있다.
- 이를 위해 root 권한 부여 (실제 서빙 시 보안 문제가 생길 수는 있다.)
graph
graph:
name: model
type: MODEL
parameters:
- name: model_uri
type: STRING
value: "/mnt/models"
children: []