Seldon Fields

JeongChaeJin·2022년 12월 1일
0

모두의 MLOps (Kubeflow)

목록 보기
19/21

How Seldon Core works

    1. initContainer는 모델 저장소에서 필요한 모델 다운로드
    1. 다운로드 받은 모델을 container로 전달
    1. container는 전달받은 모델을 감싼 API 서버 실행
    1. 생성된 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
    • 쿠버네티스 상 pod 이름
  • 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: []
  • 모델이 동작하는 순서를 정의한 필드
  • name
    • 모델 그래프의 이름
  • type
  • parameters
    • class init에서 사용되는 값들이다.
    class SKLearnServer(SeldonComponent):
      def __init__(self, model_uri: str = None, method: str = "predict_proba"):
  • children
    • 순서도 작성 시 사용
profile
OnePunchLotto

0개의 댓글