3부 - 단순화된 MLOps 파이프라인(CI/CT/CD) 구축
이 문서에서는 AWS 서비스를 사용하여 MLOps 파이프라인을 구축하는 방법에 대한 가이드를 제공하며, 자동화된 모델 재교육, 배포 및 비용 최적화에 중점을 둡니다.
소개
이 튜토리얼에서는 다양한 AWS 서비스를 활용하여 CI(지속적 통합), CT(지속적 학습), CD(지속적 배포)를 포함하는 간단한 MLOps 파이프라인을 구성하는 방법을 알아봅니다. 기존 DevOps 파이프라인과 달리 MLOps는 운영 주기를 완료하기 위해 추가적인 고려 사항이 필요합니다. 이 튜토리얼을 따라하면 CT를 MLOps 루프에 통합하여 모델의 지속적인 학습과 추론을 위한 원활한 배포에 대한 통찰력을 얻을 수 있습니다. 이 튜토리얼에서는 AWS 서비스를 활용하여 엔드투엔드 MLOps 파이프라인을 구축하는 과정을 안내합니다.
명백한
기능성 | 이름 | 논평 |
---|---|---|
데이터 저장 |
AWS FSx ONTAP |
"1부 - Amazon FSx for NetApp ONTAP (FSx ONTAP)을 AWS SageMaker에 개인 S3 버킷으로 통합" . |
데이터 과학 IDE |
AWS 세이지메이커 |
이 튜토리얼은 Jupyter notebook을 기반으로 합니다."2부 - SageMaker에서 모델 학습을 위한 데이터 소스로 Amazon FSx for NetApp ONTAP (FSx ONTAP) 활용" . |
MLOps 파이프라인을 트리거하는 기능 |
AWS 람다 함수 |
- |
Cron 작업 트리거 |
AWS 이벤트브리지 |
- |
딥러닝 프레임워크 |
파이토치 |
- |
AWS 파이썬 SDK |
boto3 |
- |
프로그래밍 언어 |
파이썬 |
v3.10 |
필수 조건
-
사전 구성된 FSx ONTAP 파일 시스템. 이 튜토리얼에서는 FSx ONTAP 에 저장된 데이터를 활용하여 학습 과정을 진행합니다.
-
위에 언급된 FSx ONTAP 파일 시스템과 동일한 VPC를 공유하도록 구성된 SageMaker Notebook 인스턴스.
-
AWS Lambda 함수*를 트리거하기 전에 *SageMaker Notebook 인스턴스*가 *중지 상태인지 확인하세요.
-
ml.g4dn.xlarge 인스턴스 유형은 딥 신경망의 계산에 필요한 GPU 가속을 활용하는 데 필요합니다.
아키텍처
이 MLOps 파이프라인은 Cron 작업을 활용하여 서버리스 함수를 트리거하고, 이를 통해 라이프사이클 콜백 함수에 등록된 AWS 서비스를 실행하는 실용적인 구현입니다. AWS EventBridge*는 cron 작업 역할을 합니다. 주기적으로 모델을 재교육하고 재배포하는 AWS Lambda 함수를 호출합니다. 이 프로세스에는 필요한 작업을 수행하기 위해 *AWS SageMaker Notebook 인스턴스를 시작하는 작업이 포함됩니다.
단계별 구성
수명 주기 구성
AWS SageMaker Notebook 인스턴스에 대한 수명 주기 콜백 함수를 구성하려면 수명 주기 구성*을 활용합니다. 이 서비스를 사용하면 노트북 인스턴스를 시작할 때 수행해야 하는 필요한 작업을 정의할 수 있습니다. 구체적으로, 훈련 및 배포 프로세스가 완료되면 노트북 인스턴스를 자동으로 종료하기 위해 *라이프사이클 구성 내에 셸 스크립트를 구현할 수 있습니다. MLOps에서 비용은 주요 고려 사항 중 하나이므로 이는 필수 구성입니다.
*라이프사이클 구성*에 대한 구성은 미리 설정해야 한다는 점에 유의하세요. 따라서 다른 MLOps 파이프라인 설정을 진행하기 전에 이 측면의 구성을 우선시하는 것이 좋습니다.
-
라이프사이클 구성을 설정하려면 Sagemaker 패널을 열고 관리자 구성 섹션 아래의 *라이프사이클 구성*으로 이동합니다.
-
노트북 인스턴스 탭을 선택하고 구성 생성 버튼을 클릭합니다.
-
아래 코드를 입력란에 붙여넣으세요.
#!/bin/bash set -e sudo -u ec2-user -i <<'EOF' # 1. Retraining and redeploying the model NOTEBOOK_FILE=/home/ec2-user/SageMaker/tyre_quality_classification_local_training.ipynb echo "Activating conda env" source /home/ec2-user/anaconda3/bin/activate pytorch_p310 nohup jupyter nbconvert "$NOTEBOOK_FILE" --ExecutePreprocessor.kernel_name=python --execute --to notebook & nbconvert_pid=$! conda deactivate # 2. Scheduling a job to shutdown the notebook to save the cost PYTHON_DIR='/home/ec2-user/anaconda3/envs/JupyterSystemEnv/bin/python3.10' echo "Starting the autostop script in cron" (crontab -l 2>/dev/null; echo "*/5 * * * * bash -c 'if ps -p $nbconvert_pid > /dev/null; then echo \"Notebook is still running.\" >> /var/log/jupyter.log; else echo \"Notebook execution completed.\" >> /var/log/jupyter.log; $PYTHON_DIR -c \"import boto3;boto3.client(\'sagemaker\').stop_notebook_instance(NotebookInstanceName=get_notebook_name())\" >> /var/log/jupyter.log; fi'") | crontab - EOF
-
이 스크립트는 추론을 위해 모델을 재교육하고 재배포하는 Jupyter Notebook을 실행합니다. 실행이 완료되면 5분 이내에 노트북이 자동으로 종료됩니다. 문제 설명과 코드 구현에 대해 자세히 알아보려면 다음을 참조하세요."2부 - SageMaker에서 모델 학습을 위한 데이터 소스로 Amazon FSx for NetApp ONTAP (FSx ONTAP) 활용" .
-
생성 후 Notebook 인스턴스로 이동하여 대상 인스턴스를 선택하고 작업 드롭다운에서 *설정 업데이트*를 클릭합니다.
-
생성된 *라이프사이클 구성*을 선택하고 *노트북 인스턴스 업데이트*를 클릭합니다.
AWS Lambda 서버리스 함수
앞서 언급했듯이 *AWS Lambda 함수*는 *AWS SageMaker Notebook 인스턴스*를 시작하는 역할을 합니다.
-
AWS Lambda 함수*를 만들려면 해당 패널로 이동하여 *함수 탭으로 전환하고 *함수 만들기*를 클릭합니다.
-
모든 필수 항목을 페이지에 입력하시고 런타임을 *Python 3.10*으로 전환하는 것을 잊지 마세요.
-
지정된 역할에 필요한 권한인 AmazonSageMakerFullAccess*가 있는지 확인하고 *함수 생성 버튼을 클릭하세요.
-
생성된 Lambda 함수를 선택합니다. 코드 탭에서 다음 코드를 복사하여 텍스트 영역에 붙여넣습니다. 이 코드는 *fsxn-ontap*이라는 노트북 인스턴스를 시작합니다.
import boto3 import logging def lambda_handler(event, context): client = boto3.client('sagemaker') logging.info('Invoking SageMaker') client.start_notebook_instance(NotebookInstanceName='fsxn-ontap') return { 'statusCode': 200, 'body': f'Starting notebook instance: {notebook_instance_name}' }
-
이 코드 변경 사항을 적용하려면 배포 버튼을 클릭하세요.
-
이 AWS Lambda 함수를 트리거하는 방법을 지정하려면 트리거 추가 버튼을 클릭합니다.
-
드롭다운 메뉴에서 EventBridge를 선택한 다음, 새 규칙 만들기라는 라벨이 있는 라디오 버튼을 클릭합니다. 일정 표현 필드에 다음을 입력하세요.
rate(1 day)
, 추가 버튼을 클릭하여 이 새로운 Cron 작업 규칙을 생성하고 AWS Lambda 함수에 적용합니다.
2단계 구성을 완료한 후에는 매일 AWS Lambda 함수*가 *SageMaker Notebook*을 시작하고, *FSx ONTAP 저장소의 데이터를 사용하여 모델 재교육을 수행하고, 업데이트된 모델을 프로덕션 환경으로 다시 배포하고, 비용을 최적화하기 위해 *SageMaker Notebook 인스턴스*를 자동으로 종료합니다. 이렇게 하면 모델이 최신 상태로 유지됩니다.
이것으로 MLOps 파이프라인을 개발하기 위한 튜토리얼이 끝났습니다.