Amazon SageMaker에서 TorchServe로 동적 배치 추론을 사용하여 추론 작업 최적화

소스 노드 : 1884601

딥 러닝에서 일괄 처리는 모델에 여러 입력을 공급하는 것을 의미합니다. 훈련 중에는 필수적이지만 추론 시간 동안에도 비용을 관리하고 처리량을 최적화하는 데 매우 도움이 될 수 있습니다. 하드웨어 가속기는 병렬 처리에 최적화되어 있으며 일괄 처리는 컴퓨팅 용량을 포화시키는 데 도움이 되며 종종 더 높은 처리량으로 이어집니다.

일괄 처리는 프로덕션 환경에서 모델을 배포하는 동안 여러 시나리오에서 도움이 될 수 있습니다. 여기에서는 이를 크게 두 가지 사용 사례로 분류합니다.

  • 여러 추론 요청이 여러 클라이언트로부터 수신되고 동적으로 일괄 처리되어 서비스 모델에 제공되는 실시간 애플리케이션입니다. 이러한 사용 사례에서는 일반적으로 지연 시간이 중요합니다.
  • 여러 입력 또는 요청이 클라이언트 측에서 일괄 처리되어 제공 모델로 전송되는 오프라인 애플리케이션입니다. 이러한 사용 사례에서는 더 높은 처리량을 목표로 하는 경우가 많으며 이는 비용 관리에 도움이 됩니다. 사용 사례의 예로는 비디오 분석 및 모델 평가가 있습니다.

아마존 세이지 메이커 추론 작업에 널리 사용되는 두 가지 옵션을 제공합니다. 실시간 애플리케이션의 경우 SageMaker 호스팅은 수신된 요청의 동적 일괄 처리를 처리하는 백엔드 제공 라이브러리로 TorchServe를 사용합니다. 오프라인 애플리케이션의 경우 SageMaker 일괄 변환 작업을 사용할 수 있습니다. 이 게시물에서는 시작하는 데 도움이 되도록 각 옵션의 예를 살펴보겠습니다.

TorchServe는 기본적으로 SageMaker와 통합 를 통해 SageMaker PyTorch 추론 툴킷, SageMaker 호스팅을 사용하여 TorchServe에 PyTorch 모델을 쉽게 배포할 수 있습니다. 사용자 지정 Docker 이미지를 사용하여 환경을 추가로 사용자 지정해야 하는 경우도 있을 수 있습니다. 이 게시물에서는 먼저 기본 SageMaker PyTorch 추론 도구 키트를 사용하여 실시간 엔드포인트를 배포하고 처리량을 최적화하기 위해 배치 크기를 구성하는 방법을 보여줍니다. 두 번째 예에서는 사용자 지정 Docker 이미지를 사용하여 배치 추론 작업을 최적화하기 위한 환경 변수로 사용할 수 없는 고급 TorchServe 구성을 구성하는 방법을 보여줍니다.

일괄 추론 모범 사례

일괄 처리는 대기 시간을 희생하면서 특정 시간 내에 더 많은 수의 추론을 완료하는 데 도움이 되므로 처리량을 늘리고 리소스를 최적화할 수 있습니다. 더 높은 처리량을 위해 모델 배포를 최적화하기 위한 일반적인 지침은 처리량이 감소할 때까지 배치 크기를 늘리는 것입니다. 이는 예측 출력을 얻기 위해 여러 입력(예: 비디오 프레임, 이미지 또는 텍스트)을 일괄 처리하는 오프라인 애플리케이션에 가장 적합합니다.

실시간 애플리케이션의 경우 대기 시간이 주요 관심사인 경우가 많습니다. 더 높은 처리량과 증가된 배치 크기 및 대기 시간 사이에는 균형이 있습니다. 대기 시간 SLA를 충족하기 위해 필요에 따라 조정해야 할 수도 있습니다. 클라우드의 모범 사례 측면에서 특정 추론 수당 비용은 비즈니스 요구 사항을 충족하는 정보에 입각한 결정을 내리는 데 유용한 지침입니다. 비용 관리에 기여하는 한 가지 요소는 올바른 가속기를 선택하는 것입니다. 자세한 내용은 다음을 참조하세요. Amazon SageMaker로 컴퓨터 비전 추론을 위한 최고의 AI 가속기 및 모델 컴파일 선택.

SageMaker의 TorchServe 동적 일괄 처리

횃불 대규모 프로덕션에서 모델을 제공하기 위한 기본 PyTorch 라이브러리입니다. Facebook과 AWS의 공동 개발입니다. TorchServe를 사용하면 모니터링, 사용자 정의 지표 추가, 여러 모델 지원, 보안 관리 API를 통해 작업자 수 확장 및 축소, 추론 및 설명 엔드포인트 제공 등이 가능합니다.

일괄 처리를 지원하기 위해 TorchServe는 동적 일괄 처리 기능을 제공합니다. 지정된 시간 프레임 내에 수신된 요청을 집계하고 일괄 처리한 후 추론을 위해 일괄 처리를 보냅니다. 수신된 요청은 다음을 통해 처리됩니다. 핸들러 토치서브에서. TorchServe에는 여러 가지 기본 핸들러가 있으며 사용 사례가 다루어지지 않는 경우 사용자 정의 핸들러를 작성할 수 있습니다. 사용자 정의 핸들러를 사용할 때 배치 추론 로직이 핸들러에 구현되었는지 확인하세요. 일괄 추론을 지원하는 사용자 정의 핸들러의 예는 다음에서 확인할 수 있습니다. GitHub의.

두 가지 설정을 사용하여 동적 일괄 처리를 구성할 수 있습니다. batch_sizemax_batch_delay, SageMaker의 환경 변수 또는 config.properties TorchServe의 파일입니다(사용자 정의 컨테이너를 사용하는 경우). TorchServe는 최대 배치 크기(batch_size) 또는 지정된 시간 창을 통해 일괄 요청을 기다립니다. max_batch_delay.

SageMaker와 TorchServe 통합을 통해 이제 SageMaker PyTorch 모델을 정의할 수 있는 SageMaker에 기본적으로 PyTorch 모델을 배포할 수 있습니다. SageMaker PyTorch에 대한 진입점으로 전달된 스크립트에 사용자 지정 모델 로딩, 추론, 전처리 및 후처리 논리를 추가할 수 있습니다(다음 예제 코드 참조). 또는 사용자 지정 컨테이너를 사용하여 모델을 배포할 수 있습니다. 자세한 내용은 다음을 참조하세요. SageMaker PyTorch 모델 서버.

환경 변수를 통해 SageMaker에서 PyTorch 모델의 배치 크기를 설정할 수 있습니다. 커스텀 컨테이너를 사용하기로 선택한 경우 번들로 묶을 수 있습니다. 설정 in config.properties TorchServe에서 모델을 패키징할 때 모델과 함께. 다음 코드 조각은 환경 변수를 사용하여 배치 크기를 설정하는 방법과 SageMaker에 PyTorch 모델을 배포하는 방법의 예를 보여줍니다.

from SageMaker.pytorch.model import PyTorchModel env_variables_dict = { "SAGEMAKER_TS_BATCH_SIZE": "3", "SAGEMAKER_TS_MAX_BATCH_DELAY": "100000"
} pytorch_model = PyTorchModel( model_data=model_artifact, role=role, source_dir="code", framework_version='1.9', entry_point="inference.py", env=env_variables_dict
) predictor = pytorch_model.deploy(initial_instance_count=1, instance_type="ml.c5.2xlarge", serializer=SageMaker.serializers.JSONSerializer(), deserializer=SageMaker.deserializers.BytesDeserializer())

코드 조각에서 model_artifact 훈련된 모델을 다시 로드하는 데 필요한 모든 파일을 참조합니다. 이 파일은 .tar 파일에 보관되어 아마존 단순 스토리지 서비스 (Amazon S3) 버킷. inference.py는 TorchServe 사용자 정의 핸들러와 유사합니다. 여기에는 모델 초기화, 수신된 요청의 전처리 및 후처리, 추론 논리를 수용하기 위해 재정의할 수 있는 여러 기능이 있습니다.

다음 수첩 Hugging Face BERT 모델 배포의 전체 예를 보여줍니다.

커스텀 컨테이너가 필요한 경우 커스텀 컨테이너 이미지를 빌드하고 이를 Amazon Elastic Container Registry (Amazon ECR) 리포지토리. 이 경우 모델 아티팩트는 핸들러와 함께 모델 아티팩트를 번들로 묶는 TorchServe .mar 파일일 수 있습니다. SageMaker 배치 변환 작업을 사용하는 다음 섹션에서 이를 시연합니다.

SageMaker 일괄 변환 작업

데이터 세트와 같은 데이터 소스에서 요청이 일괄 처리되는 오프라인 사용 사례의 경우 SageMaker는 다음을 제공합니다. 일괄 변환 작업. 이러한 작업을 사용하면 S3 버킷에서 데이터를 읽고 결과를 대상 S3 버킷에 쓸 수 있습니다. 자세한 내용은 다음을 참조하세요. 일괄 변환을 사용하여 대규모 데이터 세트에서 추론 얻기. 일괄 변환 작업을 사용한 일괄 추론의 전체 예는 다음에서 찾을 수 있습니다. 수첩, 여기서는 FLORES 대회의 기계 번역 모델을 사용합니다. 이 예에서는 SageMaker를 사용하여 사용자 지정 컨테이너를 사용하여 모델의 점수를 매기는 방법을 보여줍니다. 사용자 정의 추론 컨테이너를 사용하면 TorchServe 구성을 추가로 사용자 정의할 수 있습니다. 이 예에서는 TorchServe를 통해 수행할 수 있는 JSON 디코딩을 변경하고 비활성화하려고 합니다. config.properties 파일.

TorchServe용 사용자 정의 핸들러를 사용할 때 핸들러가 일괄 추론 논리를 구현하는지 확인해야 합니다. 각 핸들러에는 전처리, 추론 및 후처리를 수행하는 사용자 정의 함수가 있을 수 있습니다. 일괄 추론을 지원하는 사용자 정의 핸들러의 예는 다음에서 확인할 수 있습니다. GitHub의.

TorchServe(.mar 파일 만들기). 또한 배치 크기 및 JSON 디코딩 세트를 사용하여 TorchServe를 시작하는 Docker 컨테이너에 대한 진입점이 필요합니다. config.properties. 우리는 예제에서 이것을 보여줍니다 수첩.

SageMaker 배치 변환 작업을 수행하려면 S3 버킷의 입력 파일에 액세스해야 합니다. 여기서 입력 파일을 미니 배치로 나누고 추론을 위해 보냅니다. 일괄 변환 작업을 구성할 때 다음 사항을 고려하십시오.

  • 입력 파일(예: 데이터 세트)을 S3 버킷에 배치하고 작업 설정에서 데이터 소스로 설정합니다.
  • 일괄 변환 작업의 결과를 저장할 S3 버킷을 할당합니다.
  • 세트 배치 전략MultiRecordSplitTypeLine 입력 파일에서 미니 배치를 만들기 위해 배치 변환 작업이 필요한 경우. 데이터 세트를 미니 배치로 자동 분할할 수 없는 경우 각 배치를 데이터 원본 S3 버킷에 있는 별도의 입력 파일에 넣어 미니 배치로 나눌 수 있습니다.
  • 배치 크기가 메모리에 맞는지 확인하십시오. SageMaker는 일반적으로 이를 자동으로 처리합니다. 그러나 일괄 처리를 수동으로 나눌 때는 메모리를 기준으로 조정해야 합니다.

다음 코드는 일괄 변환 작업의 예입니다.

s3_bucket_name= 'SageMaker-us-west-2-XXXXXXXX'
batch_input = f"s3://{s3_bucket_name}/folder/jobename_TorchServe_SageMaker/"
batch_output = f"s3://{s3_bucket_name}/folder/jobname_TorchServe_SageMaker_output/" batch_job_name = 'job-batch' + time.strftime("%Y-%m-%d-%H-%M-%S", time.gmtime())
batch_job_name request = { "ModelClientConfig": { "InvocationsTimeoutInSeconds": 3600, "InvocationsMaxRetries": 1, }, "TransformJobName": batch_job_name, "ModelName": model_name, "MaxConcurrentTransforms":1, "BatchStrategy": "MultiRecord", "TransformOutput": {"S3OutputPath": batch_output, "AssembleWith": "Line", "Accept": "application/json"}, "TransformInput": { "DataSource": { "S3DataSource": {"S3DataType": "S3Prefix", "S3Uri": batch_input} }, "SplitType" : "Line", "ContentType": "application/json", }, "TransformResources": {"InstanceType": "ml.p2.xlarge", "InstanceCount": 1},
}

이전 설정을 사용하고 변환 작업을 시작하면 소스 S3 버킷의 입력 파일을 일괄적으로 읽고 추론을 위해 보냅니다. 결과는 출력에 지정된 S3 버킷에 다시 기록됩니다.

다음 코드 조각은 이전 설정을 사용하여 작업을 생성하고 시작하는 방법을 보여줍니다.

sm.create_transform_job(**request) while True: response = sm.describe_transform_job(TransformJobName=batch_job_name) status = response["TransformJobStatus"] if status == "Completed": print("Transform job ended with status: " + status) break if status == "Failed": message = response["FailureReason"] print("Transform failed with the following error: {}".format(message)) raise Exception("Transform job failed") print("Transform job is still in status: " + status) time.sleep(30)

결론

이 게시물에서는 SageMaker가 온라인 및 오프라인 추론을 위해 제공하는 두 가지 모드를 검토했습니다. 전자는 TorchServe에서 제공되는 동적 일괄 처리를 사용하여 여러 클라이언트의 요청을 일괄 처리합니다. 후자는 SageMaker 변환 작업을 사용하여 S3 버킷의 입력 파일 요청을 일괄 처리하고 추론을 실행합니다.

또한 기본 SageMaker PyTorch 추론 도구 키트 컨테이너 이미지를 사용하여 SageMaker에서 모델을 제공하는 방법과 고급 TorchServe 구성 설정이 필요한 사용 사례에 대해 사용자 지정 컨테이너를 사용하는 방법을 보여주었습니다.

TorchServe가 PyTorch 커뮤니티의 요구 사항을 충족하기 위해 계속해서 발전함에 따라 새로운 기능이 SageMaker에 통합되어 프로덕션에서 모델을 제공하기 위한 효율적인 방법을 제공합니다. 자세한 내용은 다음을 확인하세요. TorchServe GitHub 저장소 그리고 SageMaker 예.


저자에 관하여

피 응 우옌 AWS의 솔루션 아키텍트는 데이터 레이크, 분석, 의미론 기술 및 기계 학습에 특별히 중점을두고 고객의 클라우드 여정을 지원합니다. 여가 시간에는 자전거를 타고 출근하거나, 아들의 축구 팀을지도하거나, 가족과 함께 자연 산책을 즐길 수 있습니다.

니힐 쿨카르니 AWS Machine Learning을 사용하는 소프트웨어 개발자로서 클라우드에서 기계 학습 워크로드의 성능을 높이는 데 중점을 두고 있으며 훈련 및 추론을 위한 AWS Deep Learning Containers의 공동 제작자입니다. 그는 분산 딥러닝 시스템에 열정을 갖고 있습니다. 업무 외에는 책 읽기, 기타 연주, 피자 만들기 등을 즐깁니다.

하미드 쇼자나제리 OSS 고성능 모델 최적화 및 서비스를 담당하는 Pytorch의 파트너 엔지니어입니다. Hamid는 컴퓨터 비전 분야의 박사 학위를 보유하고 있으며 호주, 말레이시아의 멀티미디어 연구소에서 연구원으로 근무했으며 Opus.ai에서 NLP 책임자로 일했습니다. 그는 어려운 문제에 대한 간단한 해결책을 찾는 것을 좋아하며 여가 시간에는 미술 애호가입니다.

기타 차우한 스타트업 및 Fortune 500대 기업을 위한 복원력 있고 취약하지 않은 대규모 분산 플랫폼 구축에 대한 전문 지식을 바탕으로 Meta AI에서 AI 파트너 엔지니어링을 이끌고 있습니다. 그녀의 팀은 전략적 파트너, 업계 전반의 기계 학습 리더 및 모든 주요 클라우드 서비스 제공업체와 협력하여 새로운 AI 제품 서비스 및 경험을 구축하고 출시합니다. PyTorch 모델을 연구에서 생산까지 활용합니다. 그녀는 2019년 Women in IT – Silicon Valley – CTO의 우승자이자 ACM 우수 연사이자 AI 윤리, 딥 러닝, 블록체인, IoT에 이르는 주제에 대한 사고 리더입니다. 그녀는 AI를 선한 목적으로 활용하는 데 열정을 쏟고 있습니다.

출처: https://aws.amazon.com/blogs/machine-learning/optimize-your-inference-jobs-using-dynamic-batch-inference-with-torchserve-on-amazon-sagemaker/

타임 스탬프 :

더보기 AWS 머신 러닝 블로그