기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
모델 패키지 이미지 만들기
Amazon SageMaker AI 모델 패키지는 예측을 수행하는 사전 훈련된 모델이며 구매자의 추가 훈련이 필요하지 않습니다. SageMaker AI에서 모델 패키지를 생성하고 기계 학습 제품을 게시할 수 있습니다 AWS Marketplace. 다음 섹션에서는 모델 패키지를 생성하는 방법을 설명합니다 AWS Marketplace. 여기에는 컨테이너 이미지 생성과 로컬에서 이미지 구축 및 테스트가 포함됩니다.
개요
모델 패키지는 다음과 같은 구성 요소로 이루어집니다.
-
Amazon Elastic Container Registry
(Amazon ECR)에 저장된 추론 이미지 -
(선택 사항) Amazon S3
에 별도로 저장된 모델 아티팩트
참고
모델 아티팩트는 모델이 예측에 사용하는 파일이며 일반적으로 자체 훈련 프로세스의 결과입니다. 모델에 필요한 모든 유형의 파일이 아티팩트가 될 수 있지만 반드시 use.tar.gz 압축 파일이어야 합니다. 모델 패키지의 경우 추론 이미지 내에서 번들링하거나 Amazon SageMaker AI에 별도로 저장할 수 있습니다. Amazon S3에 저장된 모델 아티팩트는 런타임에 추론 컨테이너로 로드됩니다. 모델 패키지를 게시할 때 이러한 아티팩트는 게시되어 구매자가 직접 액세스할 수 없는 AWS Marketplace 소유 Amazon S3 버킷에 저장됩니다.
작은 정보
추론 모델이 Gluon, Keras, MXNet, PyTorch, TensorFlow, TensorFlow-Lite 또는 ONNX와 같은 딥 러닝 프레임워크로 빌드된 경우 Amazon SageMaker AI Neo를 사용하는 것이 좋습니다. Neo는 ml.c4
, ml.p2
등과 같은 특정 클라우드 인스턴스 유형 제품군에 배포하는 추론 모델을 자동으로 최적화할 수 있습니다. 자세한 내용은 Amazon SageMaker AI 개발자 안내서의 Neo를 사용하여 모델 성능 최적화를 참조하세요.
다음 다이어그램은 모델 패키지 제품을 게시하고 사용하는 워크플로를 보여줍니다.

용 SageMaker AI 모델 패키지를 생성하는 워크플로에는 다음 단계가 AWS Marketplace 포함됩니다.
-
판매자가 추론 이미지(배포 시 네트워크 액세스 불가)를 생성하여 Amazon ECR 레지스트리에 푸시합니다.
모델 아티팩트는 추론 이미지에 번들로 제공하거나 S3에 별도로 저장할 수 있습니다.
-
그런 다음 판매자는 Amazon SageMaker AI에서 모델 패키지 리소스를 생성하고 ML 제품을 게시합니다 AWS Marketplace.
-
구매자가 ML 제품을 구독하고 모델을 배포합니다.
참고
모델을 실시간 추론을 위한 엔드포인트로 배포하거나 전체 데이터 세트를 한꺼번에 예측하는 배치 작업으로 배포할 수 있습니다. 자세한 내용은 추론용 모델 배포를 참조하세요.
-
SageMaker AI는 추론 이미지를 실행합니다. 추론 이미지에 번들로 제공되지 않은, 판매자가 제공한 모델 아티팩트가 런타임에 동적으로 로드됩니다.
-
SageMaker AI는 컨테이너의 HTTP 엔드포인트를 사용하여 구매자의 추론 데이터를 컨테이너에 전달하고 예측 결과를 반환합니다.
모델 패키지용 추론 이미지 만들기
이 섹션에서는 추론 코드를 모델 패키지 제품의 추론 이미지로 패키징하는 방법을 안내합니다. 이 프로세스는 다음 단계로 구성됩니다.
추론 이미지는 추론 로직을 포함하고 있는 도커 이미지입니다. 런타임 시 컨테이너는 SageMaker AI가 컨테이너와 데이터를 주고받을 수 있도록 HTTP 엔드포인트를 노출합니다.
참고
다음은 추론 이미지를 위한 패키징 코드의 한 가지 예시입니다. 자세한 내용은 SageMaker AI와 함께 Docker 컨테이너 사용 및 GitHub의 AWS Marketplace SageMaker AI 예제
다음 예제에서는 간단한 설명을 위해 Flask
1단계: 컨테이너 이미지 만들기
추론 이미지가 SageMaker AI와 호환되려면 Docker 이미지가 HTTP 엔드포인트를 노출해야 합니다. 컨테이너가 실행되는 동안 SageMaker AI는 컨테이너의 HTTP 엔드포인트에 추론을 위해 구매자 입력을 전달합니다. 추론 결과는 HTTP 응답 본문에 반환됩니다.
다음은 Linux Ubuntu 배포판을 사용하는 개발 환경에서 Docker CLI를 사용하는 예제입니다.
웹 서버 스크립트 생성
이 예제에서는 Flask
참고
여기에서는 간단한 설명을 위해 Flask
SageMaker AI가 사용하는 TCP 포트 8080에서 두 HTTP 엔드포인트를 제공하는 Flask 웹 서버 스크립트를 생성합니다. 두 개의 예상 엔드포인트는 다음과 같습니다.
-
/ping
- SageMaker AI는이 엔드포인트에 HTTP GET 요청을 하여 컨테이너가 준비되었는지 확인합니다. 컨테이너가 준비되었으면 컨테이너는 이 엔드포인트의 HTTP GET 요청에 HTTP 200 응답 코드로 응답합니다. -
/invocations
- SageMaker AI는 추론을 위해이 엔드포인트에 HTTP POST 요청을 합니다. 추론용 입력 데이터가 요청 본문에 전송됩니다. 사용자가 지정한 콘텐츠 유형이 HTTP 헤더에 전달됩니다. 응답의 본문은 추론 출력입니다. 시간 초과에 대한 자세한 내용은 기계 학습 제품 생성을 위한 요구 사항 및 모범 사례 섹션을 참조하세요.
./web_app_serve.py
# Import modules import json import re from flask import Flask from flask import request app = Flask(__name__) # Create a path for health checks @app.route("/ping") def endpoint_ping(): return "" # Create a path for inference @app.route("/invocations", methods=["POST"]) def endpoint_invocations(): # Read the input input_str = request.get_data().decode("utf8") # Add your inference code between these comments. # # # # # # Add your inference code above this comment. # Return a response with a prediction response = {"prediction":"a","text":input_str} return json.dumps(response)
이전 예제에서는 실제 추론 로직이 없습니다. 실제 추론 이미지의 경우 웹 앱에 추론 로직을 추가하면 웹 앱이 입력을 처리하고 실제 예측 결과를 반환합니다.
추론 이미지에는 인터넷에 액세스할 수 없고 어떤에 대해서도 호출할 수 없으므로 필요한 종속성이 모두 포함되어야 합니다 AWS 서비스.
참고
실시간 추론과 배치 추론에서도 이와 동일한 코드가 호출됩니다.
컨테이너 실행을 위한 스크립트 생성
SageMaker AIserve
가 Docker 컨테이너 이미지를 실행할 때 실행되는 라는 스크립트를 생성합니다. 다음은 HTTP 웹 서버를 시작하는 스크립트입니다.
./serve
#!/bin/bash # Run flask server on port 8080 for SageMaker flask run --host 0.0.0.0 --port 8080
Dockerfile
생성
빌드 컨텍스트에서 Dockerfile
을 생성합니다. 이 예제에서는 Ubuntu 18.04를 사용하지만, 사용 중인 프레임워크에서 작동하는 아무 기본 이미지로 시작해도 됩니다.
./Dockerfile
FROM ubuntu:18.04 # Specify encoding ENV LC_ALL=C.UTF-8 ENV LANG=C.UTF-8 # Install python-pip RUN apt-get update \ && apt-get install -y python3.6 python3-pip \ && ln -s /usr/bin/python3.6 /usr/bin/python \ && ln -s /usr/bin/pip3 /usr/bin/pip; # Install flask server RUN pip install -U Flask; # Add a web server script to the image # Set an environment to tell flask the script to run COPY /web_app_serve.py /web_app_serve.py ENV FLASK_APP=/web_app_serve.py # Add a script that Amazon SageMaker AI will run # Set run permissions # Prepend program directory to $PATH COPY /serve /opt/program/serve RUN chmod 755 /opt/program/serve ENV PATH=/opt/program:${PATH}
Dockerfile
은 이전에 생성한 두 개의 스크립트를 이미지에 추가합니다. serve
스크립트의 디렉터리가 PATH에 추가되므로 컨테이너가 실행될 때 스크립트를 실행할 수 있습니다.
모델 아티팩트 패키징 또는 업로드
모델 훈련에서 얻은 모델 아티팩트를 추론 이미지에 제공하는 두 가지 방법은 다음과 같습니다.
-
추론 이미지와 함께 정적으로 패키징됩니다.
-
런타임에 동적으로 로드됩니다. 동적으로 로드되므로 동일한 이미지를 사용하여 다양한 기계 학습 모델을 패키징할 수 있습니다.
모델 아티팩트를 추론 이미지와 함께 패키징하려면 Dockerfile
에 아티팩트를 포함합니다.
모델 아티팩트를 동적으로 로드하려면 아티팩트를 Amazon S3의 압축 파일(.tar.gz)에 별도로 저장합니다. 모델 패키지를 생성할 때 압축 파일의 위치를 지정하면 SageMaker AI가 컨테이너를 실행할 /opt/ml/model/
때 콘텐츠를 추출하여 컨테이너 디렉터리에 복사합니다. 모델 패키지를 게시하면 구매자가 직접 액세스할 수 없는 AWS Marketplace
소유의 Amazon S3 버킷에 해당 아티팩트가 게시되고 저장됩니다.
2단계: 로컬로 이미지 빌드 및 테스트
빌드 컨텍스트에는 이제 다음과 같은 파일이 있습니다.
-
./Dockerfile
-
./web_app_serve.py
-
./serve
-
추론 로직 및 (선택적) 종속성
다음으로 컨테이너 이미지를 빌드, 실행 및 테스트합니다.
이미지 빌드
빌드 컨텍스트에서 Docker 명령을 실행하여 이미지를 빌드하고 태그를 지정합니다. 이 예제에서는 my-inference-image
태그를 사용합니다.
sudo docker build --tag my-inference-image ./
이 Docker 명령을 실행하여 이미지를 빌드한 후에는 Docker가 Dockerfile
의 각 라인을 기반으로 이미지를 빌드할 때 출력이 표시됩니다. 모두 완료되면 다음과 비슷한 화면이 표시됩니다.
Successfully built abcdef123456
Successfully tagged my-inference-image:latest
로컬로 실행
빌드가 완료되면 로컬로 이미지를 테스트할 수 있습니다.
sudo docker run \ --rm \ --publish 8080:8080/tcp \ --detach \ --name my-inference-container \ my-inference-image \ serve
다음은 명령에 대한 세부 정보입니다.
-
--rm
- 컨테이너가 중지되면 자동으로 컨테이너를 제거합니다. -
--publish 8080:8080/tcp
- 포트 8080을 노출하여 SageMaker AI가 HTTP 요청을 보내는 포트를 시뮬레이션합니다. -
--detach
- 컨테이너를 백그라운드에서 실행합니다. -
--name my-inference-container
- 실행 중인 이 컨테이너의 이름을 지정합니다. -
my-inference-image
- 빌드된 이미지를 실행합니다. -
serve
- 컨테이너를 실행할 때 SageMaker AI가 실행하는 것과 동일한 스크립트를 실행합니다.
이 명령을 실행한 후, Docker는 판매자가 생성한 추론 이미지로 컨테이너를 생성하고 백그라운드에서 실행합니다. 컨테이너가 serve
스크립트를 실행하고, 그러면 테스트 목적으로 웹 서버가 시작됩니다.
HTTP 엔드포인트를 ping 테스트합니다.
SageMaker AI가 컨테이너를 실행하면 엔드포인트를 주기적으로 ping합니다. 엔드포인트가 상태 코드 200으로 HTTP 응답을 반환하면 컨테이너가 추론할 준비가 되었음을 SageMaker AI에 알립니다. 엔드포인트를 테스트하고 응답 헤더를 포함시키는 다음 명령을 실행하여 이를 테스트할 수 있습니다.
curl --include http://127.0.0.1:8080/ping
예제 출력 내용은 다음과 같습니다.
HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 0
Server: MyServer/0.16.0 Python/3.6.8
Date: Mon, 21 Oct 2019 06:58:54 GMT
추론 HTTP 엔드포인트 테스트
컨테이너가 ping에 200 상태 코드를 반환하여 준비되었음을 나타내면 SageMaker AI는 POST
요청을 통해 추론 데이터를 /invocations
HTTP 엔드포인트에 전달합니다. 다음 명령을 실행하여 추론 포인트를 테스트합니다.
curl \ --request POST \ --data "hello world" \ http://127.0.0.1:8080/invocations
예제 출력 내용은 다음과 같습니다.
{"prediction": "a", "text": "hello
world"}
이 두 HTTP 엔드포인트가 작동하면 이제 추론 이미지가 SageMaker AI와 호환됩니다.
참고
모델 패키지 제품의 모델은 실시간 및 배치의 두 가지 방식으로 배포할 수 있습니다. 두 배포 모두에서 SageMaker AI는 Docker 컨테이너를 실행하는 동안 동일한 HTTP 엔드포인트를 사용합니다.
컨테이너를 중지하려면 다음 명령을 실행합니다.
sudo docker container stop my-inference-container
추론 이미지가 준비되고 테스트를 마쳤으면 계속해서 Amazon Elastic Container Registry에 이미지 업로드 섹션을 진행할 수 있습니다.