기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
TorchServe는 PyTorch 용으로 권장되는 모델 서버이며, AWS PyTorch Deep Learning Container (DLC)에 사전 설치되어 있습니다. 이 강력한 도구는 고객에게 일관되고 사용자 친화적인 경험을 제공하여 모델 크기 또는 배포에 관계없이 CPU, GPU, Neuron 및 Graviton을 포함한 다양한 AWS 인스턴스에 여러 PyTorch 모델을 배포하는 데 높은 성능을 제공합니다.
TorchServe는 동적 일괄 처리, 마이크로 일괄처리, 모델 A/B 테스트, 스트리밍, 토치 XLA, TensorRT, ONNX, IPEX를 비롯한 고급 기능을 폭넓게 지원합니다. 또한 PyTorch의 대규모 모델 솔루션인 PiPPY와의 원활한 통합으로 대규모 모델을 효율적으로 처리할 수 있습니다. 그뿐 아니라, TorchServe는 DeepSpeed, Accelerate, Fast Transformer 등과 같은 인기 있는 오픈소스 라이브러리도 추가로 지원하므로, 더욱 다양한 기능을 활용할 수 있습니다. TorchServe를 사용하면 AWS 사용자는 PyTorch 모델을 자신 있게 배포하고 제공할 수 있으며 다양한 하드웨어 구성 및 모델 유형에서 다목적성과 최적화된 성능을 활용할 수 있습니다. 더 자세한 내용은 PyTorch 설명서
다음 표에는 AWS TorchServe에서 지원하는 PyTorch DLCs 나열되어 있습니다. TorchServe
인스턴스 유형 | SageMaker AI PyTorch DLC 링크 |
---|---|
CPU 및 GPU |
|
Neuron |
|
Graviton |
다음 섹션에서는 Amazon SageMaker AI에서 PyTorch DLCs를 빌드하고 테스트하기 위한 설정을 설명합니다.
시작
시작하려면, 다음과 같은 사전 조건이 갖추어졌는지 확인하세요.
-
AWS 계정에 액세스할 수 있는지 확인합니다. 가 AWS IAM 사용자 또는 IAM 역할을 통해 계정에 액세스할 AWS CLI 수 있도록 환경을 설정합니다. IAM 역할을 사용하는 것을 추천합니다. 사용자의 개인 계정에서 테스트를 수행하기 위해 다음과 같은 관리형 권한 정책을 IAM 역할에 연결할 수 있습니다.
-
다음 예제와 같이 종속성 설정을 로컬에서 구성합니다.
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}")
-
다음 예제와 같이 해당 PyTorch DLC 이미지를 가져옵니다.
SageMaker AI 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", ) -
로컬 워크스페이스를 생성하세요.
mkdir -p workspace/
패키지 추가하기
다음 섹션은 PyTorch DLC 이미지에 패키지를 추가하고 사전 설치하는 방법에 대해 설명합니다.
BYOC 활용 사례
다음은 PyTorch DLC 이미지에 패키지를 추가하는 단계별 방법입니다. 컨테이너 사용자 지정에 대한 자세한 내용은 AWS 딥 러닝 컨테이너 사용자 지정 이미지 빌드를
-
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
-
다음 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 AI 사전 설치 사용 사례
다음 예제는 PyTorch DLC 컨테이너에 패키지를 사전 설치하는 방법을 보여줍니다. requirements.txt
파일은 workspace/code
디렉터리 아래에 로컬로 생성해야 합니다.
mkdir -p workspace/code
cat workspace/code/requirements.txt
transformers==4.28.1
TorchServe 모델 아티팩트 생성하기
다음 예제에서는 사전 훈련된 MNIST 모델workspace/mnist
디렉터리를 생성하고, TorchServe 사용자 지정 서비스 지침torch-model-archiver
를 사용하여 모델 아티팩트를 빌드하고 Amazon S3에 업로드합니다.
-
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
-
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 .
-
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 AI
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는 동적으로 모델을 로드 및 언로드하고 트래픽 패턴에 따라 리소스를 조정하기 때문에 배포 오버헤드를 줄입니다. 다중 모델 엔드포인트는 가속화된 컴퓨팅 파워가 요구되는 딥 러닝 및 생성형 AI 모델에 특히 유용합니다.
SageMaker AI 다중 모델 엔드포인트에서 TorchServe를 사용하면 SageMaker AI 다중 모델 엔드포인트가 제공하는 리소스 공유 및 간소화된 모델 관리를 활용하면서 익숙한 서비스 스택을 사용하여 개발 속도를 높일 수 있습니다.
다음 예제는 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 AI
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")
Metrics
TorchServe는 시스템 수준의 지표와 모델 수준의 지표를 모두 지원합니다. TS_METRICS_MODE
환경 변수를 통해 지표를 로그 형식 모드 또는 Prometheus 모드에서 활성화하는 것이 가능합니다. TorchServe 중앙 지표 구성 파일인 metrics.yaml
을 사용하여 요청 수, 지연 시간, 메모리 사용량, GPU 사용률 등과 같이 추적을 수행할 지표의 유형을 지정할 수 있습니다. 이 파일을 참조하면, 배포된 모델의 성능 및 상태에 대한 인사이트를 얻고 TorchServe 서버의 실시간 동작을 효과적으로 모니터링할 수 있게 됩니다. 더 자세한 내용은 TorchServe 지표 설명서
Amazon CloudWatch 로그 필터를 통해 StatSD 형식과 유사한 TorchServe 지표 로그에 액세스하는 것이 가능합니다. 다음은 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