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