Amazon Web Services 한국 블로그
AWS Step Functions을 이용한 Amazon SageMaker 모델 자동 배포 방법
Amazon SageMaker는 모델의 개발, 훈련 및 배포, 솔루션 구축 비용 절감 및 데이터 과학 팀의 생산성 개선을 위한 완전한 ML(기계 학습) 워크플로 서비스입니다. SageMaker에는 다수의 미리 정의된 알고리즘이 포함되어 있습니다. 모델 교육을 위한 훈련 이미지인 Docker 이미지와 REST 엔드포인트에 배포할 추론 모델을 제공하여 자체 알고리즘을 생성할 수도 있습니다.
기계 학습 서비스를 정식으로 구축할 때는 기계 학습 모델의 구축 및 배포를 자동화하는 단계가 중요합니다. 코드 및/또는 데이터가 업데이트되면 모델을 재교육하고 배포해야 하기 때문입니다. 이 블로그에서는 AWS Step Functions를 사용한 SageMaker의 자동화 기술에 대해 설명하며, 새로운 오픈 소스 프로젝트인 aws-sagemaker-build를 데모에 사용합니다. 이 프로젝트는 ML 워크플로를 완벽하게 구현합니다.
이 소스 코드에는 Python 및 Amazon Alexa를 사용하여 빌드를 생성, 시작 및 중지 등 빌드 진행률을 추적하는 방법을 보여주는 Jupyter 노트북이 포함되어 있습니다. aws-sagemaker-build의 목표는 Amazon SageMaker 및 AWS Step Functions를 사용하는 일반적이고 유용한 파이프라인의 리포지토리를 제공하여 이러한 파이프라인을 커뮤니티와 공유하고 커뮤니티를 통해 확대하는 것입니다.
이 코드는 오픈 소스이며 GitHub의 여기에서 호스팅됩니다.
사용자 지정 모델
이 블로그 게시물에서는 훈련 또는 추론에 사용할 Docker 파일을 작성하고 설계하는 방법에 대한 자세한 내용을 다루지 않습니다. 자세한 내용은 다음 설명서를 참조하십시오.
필요한 AWS 서비스
여기서는 이 솔루션을 단순화하기 위해 서버리스 기술과 관리형 서비스를 중점적으로 사용합니다. 솔루션은 훈련 시간이 긴 경우에도 조정 가능하고 경제적인 것이어야 합니다. 대규모 신경망 데이터 훈련은 완료까지 수일이 걸릴 수도 있기 때문입니다.
AWS Step Functions
AWS CloudFormation, AWS Step Functions, AWS CodePipeline 및 AWS Glue를 비롯한 여러 AWS 서비스를 워크플로 오케스트레이션에 사용할 수 있습니다. 여기서 AWS Step Functions는 워크플로 구현에 적합한 도구를 제공합니다. Step Functions는 상태 머신 같은 역할을 합니다. 초기 상태에서 시작해서 AWS Lambda 함수를 사용해 필요에 따라 상태를 변경, 분기 또는 반복하면서 상태를 변환합니다. 이 추상화는 Step Functions를 매우 유연하게 만드는 기능입니다. 최대 1년간 실행할 수 있지만 각 전환에 대해서만 요금이 부과되므로 이 사용 사례에서 필요에 따라 도구를 조정하면서 경제적으로 사용할 수 있습니다.
AWS CodeBuild
AWS CodeBuild는 온디맨드 코드 구축 서비스입니다. 이 서비스는 Docker 이미지를 구축하고 Amazon Elastic Container Registry(Amazon ECR) 리포지토리로 푸시하는 데 사용될 것입니다. 자세한 내용은 설명서를 참조하십시오.
AWS Lambda
Step Functions는 Lambda 함수를 사용하여 빌드 작업을 수행합니다. Lambda는 교육을 시작하고, 훈련 상태를 확인하고, CodeBuild를 시작하고, CodeBuild를 확인하는 등의 작업을 위한 함수를 제공합니다.
빌드의 서로 다른 단계에 구성 파라미터를 제공하는 방법을 알아내는 데 어려움이 있었습니다. 어떤 파라미터는 정적이지만 다른 파라미터는 이전 빌드 단계에 종속될 수 있고 또 다른 파라미터는 고객의 요구 사항과 관련될 수 있기 때문입니다. 예를 들어 훈련 및 추론 이미지 ID는 훈련 및 배포 단계로 전달되어야 하지만, Amazon S3 버킷 이름은 파이프라인에 대해 정적이고, 훈련 및 추론에 사용되는 ML 인스턴스는 개별 사용자가 선택해야 합니다. 이 문제에 대한 해결책도 Lambda 함수를 사용하는 것입니다. 두 가지 Lambda 함수를 사용하여 빌드의 현재 상태를 입력으로 받아 훈련 작업 및 엔드포인트 구성을 출력할 수 있습니다. 사용자는 이러한 함수의 코드를 요구 사항에 맞게 편집하거나 덮어쓸 수 있습니다. 예를 들어 Lambda 함수는 데이터 카탈로그를 쿼리하여 데이터 세트의 Amazon S3 위치를 가져올 수 있습니다.
Lambda 함수는 CloudFormation 스크립트의 설정 및 폐기에 필요한 다양한 사용자 지정 리소스에도 사용됩니다. 사용자 지정 리소스 Lambda 함수에는 스택 삭제 시 S3 버킷 정리, Amazon SageMaker 노트북 인스턴스에 Jupyter 노트북 업로드, SageMaker 리소스 지우기 등의 작업을 수행하는 함수가 포함됩니다.
AWS Systems Manager Parameter Store
AWS Systems Manager Parameter Store는 내구성이 뛰어나며 조정 가능한 중앙 집중식 데이터 스토어를 제공합니다. 이 블로그에서는 훈련 작업 및 배포 파라미터를 이 데이터 스토어에 저장하고 Step Functions의 Lambda 함수를 사용해 이 스토어의 파라미터를 쿼리할 것입니다. 파라미터를 변경하려면 스토어의 JSON 문자열을 변경하기만 하면 됩니다. aws-sagemaker-build에 포함된 예제 노트북에서 그 방법을 확인할 수 있습니다.
Amazon SNS
Amazon Simple Notification Service(Amazon SNS)는 빌드를 시작하고 알림을 전송하는 데 사용됩니다. AWS CodeCommit, GitHub 및 Amazon S3에서는 변경이 발생하는 경우 start-build SNS 주제에 게시할 수 있습니다. 또한 빌드가 시작되고, 완료되고, 실패하는 경우에도 알림 SNS 주제에 게시합니다. 이러한 주제를 사용하여 aws-sagemaker-build를 다른 시스템에 연결할 수 있습니다.
배포 단계
Amazon Sagemaker를 사용하여 모델을 배포하려면 다음 단계를 수행해야 합니다.
- 사용자 지정 알고리즘을 사용하는 경우 Docker 이미지를 구축하고 Amazon ECR에 업로드합니다.
- Amazon SageMaker 훈련 작업을 생성하고 완료될 때까지 기다립니다.
- Amazon SageMaker 모델을 생성합니다.
- Amazon SageMaker 엔드포인트 구성을 생성합니다.
- SageMaker 엔드포인트를 생성/업데이트하고 완료될 때까지 기다립니다.
이러한 단계는 aws-sagemaker-build에서 Step Functions를 사용하여 자동화됩니다.
아키텍처
- 다음은 Step Functions 상태 머신의 흐름을 설명하는 다이어그램입니다. 여기에는 상태 머신이 작업을 폴링하고 완료를 기다리는 여러 지점이 포함되어 있습니다.
- 다음 다이어그램은 서비스의 작동 방식을 보여줍니다.
실습하기
다음 CloudFormation 템플릿을 사용하여 사용자 계정에 리소스를 생성합니다. 여기에는 Amazon SageMaker 노트북 인스턴스 및 Amazon SageMaker 엔드포인트가 포함되며 모두 시간당 요금이 부과됩니다.
참고: 불필요한 요금을 방지하려면 작업을 완료한 후 이 스택을 폐기하십시오.
아래의 [Lauch Stack] 버튼을 클릭하여 aws-sagemaker-build용 CloudFormation 템플릿을 시작합니다. CloudFormation 스택 이름을 선택하고 다른 모든 파라미터를 기본값으로 유지합니다.
템플릿 생성이 완료되면 다음 지침을 따릅니다.
- 스택 출력에서 NoteBookUrl 옆의 링크를 선택합니다.
- Jupyter 브라우저에서 SageBuild 폴더를 선택하여 aws-sagemaker-build 사용 방법에 대한 예제 노트북을 확인합니다.
이벤트 및 알림 설정
CloudFormation 스택에서는 업데이트가 있는 경우 빌드를 시작하는 CodeCommit 리포지토리 및 S3 버킷을 자동으로 생성할 수 있습니다. 그렇게 하려면 “BucketTriggerBuild” 또는”BucketTriggerBuild” 스택 파라미터를 기본값이 아닌 값으로 설정합니다. CloudFormation 템플릿의 출력에서 LaunchTopic SNS 주제로 게시하여 재구축을 트리거하는 다른 이벤트를 구성할 수 있습니다. 변경이 발생할 때 재구축을 트리거하는 GitHub 리포지토리를 설정하려면 이 블로그 게시물의 지침을 따르십시오. TrainStatusTopic을 구독하여 여기로 업데이트 이메일 또는 텍스트를 전송할 수도 있습니다.
Alexa skill
CloudFormation 스택에는 AlexaLambdaArn이라는 이름의 출력이 있습니다. 이 Lambda 함수를 사용하면 aws-sagemaker-build를 관리할 Alexa skill을 생성할 수 있습니다.
- json 모델 정의를 다운로드합니다.
- Lambda 함수에는 Alexa를 통해 호출할 수 있는 사용 권한이 이미 구성되어 있습니다.
- 아직 없는 경우 Amazon Developer 계정을 생성합니다. 이 계정은 AWS 계정과 다른 계정입니다.
- 다음 지침에 따라 Alexa skill을 생성합니다.
- Amazon 개발자 콘솔에 로그인하고 [Alexa Skills Kit] 탭을 선택합니다.
- 다음 화면에서 스킬 유형으로 [custom]을 선택하고 스킬 이름을 지정합니다.
- 왼쪽 메뉴에서 [Invocation]을 선택하고 스킬에 “sagebuild” 같은 호출 이름을 지정합니다.
- 왼쪽 메뉴에서 [Endpoint]를 선택하고 aws-sagemaker-build 스택의 AlexaLambdaArn 출력을 복사하여 [AWS Lambda Arn] 아래의 기본 리전 필드에 붙여 넣습니다.
- 왼쪽 메뉴에서 [JSON Editor]를 선택하고 다운로드한 모델 정의를 복사하여 편집기에 붙여 넣습니다.
- [Save Model]을 선택한 다음 [Build Model]을 선택합니다.
이제 코드 변경을 리포지토리로 푸시(또는 새 데이터 업로드)하고 저녁을 준비하면서 Alexa에게 “Alexa, SageBuild에 ‘빌드가 완료되었는지’ 물어봐줘”라고 주기적으로 물을 수 있는 워크플로가 완성되었습니다. 제가 이미 해봤는데 정말 멋졌습니다.
검증
aws-sagemaker-build는 교육에 대한 검증을 수행하지 않습니다. 즉, 훈련 작업이 실패하지 않으면 모델의 성능이 현재 모델보다 떨어지는 경우라도 모델이 엔드포인트에 배포됩니다. 따라서 모델을 검증하고 필요한 경우 교육을 실패하게 하는 논리를 훈련 작업에 포함해야 합니다.
프레임워크
aws-sagemaker-build는 BYOD(Bring-Your-Own-Docker), Amazon SageMaker 알고리즘, TensorFlow 및 MXNet의 네 가지 서로 다른 구성을 지원합니다. 구성은 CloudFormation 템플릿의 파라미터로 설정되지만 배포 후 변경이 가능합니다. TensorFlow 및 MXNet 구성의 경우 사용자 스크립트가 복사되고 버전 이름으로 저장되므로 이전 버전의 롤백 또는 재배포가 올바르게 작동합니다. aws-sagemaker-build 스택에서 시작된 노트북에서 이 서로 다른 구성에 대한 예를 확인할 수 있습니다.
고급 배포 설정
개발/프로덕션 배포
먼저 CodeCommit 리포지토리와 Amazon S3 데이터 버킷을 생성합니다. 그런 다음 방금 생성한 리포지토리와 S3 버킷을 사용하여 aws-sagemaker-build 스택 2개를 시작합니다. 한 스택은 “마스터” 브랜치를 사용하고 다른 스택은 “개발” 브랜치를 사용하도록 설정합니다.
다음은 아키텍처를 보여주는 다이어그램입니다.
Amazon CloudWatch Events
Amazon CloudWatch Events를 사용하여 스택의 LaunchTopic 주제에 정기적으로(예: 매일 오후 5시 또는 매주 금요일 오전 9시) 게시할 수 있습니다. 주중에 개발하는 소량의 개발 데이터 세트가 있는 워크플로에서 이 서비스를 사용할 수 있습니다. 테스트한 변경 사항을 코드 브랜치에 푸시하고 주말에 이 브랜치만 재배포하면 됩니다. 이렇게 하면 대규모 모델을 지속적으로 교육하고 대체하지 않아도 되므로 비용이 대폭 절감됩니다.
마무리
이 블로그 게시물이 문제 해결에 도움이 되었거나 영감을 주었다면 자세한 이야기를 알려주십시오. 또한 GitHub에서 코드를 다운로드하여 사용하고 확장할 수 있습니다. 많은 기고를 부탁 드립니다.
감사의 말
Dua, D. 및 Karra Taniskidou, E. (2017). UCI Machine Learning Repository [http://archive.ics.uci.edu/ml]. 캘리포니아주 어바인: 캘리포니아대학교, 정보컴퓨터공학과
John Calhoun 는 AWS Public Sector의 기계 학습 전문가입니다. 고객 및 파트너와 함께 일하면서 기계 학습에 대한 리더십을 제공함으로써 AWS를 사용한 가치 실현을 가속화합니다.
이 글은 AWS AI/ML 블로그 Automated and continuous deployment of Amazon SageMaker models with AWS Step Functions의 한국어 번역입니다.