KFServing – Canary Rollout

KFServing은 카나리아 롤아웃 기능을 제공하고 있습니다.

Canary Rollout 은 새로운 버전의 모델을 배포할 때, 소규모의 사용자들에게만 먼저 제공함으로써 위험을 빠르게 감지할 수 있는 배포 전략입니다. Canary Rollout 의 장점은 문제 발생 시 언제든지 안전하게 롤백할 수 있고, 이를 바탕으로 운영 환경에서 신규 버전을 테스트할 수 있다는 것이다. 부하를 서서히 증가시키면서 신규 버전이 운영 환경에서 어떤 반응을 보이는지 모니터링하고 수치를 측정하는 것도 가능합니다. 성능 테스트가 실제 운영 환경에서 이루어지기 때문에, 완전히 분리된 다른 성능 테스트 환경을 만들 필요가 없습니다.

먼저 Tensorflow를 사용하는 InferenceService 를 생성합니다. 자세한 내용은 “KFServing InferenceService 배포와 예측 – Tensorflow“를 참고하시기 바랍니다.

InferenceService 를 정의합니다.

tensorflow.yaml

apiVersion: "serving.kubeflow.org/v1alpha2"
kind: "InferenceService"
metadata:
  name: "tensorflow-mnist"
spec:
  default:
    predictor:
      tensorflow:
        storageUri: "pvc://kfserving-models-pvc/models/tensorflow/mnist/"

InferenceService 를 생성합니다.

다음은 admin 네임스페이스 InferenceService 를 생성하는 예제입니다.

kubectl apply -f tensorflow-canary.yaml 

다음은 InferenceService를 조회하는 명령어입니다.

kubectl -n admin get inferenceservice

InferenceService가 생성되었고, DEFAULT TRAFFIC이 100인 것을 확인할 수 있습니다.

NAME                     URL                                                                                READY   DEFAULT TRAFFIC   CANARY TRAFFIC   AGE
tensorflow-mnist         <http://tensorflow-mnist.admin.example.com/v1/models/tensorflow-mnist>               True    100                                10m

카나리아 롤아웃을 적용하기 위해, InferenceService 를 수정합니다. canaryTrafficPercent 필드를 이용하여 카라니아로 트래픽의 10%를 보냅니다. 그리고 canary 필드에 사용할 predictor 를 정의합니다.

tensorflow-canary.yaml

apiVersion: "serving.kubeflow.org/v1alpha2"
kind: "InferenceService"
metadata:
  name: "tensorflow-mnist"
spec:
  default:
    predictor:
      tensorflow:
        storageUri: "pvc://kfserving-models-pvc/models/tensorflow/mnist/"
  canaryTrafficPercent: 10
  canary:
    predictor:
      tensorflow:
        storageUri: "pvc://kfserving-models-pvc/models/tensorflow/mnist/"

수정한 InferenceService 를 적용합니다.

kubectl -n admin apply -f tensorflow-canary.yaml 

트래픽 분할 백분율이 올바르게 적용 되었는지 확인하려면 다음 명령을 사용하십시오.

kubectl -n admin get inferenceservice

DEFAULT TRAFFIC이 90, CANARY TRAFFIC 이 10으로 변경 된 것을 확인할 수 있습니다.

NAME                     URL                                                                                READY   DEFAULT TRAFFIC   CANARY TRAFFIC   AGE
tensorflow-mnist         <http://tensorflow-mnist.admin.example.com/v1/models/tensorflow-mnist>               True    90                10               17m

Knative CLI (kn) 를 사용하여, 다음 명령어를 실행하면 라우트를 조회 할 수 있습니다.

kn -n admin route list

정상적으로 실행되면, 다음과 같은 응답 결과를 얻을 수 있습니다.

NAME                                 URL                                                           READY
tensorflow-mnist-predictor-canary    <http://tensorflow-mnist-predictor-canary.admin.example.com>    True
tensorflow-mnist-predictor-default   <http://tensorflow-mnist-predictor-default.admin.example.com>   True

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다