2단계. 런타임 스크립트 생성 - AWS 규범적 지침

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

2단계. 런타임 스크립트 생성

런타임 스크립트를 생성합니다.

이 단계에서는 1단계에서 개발한 모델과 관련 헬퍼 코드를 ML 플랫폼에 통합하여 프로덕션 환경에서 바로 사용할 수 있는 훈련 및 추론을 수행합니다. 특히 여기에는 모델을 SageMaker에 통합할 수 있는 런타임 스크립트 개발이 포함됩니다. 이러한 독립형 Python 스크립트에는 사전 정의된 SageMaker 콜백 함수와 환경 변수가 포함되어 있습니다. 이들은 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 호스팅된 SageMaker 컨테이너 내에서 실행됩니다. Amazon SageMaker Python SDK 설명서는 이러한 콜백 및 보조 설정이 훈련 및 추론을 위해 함께 작동하는 방식에 대한 자세한 정보를 제공합니다. (예를 들어, SageMaker 설명서의 scikit-learn 훈련 스크립트 준비scikit-learn 모델 배포를 참고하십시오.) 다음 섹션에서는 AWS 고객과의 협력 경험을 바탕으로 ML 런타임 스크립트 개발을 위한 추가 권장 사항을 제공합니다.

프로세싱 작업 사용하기

SageMaker는 배치 모드 모델 추론을 수행하기 위해 두 가지 옵션을 제공합니다. SageMaker 프로세싱 작업 또는 일괄 변환 작업을 사용할 수 있습니다. 각 옵션에는 장점과 단점이 있습니다.

프로세싱 작업은 SageMaker 컨테이너 내에서 실행되는 Python 파일로 구성됩니다. 이 프로세싱 작업은 Python 파일에 입력하는 모든 로직으로 구성됩니다. 이것에는 다음과 같은 장점이 있습니다.

  • 훈련 작업의 기본 논리를 이해하면 프로세싱 작업을 쉽게 설정하고 쉽게 이해할 수 있습니다. 훈련 작업과 동일한 추상화(예: 인스턴스 수 및 데이터 배포 조정)를 공유합니다.

  • 데이터 사이언티스트와 ML 엔지니어는 데이터 조작 옵션을 완전히 제어할 수 있습니다.

  • 데이터 사이언티스트는 익숙한 읽기/쓰기 기능 외에는 어떠한 I/O 구성 요소 로직도 관리할 필요가 없습니다.

  • SageMaker가 아닌 환경에서 파일을 실행하는 것이 다소 쉬우므로 빠른 개발 및 로컬 테스트에 도움이 됩니다.

  • 오류가 있는 경우 스크립트가 실패하는 즉시 프로세싱 작업이 실패하므로 재시도를 기다리는 예기치 않은 상황이 발생하지 않습니다.

반면 일괄 변환 작업은 SageMaker 엔드포인트 개념의 확장입니다. 런타임 시 이러한 작업은 콜백 함수를 가져오고, 콜백 함수는 데이터 읽기, 모델 로드, 예측을 위한 I/O를 처리합니다. 일괄 변환 작업에는 다음과 같은 이점이 있습니다.

  • 훈련 작업에 사용되는 추상화와는 다른 데이터 분포 추상화를 사용합니다.

  • 일괄 추론과 실시간 추론 모두에 동일한 코어 파일 및 함수 구조를 사용하므로 편리합니다.

  • 재시도 기반 장애 허용 메커니즘이 내장되어 있습니다. 예를 들어 레코드 배치에서 오류가 발생하면 작업이 실패로 종료되기 전에 여러 번 재시도합니다.

투명성, 여러 환경에서의 사용 편의성, 훈련 작업과의 공유 추상화로 인해 이 설명서에 제시된 참조 아키텍처에서는 일괄 변환 작업 대신 프로세싱 작업을 사용하기로 결정했습니다.

Python 런타임 스크립트를 클라우드에 배포하기 전에 로컬에서 실행해야 합니다. 특히, Python 스크립트를 구성하고 유닛 테스트를 수행할 때는 main guard 절을 사용하는 것을 권장합니다.

main guard 절 사용

main guard 절을 사용하여 모듈 가져오기를 지원하고 Python 스크립트를 실행합니다. Python 스크립트를 개별적으로 실행하면 ML 파이프라인에서 문제를 디버깅하고 격리하는 데 유용합니다. 다음 단계를 수행하는 것이 좋습니다.

  • Python 프로세싱 파일에서 인수 파서를 사용하여 입력/출력 파일과 해당 위치를 지정합니다.

  • 각 Python 파일에 대한 기본 가이드 및 테스트 함수를 제공합니다.

  • Python 파일을 테스트한 후에는 AWS Step Functions 모델을 사용하든 SageMaker 프로세싱 작업을 사용하든 상관없이 ML 파이프라인의 여러 단계에 파일을 통합합니다.

  • 스크립트의 중요한 부분에 Assert 문을 사용하면 테스트와 디버깅을 쉽게 할 수 있습니다. 예를 들어 Assert 문을 사용하여 로드한 후 데이터 세트 특징의 개수가 일관되도록 할 수 있습니다.

유닛 테스트

파이프라인용으로 작성된 런타임 스크립트의 유닛 테스트는 ML 파이프라인 개발에서 자주 무시되는 중요한 작업입니다. 이는 머신 러닝과 데이터 사이언스가 비교적 새로운 분야이고 유닛 테스트와 같이 잘 정립된 소프트웨어 엔지니어링 방식을 채택하는 데 시간이 오래 걸렸기 때문입니다. ML 파이프라인은 프로덕션 환경에서 사용되므로 ML 모델을 실제 애플리케이션에 적용하기 전에 파이프라인 코드를 반드시 테스트해야 합니다.

런타임 스크립트의 유닛 테스트는 ML 모델에 다음과 같은 고유한 이점도 제공합니다.

  • 예상치 못한 데이터 변환을 방지합니다. 대부분의 ML 파이프라인에는 많은 데이터 변환이 포함되므로 이러한 변환이 예상대로 수행되는 것이 중요합니다.

  • 코드의 재현성을 검증합니다. 다양한 사용 사례를 사용한 유닛 테스트를 통해 코드의 무작위성을 감지할 수 있습니다.

  • 코드의 모듈성을 강화합니다. 유닛 테스트는 일반적으로 특정 테스트 세트(테스트 사례 모음)가 프로그램의 소스 코드를 실행하는 정도를 나타내는 테스트 커버리지 측정과 연관됩니다. 많은 양의 코드를 함수나 클래스로 나누지 않고는 유닛 테스트를 작성하기가 어렵기 때문에 개발자는 테스트 범위를 넓히기 위해 코드를 모듈화합니다.

  • 품질이 낮은 코드나 오류가 프로덕션 환경에 도입되는 것을 방지합니다.

유닛 테스트 사례를 작성할 때는 pytest와 같은 성숙한 유닛 테스트 프레임워크를 사용하는 것을 권장합니다. 프레임워크 내에서 광범위한 유닛 테스트를 관리하는 것이 더 쉽기 때문입니다.

중요

유닛 테스트를 통해 모든 코너 케이스가 테스트되었다고 보장할 수는 없지만 모델을 배포하기 전에 실수를 사전에 방지하는 데 도움이 될 수 있습니다. 또한, 운영 효율성을 보장하기 위해 배포 후에도 모델을 모니터링하는 것을 권장합니다.