WiseN

[Reinvent2019] 관리형 ML 모니터링 서비스 - Sagemaker Model Monitor 소개

Dec 19, 2019   |   AWS

작성자_임성균

페이스북 공유하기 트위터 공유하기
Blog thumbnail

들어가며



안녕하십니까. GS네오텍 임성균입니다.

AWS 리인벤트 ML 분야에 나온 내용을 글로 정리하면서, 어떻게 하면 독자분들이 더 정확한 방식으로 업데이트를 이해할 수 있을지 고민하고 있습니다. 이때 만약 제가 쓴 글에 어긋난 내용이 있거나 맞춤법이 틀렸을때, 바로바로 해당 문제를 리포팅해주는 기능이 있다면 글쓴이에게 엄청난 도움이 될 수 있겠죠.

이러한 기능이 ML 개발을 하면서 AWS Sagemaker에 있다면 관심이 가지 않나요?

그럼 제가 직접(?) 모니터링 서비스가 되어 설명해보도록 하겠습니다. 그럼~~시작합니다!

 


Amazon Sagemaker Model Monitor은 왜 나왔을까?


혹시 "ML(Machine Learning)은 데이터가 매우 중요하고, 데이터 내부에는 반드시 오류가 있으면 안 돼!"라며 일일이 수정하신 적이 있으신가요? 데이터의 품질은 아무리 신경을 쓰더라도 문제가 발생하는 경우 더러 있습니다. 왜냐하면, 데이터베이스 중 하나에서 예기치 않는 NULL 값이나 복잡한 문자 인코딩 때문에 장애를 한번 쯤은 경험해보셨을 거라 생각됩니다.

또 이런 경험은 있으신가요? 내가 실험용 데이터 세트는 완벽하게 Training을 했지만, 모델이 처리할 실제 데이터에 대해서는 정확도를 장담할 수 없을 것 같습니다. 물론 실제 데이터는 정리되지 않은 상태일 것입니다.

하지만 더 걱정되는 문제는 "데이터 드리프트 "현상이 일어났을 때입니다. 데이터 드리프트란 모델의 성능 저하를 초래하는 입력 데이터의 변경내용입니다. 예를 들어 계절로 변화하는 평균 온도와 같이 데이터의 자연 드리프트 혹은 손상된 센서와 같은 데이터 품질 문제는 항상 0을 읽는 드리프트 등을 말합니다. 혹시 입력기능이 바뀌거나 심지어 누락되어 대출 관련 애플리케이션이 더 높은 금액을 예측한다고 상상하면 엄청 끔찍할 것입니다.

이러한 상황을 감지하는 것은 매우 어렵습니다. 실제 데이터를 캡처하여 Training 데이터와 비교하기 위해 온갖 통계적인 분석을 수행해야 합니다. 또한, 드리프트를 감지하는 규칙을 정의하고 드리프트가 실제로 발생했을 때 경보도 전송해야 합니다. 심지어 여기서 끝난 게 아니라 모델을 업데이트할 때마다 이 과정을 처음부터 다시 반복해야 합니다.

물론 ML 전문가는 복잡한 도구를 빌드하여 결과를 만들어 낼 수 있지만, 이는 엄청난 시간과 리소스를 대가로 얻어낼 수 있는 결과물이기도 합니다. Amazon Sagemaker Model Monitor는 이러한 엄청난 시간과 리소스를 줄이는 것을 목표로 만들어졌습니다.



Amazon Sagemaker Model Monitor 소개


Amazon Sagemaker Model Monitor은 Sagemaker 엔드포인트에서 시작합니다. 엔드포인트는 기존 엔드포인트이거나 모니터링용으로 만든 새엔드포인트 일 수 있습니다.

 

Sagemaker SDK를 사용하여 엔드포인트로 전송된 데이터의 구성 가능한 일부를 캡처하고(원하는 경우 예측도 캡처 가능) Amazon Simple Storage Service(S3)로 저장할 수 있습니다. 캡처된 데이터에는 콘텐츠 유형, 타임스탬프 등 Metadata가 추가되어 다른 S3 객체와 마찬가지로 액세스 할 수 있습니다.

그런 다음 엔드포인트에 배포된 모델을 학습시키는 데 사용된 데이터세트를 기준선으로 생성합니다. 이렇게 하면 Amazon Sagemaker Processing 작업이 실행되고 Sagemaker Model Monitor가 다음을 수행합니다.

 

  • 각 기능에 대한 유형 및 완전성 정보와 같이 입력 데이터에 대해 스키마를 추론 
  • 사전 빌드된 컨테이너의 경우에만 Deequ를 사용하여 기능 통계를 계산 

 

** 용어정리: Deequ는 Amazon에서 개발하여 사용 중인 Apach Spark 기반의 오픈 소스 도구입니다. 이러한 통계에는 데이터 스트림에서 정확한 분위수(자료의 크기 순서에 따른 위치 값)를 계산하는 고급 기술인 KLL sktchess가 포함된 기술입니다.

이러한 아티팩트를 사용하여 다음 단계에서는 Sagemaker Model Monitor가 수집된 데이터와 예측 품질을 검사할 수 있게 모니터링 일정을 다시 시작해야 합니다. 기본 제공 컨테이너 또는 사용자 지정 컨테이너를 사용하는지에 관계없이 몇 가지 기본 제공 규칙이 적용되고 Amazon S3로 보고서가 정기적으로 업로드됩니다. 보고서에는 가장 최근 기간 도안 수신된 데이터에 대한 통계 및 스키마 정보뿐만 아니라 감지된 모든 위반 사항이 포함됩니다.

마지막으로 Sagemaker Model Monitor는 기능별 메트릭을 대시보드와 경보를 설정하는 데 사용할 수 있는 Amazon Cloudwatch로 보냅니다. Cloudwatch에 있는 요약 메트릭은 Sagemaker Studio에서도 볼 수 있습니다.

자 이제 Demo를 통해 확인해보시면 좋을 것 같습니다.

Github - awslabs / amazon-sagemaker-examples

 

Amazon Sagemaker Model Monitor 데모


전체적인 Demo WorkLoad는 세가지입니다.

1. Amazon Sagemaker에서 ML 모델을 호스팅하고 추론 요청, 결과 및 메타 데이터를 캡처합니다.

2. Training Dataset을 분석하여 기준선 제약 조건을 생성합니다.

3. 제약조건에 대한 위반이 있는지 라이브 엔드포인트 모니터링을 합니다.

 

▨ Configuration

1. 모델을 호스팅 할 AWS Region을 지정해야 합니다.

2. Amazon Sagemaker에 Amazon Simple Storage Service(Amazon S3)의 데이터에 대한 액세스 권한을 부여하는 데 사용되는 IAM 역할 ARN을 설정합니다.

3. 모델 학습에 사용된 데이터, 추가 모델 데이터 및 모델 호출에서 캡처된 데이터를 저장하는데 사용되는 S3 버킷을 만듭니다. 데모 목적으로 동일한 버킷을 사용하고 있습니다. 실제로는 다른 보안 정책으로 분리할 수 있습니다.

 

▨ Demo

먼저, Configuration에서 언급했던 S3의 설정 및 Capture 업로드에 대한 코드입니다.

 

WorkLoad의 첫번째!! Amazon Sagemaker 엔드포인트에 실시간 추론 데이터 캡처부분입니다. 사전 Training된 XGBoost 모델을 Amazon S3에 업로드하는 코드입니다. 이 모델은 Sagemaker의 XGB Churn Prediection Notebook을 사용하여 학습되었습니다.

 

이 단계에서 사전 훈련된 모델을 사용할 수도 있습니다. S3에 사전 Training된 모델이 있는 경우 s3_key를 지정하여 대신 모델을 추가할 수 있습니다.

 

모델 데이터 품질을 모니터링 하기 위해 데이터 캡처를 사용하려면 DataCaptureConfig라는 새 캡처 옵션을 지정합니다. 이 구성으로 Request payload, Response payload 또는 모두를 캡처 할 수 있습니다. 캡처 구성은 모든 변경사항에 대해 적용됩니다. 그럼 배포를 진행합니다.

배치된 모델을 호출합니다. 이제 이 엔드포인트로 데이터를 보내서 실시간으로 추론할 수 있습니다. 이전 단계에서 데이터 캡처를 활성화 했으므로 Request payload, Response payload는 일부 추가 메타 데이터와 함께 DataCaptureConfig에서 지정한 Amazon Simple Storage​ Service(Amazon S3) 위치에 저장됩니다. 

이 단계는 약 2분 동안 샘플 데이터가 포함된 엔드포인트를 호출합니다. 지정된 샘플링 백분율을 기준으로 데이터가 캡처되고 데이터 캡처 옵션이 해제 될 때까지 캡처가 계속됩니다.

 

이제 캡처한 데이터를 봐야겠죠? 다음 코드를 통해 저장된 데이터 캡처 파일을 나열하도록 하겠습니다. 호출이 발생한 시간을 기준으로 구성된 다른 기간의 다른 파일을 볼 수 있어야 합니다. S3 경로의 형식은 다음과 같습니다.

"s3 : // {destination-bucket-prefix} / {endpoint-name} / {variant-name} /yyyy/mm/dd/hh/filename.json"​

 

그런 다음 단일 캡처 파일의 내용을 보는 코드입니다. 여기에는 Amazon Sagemaker 특정 JSON 라인 형식 파일에서 캡처된 모든 데이터가 표시됩니다. 캡처한 파일의 2000까지의 내용입니다. 잘 보이시나요?

 

보다시피, 각 추론 요청은 jsonl 파일에서 한 줄로 캡처됩니다. 이 줄에는 입력과 출력이 함께 병합되어 있습니다. 이 예에서는 ContentType을 text / csv로 제공했으며 관찰 된 ContentType 값에 반영됩니다. 또한 입력 및 출력 페이로드를 인코딩하는 데 사용한 인코딩을 인코딩 값으로 캡처 형식으로 노출합니다. 지금까지 요약하면, 새로운 매개 변수를 사용하여 입력 또는 출력 페이로드를 엔드 포인트에 캡처하는 방법을 관찰했습니다.

이제 두번째!! Baseling과 Continuous monitoring 단계입니다. 이 단계를 진행하기 위해서 실시간 트래픽을 비교할 기준을 만듭니다. 기준이 준비되면 일정을 지속적으로 평가하고 기준과 비교합니다. 여기서 기준선 / 훈련 데이터 세트를 사용한 구속 조건 제안 모델을 학습한 교육 데이터 집합은 일반적으로 좋은 기준 데이터 집합입니다.

 

이제 Training 데이터가 준비되었으므로 제약조건 Sugget 작업을 시작합니다. DefaultModelMonitor.suggest_baseline (..)은 Amazon SageMaker 제공 모델 모니터 컨테이너를 사용하여 제약 조건을 생성하는 ProcessingJob을 시작합니다.​

 

생성된 제한 조건 및 통계 탐색입니다.

 

다음은 데이터 품질 문데에 대한 수집된 데이터 분석입니다. 데이터를 수집한 후 모니터링 스케줄을 사용하여 데이터를 분석하고 모니터링합니다. 먼저 스케쥴 생성과 이전에 작성된 엔드 포인트에 대한 모델 모니터링 스케줄을 작성할 수 있습니다. 기본 리소스 (제약 및 통계)를 사용하여 실시간 트래픽과 비교하도록 합니다.

 

인공 트래픽 생성 시작합니다. 아래의 셀은 일부 트래픽을 엔드 포인트로 보내는 스레드를 시작합니다. 이 스레드를 종료하려면 커널을 중지해야합니다. 트래픽이 없으면 처리 할 데이터가 없으므로 모니터링 작업이 실패로 표시됩니다.

 

이제 스케쥴 목록을 실행해보도록 하겠습니다. 스케줄은 이전에 지정된 간격으로 작업을 시작합니다. 여기에 최신 5 개의 실행이 나열됩니다. 시간별 일정을 만든 후이 작업을 시작하면 실행이 비어있을 수 있습니다. 실행이 시작되는 시간 경계 (UTC)를 넘어갈 때까지 기다려야 할 수도 있습니다. 아래 코드에는 대기 로직이 있습니다.

참고 : 시간별 일정이더라도 Amazon Sagemaker는 20 분의 버퍼링 기간으로 실행을 예약합니다. 시 경계에서 0 분에서 20 분 사이에 실행이 시작되는 것을 볼 수 있습니다. 이는 백엔드에서로드 밸런싱을 위해 예상되고 수행됩니다.

 

특정 실행 검사(최신 실행)합니다. 이전 셀에서 가장 최근에 완료되었거나 실패한 예약 된 실행을 선택했습니다. 가능한 터미널 상태와 각각의 의미는 다음과 같습니다.

 

  • Completed - 모니터링 실행이 완료되었으며 위반 보고서에 문제가 없음을 의미합니다.
  • CompletedWithViolations - 실행이 완료되었지만 제약 조건 위반이 감지되었음을 나타냅니다.
  • ​Faile - 클라이언트 오류 (잘못된 역할 우선 순위) 또는 인프라 문제로 인해 모니터링 실행이 실패했습니다. 정확히 무슨 일이 있었는지 확인하려면 FailureReason 및 ExitMessage에 대한 추가 검사가 필요합니다.
  • ​Stopped - 작업이 최대 런타임을 초과했거나 수동으로 중지되었습니다.

 

 

실행 결과 화면입니다.

 

결과된 특징을 보면 Contraing_check_type과 Desciption, feature_name이 적혀 있습니다. ML을 개발하시며 이러한 알람이 이루어진다면 무슨 문제가 발생했는지 금방 알 수 있을 것 같습니다. Demo는 여기까지 입니다

 


마치며


Monitor 서비스를 사용하면 설정 하나만으로 이 기능을 쉽게 사용할 수 있는 장점이 있습니다. ML 모델의 품질이 과연 좋을까에 대한 문제점을 빠르게 파악할 수 있을 뿐더러 Provisioning 할 수 있게 대시보드와 경보를 모니터링 할수 있다니!! ML을 다루는 입장에서는 이런 기능을 보게되면 한층 더 쉽게 ML 알고리즘에 집중 할 수 있지 않을까 생각됩니다.

Amazon Sagemaker를 사용할 수 있는 모든 상용 리전에서 지금 바로 Amazon Sagemaker Model Monitor 서비스를 사용할 수 있습니다. 이 기능은 Amazon의 ML 프로젝트 워크벤치인 Amazon Sagemaker Studio에도 통합되어 있습니다. 마지막으로, 모든 정보는 Jupyter Notebook에서 보고 추가적으로 분석할 수 있습니다.

오늘의 포스팅은 여기까지 입니다. 추운 겨울 감기조심하시기 바랍니다. 읽어주셔서 감사합니다. 끝!!

 

참고:

Amazon Sagemaker Model Monitor - 기계 학습 모델을 위한 완전 관리형 자동 모니터링 기능 출시

https://aws.amazon.com/ko/blogs/korea/amazon-sagemaker-model-monitor-fully-managed-automatic-monitoring-for-your-machine-learning-models/