MLOps 파이프라인 구축

Stack 파일 살펴보기

forecast_mlops/forecast_mlops_stack.py 파일을 열어서 살펴봅니다.

mlops-stack

실습에 사용 될 MLOps 파이프라인 및 데이터가 저장 될 S3 bucket, 파이프라인을 트리거 할 Lambda 함수, 예측 데이터 쿼리를 위한 Athena 등의 서비스 리소스들이 정의되어 있습니다.

이와 같이 CDK를 사용하여 익숙한 프로그래밍 언어를 사용하여 손쉽게 AWS 서비스들을 정의할 수 있습니다.

실습에 사용되는 모든 Lambda 소스와 인프라 소스는 Python으로 개발,

Parameter 설정

testing-data/params.json 파일을 열어 봅니다.

파이프라인 및 Amazon Forecast에서 사용 될 여러가지 Parameter 값들을 정의 한 파일 입니다.

"AlgorithmArn": "arn:aws:forecast:::algorithm/Deep_AR_Plus", 를 지우고 "PerformAutoML": false 값을 true로 변경하면 Predictor 생성시 가장 최적의 성능을 내는 알고리즘을 자동으로 선택 합니다.

AutoML의 경우 수행하는데 많은 시간이 소요되므로 이번 실습에서는 설정값을 변경하지 않고 default로 DeepAR+ 알고리즘을 선택하여 Predictor를 생성할 것입니다.

{
  "DatasetGroup": {
    "DatasetGroupName":"ForecastDemoGroup",
    "Domain": "CUSTOM"
  },
  "Predictor": {
    "PredictorName": "ForecastDemoPredictor",
    "AlgorithmArn": "arn:aws:forecast:::algorithm/Deep_AR_Plus",
    "ForecastHorizon": 60, 
    "FeaturizationConfig":{
      "ForecastFrequency":"D" 
    },
    "PerformAutoML": false 
  },
  "Forecast": {
    "ForecastName": "ForecastDemo",
    "ForecastTypes":[
      "0.10", 
      "0.50", 
      "0.90"  
    ]
  },
  "TimestampFormat": "yyyy-MM-dd",
  "Datasets": [
    {
      "DatasetName": "ForecastDemoTargetTimeSeries",
      "Domain": "CUSTOM",
      "DatasetType": "TARGET_TIME_SERIES",
      "DataFrequency": "D", 
      "Schema": {
        "Attributes": [
          {
             "AttributeName":"timestamp",
             "AttributeType":"timestamp"
          },
          {
             "AttributeName":"item_id",
             "AttributeType":"string"
          },
          {
             "AttributeName":"target_value",
             "AttributeType":"float"
          }
        ]
      }
    }
  ],
  "PerformDelete": false
}

cdk.json 파일을 열어봅니다. email

my-address@email.com 값을 본인의 이메일로 변경 후 저장합니다.

파이프라인 동작 완료, 실패시 SNS 알람을 받을 이메일 주소 입니다.

CDK synth

다음 명령어로 샘플 CDK 코드가 정상적으로 빌드 되는지 확인 합니다.

cdk synth

정상적으로 빌드가 되면 cdk.out/forecast-mlops.template.json 파일이 생성된 것을 확인할 수 있습니다.

CDK app으로 정의된 리소스들이 CloudFormation 템플릿 형태로 합성되어 생성됩니다.

template

CloudFormation을 직접 작성했다면 약 1740 line 의 템플릿 코드를 작성해야 하지만 CDK를 이용하여 약 350 line의 Python 코드로 필요한 AWS 리소스 및 파이프 라인을 정의한 것을 확인할 수 있습니다.

이와 같은 리소스 정의의 간편함이 CDK의 큰 장점 중 하나 입니다.

배포하기

이제 CDK로 정의 된 리소스들을 배포합니다.

다음 명령어를 터미널 창에 입력하여 ForecastMlopsStack을 배포합니다.

cdk deploy

배포가 완료 되었으면 입력했던 email 주소로 AWS Notification - Subscription Confirmation 라는 제목으로 AWS SNS Topic에 대한 구독 메일이 수신 되었을 것 입니다.

해당 메일의 Confirm subscription 링크를 클릭하여 구독을 승인 합니다. Confirm subscription

CloudFormation Console로 이동하여 Stack이 잘 배포되었는지 확인합니다.

CloudFormation

파이프라인 parameter 및 데이터 업로드

Output 탭으로 이동하여 ForecastBucketName 값을 복사합니다.

Output

Cloud9 터미널 창에서 다음 명령어를 실행하여 params.json 파일을 ForecastBucket으로 복사합니다.

{ForecastBucketName}은 복사한 값으로 변경하여 실행합니다.

aws s3 cp testing-data/params.json s3://{ForecastBucketName}

다음 명령어를 실행하여 dummy e-commerce 판매량 시계열 데이터를 ForecastBucket에 업로드 합니다.

aws s3 sync testing-data/ s3://{ForecastBucketName}