다중 모델 엔드포인트를 위한 자체 컨테이너 구축 SageMaker - 아마존 SageMaker

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

다중 모델 엔드포인트를 위한 자체 컨테이너 구축 SageMaker

자체 컨테이너 및 종속성을 다중 모델 엔드포인트로 가져오려면 다음 섹션을 참조하세요.

CPU 지원 인스턴스의 다중 모델 엔드포인트에 대한 자체 종속성을 가져오세요.

사전 빌드된 컨테이너 이미지 중 요구 사항을 충족하는 이미지가 없는 경우 CPU 지원 다중 모델 엔드포인트와 함께 사용할 자체 컨테이너를 빌드할 수 있습니다.

Amazon에 배포된 사용자 지정 Amazon Elastic Container Registry ( SageMaker Amazon ECR) 이미지는 자체 추론 코드를 실행하는 Docker 컨테이너와의 상호 작용 SageMaker 방식을 규제하는 기본 계약에 설명된 호스팅 서비스에서 자체 추론 코드 사용 기본 계약을 준수해야 합니다. 컨테이너가 여러 모델을 동시에 로드하고 제공할 수 있으려면 따라야 할 추가적인 API 및 동작이 있습니다. 이 추가 계약에는 모델을 로드, 나열, 가져 오기 및 언로드하는 새로운 API와 모델을 호출하는 다른 API가 포함됩니다. 또한 API가 준수해야 하는 오류 시나리오에 대한 다른 동작이 있습니다. 컨테이너가 추가 요구 사항을 준수한다는 것을 나타내기 위해 Docker 파일에 다음 명령을 추가할 수 있습니다.

LABEL com.amazonaws.sagemaker.capabilities.multi-models=true

SageMaker 또한 컨테이너에 환경 변수를 삽입합니다.

SAGEMAKER_MULTI_MODEL=true

직렬 추론 파이프라인에 대한 다중 모델 엔드포인트를 생성하는 경우 Docker 파일에 다중 모델 및 직렬 추론 파이프라인에 필요한 레이블이 있어야 합니다. 직렬 정보 파이프라인에 대한 자세한 내용은 추론 파이프라인을 사용하여 실시간으로 예측 실행하기 단원을 참조하세요.

사용자 지정 컨테이너에 대한 이러한 요구 사항을 충족하는 데 도움이 되도록 두 개의 라이브러리를 사용할 수 있습니다.

  • Multi Model Server는 새로운 다중 모델 엔드포인트 컨테이너 API에 대한 요구 사항을 충족하는 프런트 엔드를 제공하기 위해 컨테이너에 설치할 수 있는 기계 학습 모델을 제공하는 오픈 소스 프레임워크입니다. 단일 컨테이너 내에서 여러 모델을 호스팅하고, 모델을 컨테이너에 동적으로 로드 및 언로드하고, 지정된 로드 모델에 대한 추론을 수행할 수 있도록 다중 모델 엔드포인트에 필요한 HTTP 프런트 엔드 및 모델 관리 특성을 제공합니다. 또한 자체 알고리즘을 구현할 수 있는 플러그형 사용자 지정 백엔드 핸들러를 지원하는 플러그형 백엔드를 제공합니다.

  • SageMaker Inference Toolkit은 다중 모델 엔드포인트와 호환되도록 하는 구성 및 설정으로 다중 모델 서버를 부트스트랩하는 라이브러리입니다. SageMaker 또한 시나리오의 필요에 따라 모델당 작업자 수와 같은 중요한 성능 파라미터를 조정할 수 있습니다.

GPU 지원 인스턴스의 다중 모델 엔드포인트에 대한 자체 종속성을 가져오세요.

GPU 지원 인스턴스를 사용하는 다중 모델 엔드포인트의 BYOC (Bring Your Own Container) 기능은 현재 다중 모델 서버 및 추론 툴킷 라이브러리에서 지원되지 않습니다. SageMaker

GPU 지원 인스턴스로 다중 모델 엔드포인트를 만들려면 SageMaker 지원되는 NVIDIA Triton 추론 서버를 NVIDIA Triton 추론 컨테이너와 함께 사용할 수 있습니다. 자체 종속성을 가져오려면 SageMaker 지원되는 NVIDIA Triton 추론 서버를 Docker 파일의 기본 이미지로 사용하여 자체 컨테이너를 구축할 수 있습니다.

FROM 301217895009.dkr.ecr.us-west-2.amazonaws.com/sagemaker-tritonserver:22.07-py3
중요

Triton 추론 서버가 있는 컨테이너는 GPU 지원 다중 모델 엔드포인트에 사용할 수 있도록 지원되는 유일한 컨테이너입니다.

인퍼런스 툴킷 사용하기 SageMaker

참고

SageMaker 추론 툴킷은 CPU 지원 다중 모델 엔드포인트에서만 지원됩니다. SageMaker 추론 툴킷은 현재 GPU 지원 다중 모델 엔드포인트에 지원되지 않습니다.

다중 모델 엔드포인트를 지원하는 사전 빌드된 컨테이너는 지원되는 알고리즘, 프레임워크 및 인스턴스에 나열되어 있습니다. 다른 프레임워크나 알고리즘을 사용하려면 컨테이너를 빌드해야 합니다. 이를 수행하는 가장 쉬운 방법은 SageMaker 인퍼런스 툴킷을 사용하여 기존의 사전 빌드된 컨테이너를 확장하는 것입니다. SageMaker 추론 툴킷은 배포할 수 있는 엔드포인트를 생성하는 다중 모델 서버 (MMS) 를 위한 구현입니다. SageMaker 에서 다중 모델 엔드포인트를 지원하는 사용자 지정 컨테이너를 설정하고 배포하는 방법을 보여주는 샘플 노트북은 다중 모델 엔드포인트 BYOC 샘플 노트북을 참조하십시오. SageMaker

참고

SageMaker 추론 툴킷은 Python 모델 핸들러만 지원합니다. 다른 언어로 핸들러를 구현하려면 추가 다중 모델 엔드포인트 API를 구현하는 자체 컨테이너를 빌드해야 합니다. 자세한 내용은 다중 모델 엔드포인트를 위한 사용자 지정 컨테이너 계약을 참조하세요.

추론 툴킷을 사용하여 컨테이너를 확장하려면 SageMaker
  1. 모델 핸들러를 생성합니다. MMS는 모델 핸들러를 기대합니다. 이 핸들러는 사전 처리할 함수를 구현하여 모델에서 예측 결과를 가져와서 모델 핸들러에서 출력을 처리하는 Python 파일입니다. 모델 핸들러의 예는 샘플 노트북의 model_handler.py를 참조하세요.

  2. 추론 도구 키트를 가져와서 해당 model_server.start_model_server 함수를 사용해 MMS를 시작합니다. 다음 예는 샘플 노트북의 dockerd-entrypoint.py 파일에서 가져온 것입니다. model_server.start_model_server에 대한 호출은 이전 단계에서 설명한 모델 핸들러를 전달합니다.

    import subprocess import sys import shlex import os from retrying import retry from subprocess import CalledProcessError from sagemaker_inference import model_server def _retry_if_error(exception): return isinstance(exception, CalledProcessError or OSError) @retry(stop_max_delay=1000 * 50, retry_on_exception=_retry_if_error) def _start_mms(): # by default the number of workers per model is 1, but we can configure it through the # environment variable below if desired. # os.environ['SAGEMAKER_MODEL_SERVER_WORKERS'] = '2' model_server.start_model_server(handler_service='/home/model-server/model_handler.py:handle') def main(): if sys.argv[1] == 'serve': _start_mms() else: subprocess.check_call(shlex.split(' '.join(sys.argv[1:]))) # prevent docker exit subprocess.call(['tail', '-f', '/dev/null']) main()
  3. Dockerfile에서 첫 번째 단계에서 모델 핸들러를 복사하고 이전 단계의 Python 파일을 Dockerfile의 진입점으로 지정합니다. 다음 라인은 샘플 노트북에 사용되는 Dockerfile에서 가져온 것입니다.

    # Copy the default custom service file to handle incoming data and inference requests COPY model_handler.py /home/model-server/model_handler.py # Define an entrypoint script for the docker image ENTRYPOINT ["python", "/usr/local/bin/dockerd-entrypoint.py"]
  4. 컨테이너를 빌드하고 등록합니다. 다음과 같은 샘플 노트북의 쉘 스크립트는 컨테이너를 빌드하고 AWS 계정의 Amazon Elastic 컨테이너 레지스트리 리포지토리에 이를 업로드합니다.

    %%sh # The name of our algorithm algorithm_name=demo-sagemaker-multimodel cd container account=$(aws sts get-caller-identity --query Account --output text) # Get the region defined in the current configuration (default to us-west-2 if none defined) region=$(aws configure get region) region=${region:-us-west-2} fullname="${account}.dkr.ecr.${region}.amazonaws.com/${algorithm_name}:latest" # If the repository doesn't exist in ECR, create it. aws ecr describe-repositories --repository-names "${algorithm_name}" > /dev/null 2>&1 if [ $? -ne 0 ] then aws ecr create-repository --repository-name "${algorithm_name}" > /dev/null fi # Get the login command from ECR and execute it directly $(aws ecr get-login --region ${region} --no-include-email) # Build the docker image locally with the image name and then push it to ECR # with the full name. docker build -q -t ${algorithm_name} . docker tag ${algorithm_name} ${fullname} docker push ${fullname}

이제 이 컨테이너를 사용하여 다중 모델 엔드포인트를 배포할 수 있습니다. SageMaker