를 사용하여 모델 배포 TorchServe - Amazon SageMaker

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

를 사용하여 모델 배포 TorchServe

TorchServe 는 에 권장되는 모델 서버로 PyTorch, PyTorch 딥 러닝 컨테이너()에 AWS 사전 설치되어 있습니다DLC. 이 강력한 도구는 모델 크기 또는 배포에 관계없이 CPU, , GPUNeuron 및 Graviton을 포함한 다양한 AWS 인스턴스에 여러 PyTorch 모델을 배포하는 데 높은 성능을 제공하여 고객에게 일관되고 사용자 친화적인 경험을 제공합니다.

TorchServe 는 동적 배치, 마이크로배치, 모델 A/B 테스트, 스트리밍, 토치, XLAtensorRT ONNX 및 를 포함한 다양한 고급 기능을 지원합니다IPEX. 또한 PyTorch의 대형 모델 솔루션인 P 를 원활하게 통합하여 대형 모델을 효율적으로 처리할 수 iPPy있습니다. 또한 는 , Accelerate DeepSpeed, Fast Transformers 등과 같은 인기 있는 오픈 소스 라이브러리에 지원을 TorchServe 확장하여 기능을 더욱 확장합니다. 를 사용하면 TorchServe AWS 사용자는 다양한 하드웨어 구성 및 PyTorch 모델 유형에서 다목적성과 최적화된 성능을 활용하여 모델을 자신 있게 배포하고 제공할 수 있습니다. 자세한 내용은 의 PyTorch 설명서TorchServe 를 GitHub 참조하세요.

다음 표에는 에서 지원하는 가 AWS PyTorch DLCs 나열되어 있습니다 TorchServe.

인스턴스 유형 SageMaker PyTorch DLC 링크

CPU 및 GPU

SageMaker PyTorch 컨테이너

Neuron

PyTorch Neuron 컨테이너

Graviton

SageMaker PyTorch Graviton 컨테이너

다음 섹션에서는 Amazon 에서 빌드 및 테스트 PyTorch DLCs하기 위한 설정에 대해 설명합니다 SageMaker.

시작하기

시작하려면, 다음과 같은 사전 조건이 갖추어졌는지 확인하세요.

  1. AWS 계정에 액세스할 수 있는지 확인합니다. 가 사용자 또는 IAM 역할을 통해 AWS IAM 계정에 액세스할 AWS CLI 수 있도록 환경을 설정합니다. IAM 역할을 사용하는 것이 좋습니다. 개인 계정에서 테스트하기 위해 다음 관리형 권한 정책을 IAM 역할에 연결할 수 있습니다.

  2. 다음 예제와 같이 종속성 설정을 로컬에서 구성합니다.

    from datetime import datetime import os import json import logging import time # External Dependencies: import boto3 from botocore.exceptions import ClientError import sagemaker sess = boto3.Session() sm = sess.client("sagemaker") region = sess.region_name account = boto3.client("sts").get_caller_identity().get("Account") smsess = sagemaker.Session(boto_session=sess) role = sagemaker.get_execution_role() # Configuration: bucket_name = smsess.default_bucket() prefix = "torchserve" output_path = f"s3://{bucket_name}/{prefix}/models" print(f"account={account}, region={region}, role={role}")
  3. 다음 예제와 PyTorch DLC 같이 이미지를 검색합니다.

    SageMaker PyTorch DLC 이미지는 모든 AWS 리전에서 사용할 수 있습니다. 자세한 내용은 DLC 컨테이너 이미지 목록 을 참조하세요.

    baseimage = sagemaker.image_uris.retrieve( framework="pytorch", region="<region>", py_version="py310", image_scope="inference", version="2.0.1", instance_type="ml.g4dn.16xlarge", )
  4. 로컬 워크스페이스를 생성하세요.

    mkdir -p workspace/

패키지 추가하기

다음 섹션에서는 DLC 이미지에 패키지를 PyTorch 추가하고 사전 설치하는 방법을 설명합니다.

BYOC 사용 사례

다음 단계에서는 이미지에 패키지를 PyTorch DLC 추가하는 방법을 간략하게 설명합니다. 컨테이너 사용자 지정에 대한 자세한 내용은 AWS 딥 러닝 컨테이너 사용자 지정 이미지 구축을 참조하세요.

  1. 도커 이미지에 패키지를 추가하려는 경우를 가정해 PyTorch DLC 보겠습니다. 다음 예제와 같이 docker 디렉터리 아래에 Dockerfile을 생성합니다.

    mkdir -p workspace/docker cat workspace/docker/Dockerfile ARG BASE_IMAGE FROM $BASE_IMAGE #Install any additional libraries RUN pip install transformers==4.28.1
  2. 다음 build_and_push.sh 스크립트를 사용하여 사용자 지정된 도커 이미지를 빌드하고 게시합니다.

    # Download script build_and_push.sh to workspace/docker ls workspace/docker build_and_push.sh Dockerfile # Build and publish your docker image reponame = "torchserve" versiontag = "demo-0.1" ./build_and_push.sh {reponame} {versiontag} {baseimage} {region} {account}

SageMaker 사전 설치 사용 사례

다음 예제에서는 컨테이너에 패키지를 PyTorch DLC 사전 설치하는 방법을 보여줍니다. requirements.txt 파일은 workspace/code 디렉터리 아래에 로컬로 생성해야 합니다.

mkdir -p workspace/code cat workspace/code/requirements.txt transformers==4.28.1

모델 아티팩트 생성 TorchServe

다음 예제에서는 사전 훈련된 MNIST 모델 을 사용합니다. 디렉터리를 생성하고workspace/mnist, TorchServe 사용자 지정 서비스 지침 에 따라 mnist_handler.py를 구현하고, model-config.yaml 에서 모델 파라미터(배치 크기 및 작업자 등)를 구성합니다. 그런 다음 TorchServe 도구를 사용하여 모델 아티팩트를 torch-model-archiver 빌드하고 Amazon S3에 업로드합니다.

  1. model-config.yaml에서 모델 파라미터를 구성합니다.

    ls -al workspace/mnist-dev mnist.py mnist_handler.py mnist_cnn.pt model-config.yaml # config the model cat workspace/mnist-dev/model-config.yaml minWorkers: 1 maxWorkers: 1 batchSize: 4 maxBatchDelay: 200 responseTimeout: 300
  2. 를 사용하여 모델 아티팩트를 빌드합니다torch-model-archiver .

    torch-model-archiver --model-name mnist --version 1.0 --model-file workspace/mnist-dev/mnist.py --serialized-file workspace/mnist-dev/mnist_cnn.pt --handler workspace/mnist-dev/mnist_handler.py --config-file workspace/mnist-dev/model-config.yaml --archive-format tgz

    패키지를 사전 설치하고자 하는 경우, code 디렉터리를 tar.gz 파일에 반드시 포함시켜야 합니다.

    cd workspace torch-model-archiver --model-name mnist --version 1.0 --model-file mnist-dev/mnist.py --serialized-file mnist-dev/mnist_cnn.pt --handler mnist-dev/mnist_handler.py --config-file mnist-dev/model-config.yaml --archive-format no-archive cd mnist mv ../code . tar cvzf mnist.tar.gz .
  3. mnist.tar.gz를 Amazon S3에 업로드합니다.

    # upload mnist.tar.gz to S3 output_path = f"s3://{bucket_name}/{prefix}/models" aws s3 cp mnist.tar.gz {output_path}/mnist.tar.gz

단일 모델 엔드포인트를 사용하여 로 배포 TorchServe

다음 예제에서는 Amazon SageMaker Python SDK을 사용하여 단일 모델 실시간 추론 엔드포인트 를 생성하고, 엔드포인트에 모델을 배포하고, 엔드포인트를 테스트하는 방법을 보여줍니다.

from sagemaker.model import Model from sagemaker.predictor import Predictor # create the single model endpoint and deploy it on SageMaker model = Model(model_data = f'{output_path}/mnist.tar.gz', image_uri = baseimage, role = role, predictor_cls = Predictor, name = "mnist", sagemaker_session = smsess) endpoint_name = 'torchserve-endpoint-' + time.strftime("%Y-%m-%d-%H-%M-%S", time.gmtime()) predictor = model.deploy(instance_type='ml.g4dn.xlarge', initial_instance_count=1, endpoint_name = endpoint_name, serializer=JSONSerializer(), deserializer=JSONDeserializer()) # test the endpoint import random import numpy as np dummy_data = {"inputs": np.random.rand(16, 1, 28, 28).tolist()} res = predictor.predict(dummy_data)

다중 모델 엔드포인트를 사용하여 로 배포 TorchServe

다중 모델 엔드포인트는 하나의 엔드포인트 뒤에서 많은 수의 모델을 호스팅하기 위한 확장 가능하고 비용 효율적인 솔루션입니다. 이는 동일한 리소스 플릿를 공유하고 컨테이너가 모든 모델을 호스팅할 수 있도록 지원함으로써 엔드포인트 활용도를 높여줍니다. 또한 SageMaker 는 동적으로 모델을 로드 및 언로드하고 트래픽 패턴에 따라 리소스를 조정하기 때문에 배포 오버헤드를 줄입니다. 다중 모델 엔드포인트는 가속화된 컴퓨팅 파워가 요구되는 딥 러닝 및 생성형 AI 모델에 특히 유용합니다.

SageMaker 다중 모델 엔드포인트 TorchServe 에서 를 사용하면 익숙한 서비스 스택을 사용하는 동시에 SageMaker 다중 모델 엔드포인트가 제공하는 리소스 공유 및 간소화된 모델 관리를 활용하여 개발 속도를 높일 수 있습니다.

다음 예제에서는 다중 모델 엔드포인트를 생성하고, 엔드포인트에 모델을 배포하고, Amazon SageMaker Python SDK을 사용하여 엔드포인트를 테스트하는 방법을 보여줍니다. 이 노트북 예제에서 추가적인 세부 정보를 확인할 수 있습니다.

from sagemaker.multidatamodel import MultiDataModel from sagemaker.model import Model from sagemaker.predictor import Predictor # create the single model endpoint and deploy it on SageMaker model = Model(model_data = f'{output_path}/mnist.tar.gz', image_uri = baseimage, role = role, sagemaker_session = smsess) endpoint_name = 'torchserve-endpoint-' + time.strftime("%Y-%m-%d-%H-%M-%S", time.gmtime()) mme = MultiDataModel( name = endpoint_name, model_data_prefix = output_path, model = model, sagemaker_session = smsess) mme.deploy( initial_instance_count = 1, instance_type = "ml.g4dn.xlarge", serializer=sagemaker.serializers.JSONSerializer(), deserializer=sagemaker.deserializers.JSONDeserializer()) # list models list(mme.list_models()) # create mnist v2 model artifacts cp mnist.tar.gz mnistv2.tar.gz # add mnistv2 mme.add_model(mnistv2.tar.gz) # list models list(mme.list_models()) predictor = Predictor(endpoint_name=mme.endpoint_name, sagemaker_session=smsess) # test the endpoint import random import numpy as np dummy_data = {"inputs": np.random.rand(16, 1, 28, 28).tolist()} res = predictor.predict(date=dummy_data, target_model="mnist.tar.gz")

지표

TorchServe 는 시스템 수준 및 모델 수준 지표를 모두 지원합니다. TS_METRICS_MODE 환경 변수를 통해 지표를 로그 형식 모드 또는 Prometheus 모드에서 활성화하는 것이 가능합니다. TorchServe 중앙 지표 구성 파일을 사용하여 요청 수, 지연 시간, 메모리 사용량, GPU 사용률 등과 같이 추적할 지표 유형을 metrics.yaml 지정할 수 있습니다. 이 파일을 참조하면 배포된 모델의 성능과 상태에 대한 인사이트를 얻고 TorchServe 서버의 동작을 실시간으로 효과적으로 모니터링할 수 있습니다. 자세한 내용은 TorchServe 지표 설명서 섹션을 참조하세요.

Amazon 로그 필터를 통해 StatsD 형식과 유사한 TorchServe 지표 CloudWatch 로그에 액세스할 수 있습니다. 다음은 TorchServe 지표 로그의 예입니다.

CPUUtilization.Percent:0.0|#Level:Host|#hostname:my_machine_name,timestamp:1682098185 DiskAvailable.Gigabytes:318.0416717529297|#Level:Host|#hostname:my_machine_name,timestamp:1682098185