쿠키 기본 설정 선택

당사는 사이트와 서비스를 제공하는 데 필요한 필수 쿠키 및 유사한 도구를 사용합니다. 고객이 사이트를 어떻게 사용하는지 파악하고 개선할 수 있도록 성능 쿠키를 사용해 익명의 통계를 수집합니다. 필수 쿠키는 비활성화할 수 없지만 '사용자 지정' 또는 ‘거부’를 클릭하여 성능 쿠키를 거부할 수 있습니다.

사용자가 동의하는 경우 AWS와 승인된 제3자도 쿠키를 사용하여 유용한 사이트 기능을 제공하고, 사용자의 기본 설정을 기억하고, 관련 광고를 비롯한 관련 콘텐츠를 표시합니다. 필수가 아닌 모든 쿠키를 수락하거나 거부하려면 ‘수락’ 또는 ‘거부’를 클릭하세요. 더 자세한 내용을 선택하려면 ‘사용자 정의’를 클릭하세요.

를 사용하여 Amazon SageMaker AI에서 모델 생성 ModelBuilder

포커스 모드
를 사용하여 Amazon SageMaker AI에서 모델 생성 ModelBuilder - Amazon SageMaker AI

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

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

SageMaker AI 엔드포인트에서 모델을 배포하기 위해 준비하려면 모델 이미지 선택, 엔드포인트 구성 설정, 직렬화 및 역직렬화 함수를 코딩하여 서버 및 클라이언트와 데이터를 주고받고, 모델 종속성을 식별하고, Amazon S3에 업로드하는 등 여러 단계가 필요합니다. ModelBuilder는 초기 설정 및 배포의 복잡성을 줄여 단일 단계에서 배포 가능한 모델을 생성하는 데 도움이 됩니다.

ModelBuilder는 다음 작업을 수행할 수 있습니다.

  • XGBoost 또는와 같은 다양한 프레임워크를 사용하여 훈련된 기계 학습 모델을 한 번에 배포 가능한 모델 PyTorch 로 변환합니다.

  • 컨테이너를 수동으로 지정할 필요가 없도록 모델 프레임워크를 기반으로 자동 컨테이너 선택을 수행합니다. 자체 컨테이너를에 전달하여 자체 컨테이너URI를 가져올 수 있습니다ModelBuilder.

  • 서버에서 반환한 결과의 추론 및 역직렬화를 위해 서버로 전송하기 전에 클라이언트 측의 데이터 직렬화를 처리합니다. 수동 처리 없이 데이터의 형식이 올바르게 지정됩니다.

  • 종속성 자동 캡처를 활성화하고 모델 서버 기대치에 따라 모델을 패키징합니다. ModelBuilder의 종속성 자동 캡처는 종속성을 동적으로 로드하기 위한 최선의 방법입니다. (자동 캡처를 로컬에서 테스트하고 필요에 맞게 종속성을 업데이트하는 것이 좋습니다.)

  • 대규모 언어 모델(LLM) 사용 사례의 경우는 SageMaker AI 엔드포인트에서 호스팅할 때 더 나은 성능을 위해 배포할 수 있는 제공 속성의 로컬 파라미터 튜닝을 선택적으로 수행합니다.

  • TorchServe, Triton 및 컨테이너와 같은 널리 사용되는 모델 서버 DJLServing 및 TGI 컨테이너 대부분을 지원합니다.

를 사용하여 모델 빌드 ModelBuilder

ModelBuilder는 XGBoost 또는 같은 프레임워크 모델 PyTorch또는 사용자 지정 추론 사양을 가져와 배포 가능한 모델로 변환하는 Python 클래스입니다.는 배포를 위한 아티팩트를 생성하는 빌드 함수를 ModelBuilder 제공합니다. 생성된 모델 아티팩트는 모델 서버에 따라 다르며, 입력 중 하나로 지정할 수도 있습니다. ModelBuilder 클래스에 대한 자세한 내용은 섹션을 참조하세요ModelBuilder.

다음 다이어그램은 ModelBuilder를 사용할 때의 전체 모델 생성 워크플로를 보여줍니다. ModelBuilder는 스키마와 함께 모델 또는 추론 사양을 수락하여 배포 전에 로컬에서 테스트할 수 있는 배포 가능 모델을 생성합니다.

ModelBuilder를 사용한 모델 생성 및 배포 흐름.

ModelBuilder는 적용하려는 모든 사용자 지정을 처리할 수 있습니다. 그러나 프레임워크 모델을 배포하기 위해 모델 빌더는 최소한 모델, 샘플 입력 및 출력, 역할을 기대합니다. 다음 코드 예제에서는 프레임워크 모델과 최소 인수가 있는 SchemaBuilder 인스턴스(엔드포인트 입력 및 출력을 직렬화 및 역직렬화하기 위한 해당 함수를 추론하기 위해)를 사용하여 ModelBuilder를 호출합니다. 컨테이너가 지정되지 않고 패키징된 종속성이 전달되지 않습니다. 모델을 빌드하면 SageMaker AI가 이러한 리소스를 자동으로 유추합니다.

from sagemaker.serve.builder.model_builder import ModelBuilder from sagemaker.serve.builder.schema_builder import SchemaBuilder model_builder = ModelBuilder( model=model, schema_builder=SchemaBuilder(input, output), role_arn="execution-role", )

다음 코드 샘플은 추가 사용자 지정과 함께 모델 대신 추론 사양(InferenceSpec 인스턴스)으로 ModelBuilder를 호출합니다. 이 경우 모델 빌더에 대한 호출에는 모델 아티팩트를 저장하는 경로가 포함되며 사용 가능한 모든 종속성의 자동 캡처도 켜집니다. InferenceSpec에 대한 자세한 내용은 요청의 모델 로드 및 처리 사용자 지정 섹션을 참조하세요.

model_builder = ModelBuilder( mode=Mode.LOCAL_CONTAINER, model_path=model-artifact-directory, inference_spec=your-inference-spec, schema_builder=SchemaBuilder(input, output), role_arn=execution-role, dependencies={"auto": True} )

직렬화 및 역직렬화 방법 정의

SageMaker AI 엔드포인트를 호출할 때 데이터는 다른 MIME 유형의 HTTP페이로드를 통해 전송됩니다. 예를 들어 추론을 위해 엔드포인트로 전송된 이미지는 클라이언트 측에서 바이트로 변환되고 HTTP페이로드를 통해 엔드포인트로 전송되어야 합니다. 엔드포인트가 페이로드를 수신하면 바이트 문자열을 모델에서 예상되는 데이터 유형으로 역직렬화해야 합니다(서버 측 역직렬화라고도 함). 모델이 예측을 완료한 후 결과를 바이트로 직렬화해야 합니다. 바이트는 HTTP페이로드를 통해 사용자 또는 클라이언트로 다시 전송할 수 있습니다. 클라이언트가 응답 바이트 데이터를 수신하면 클라이언트 측 역직렬화를 수행하여 바이트 데이터를와 같은 예상 데이터 형식으로 다시 변환해야 합니다JSON. 최소한 다음 작업에 대한 데이터를 변환해야 합니다.

  1. 추론 요청 직렬화(클라이언트가 처리)

  2. 추론 요청 역직렬화(서버 또는 알고리즘이 처리)

  3. 페이로드에 대해 모델 호출 및 응답 페이로드 다시 전송

  4. 추론 응답 직렬화(서버 또는 알고리즘이 처리)

  5. 추론 응답 역직렬화(클라이언트가 처리)

다음 다이어그램은 엔드포인트를 호출할 때 발생하는 직렬화 및 역직렬화 프로세스를 보여줍니다.

서버 데이터 직렬화 및 역직렬화에 대한 클라이언트 다이어그램입니다.

SchemaBuilder에 샘플 입력 및 출력을 제공하면 스키마 빌더는 입력 및 출력을 직렬화 및 역직렬화하기 위한 해당 마샬링 함수를 생성합니다. CustomPayloadTranslator를 사용하여 직렬화 함수를 추가로 사용자 지정할 수 있습니다. 하지만 대부분의 경우 다음과 같은 간단한 직렬화기가 작동합니다.

input = "How is the demo going?" output = "Comment la démo va-t-elle?" schema = SchemaBuilder(input, output)

에 대한 자세한 내용은 섹션을 SchemaBuilder참조하세요SchemaBuilder.

다음 코드 조각은 클라이언트 및 서버 측에서 직렬화 및 역직렬화 함수를 모두 사용자 지정하려는 예제를 간략하게 설명합니다. CustomPayloadTranslator를 사용하여 자체 요청 및 응답 변환기를 정의하고 이러한 변환기를 SchemaBuilder에 전달할 수 있습니다.

모델 빌더는 변환기에 입력 및 출력을 포함시킴으로써 모델이 기대하는 데이터 형식을 추출할 수 있습니다. 예를 들어 샘플 입력이 원시 이미지이고 사용자 지정 변환기가 이미지를 잘라내고 잘린 이미지를 서버로 텐서로 보낸다고 가정해 보겠습니다. ModelBuilder는 클라이언트와 서버 측의 데이터를 변환하는 방법을 도출하기 위해 원시 입력과 사용자 지정 전처리 또는 후처리 코드를 모두 필요로 합니다.

from sagemaker.serve import CustomPayloadTranslator # request translator class MyRequestTranslator(CustomPayloadTranslator): # This function converts the payload to bytes - happens on client side def serialize_payload_to_bytes(self, payload: object) -> bytes: # converts the input payload to bytes ... ... return //return object as bytes # This function converts the bytes to payload - happens on server side def deserialize_payload_from_stream(self, stream) -> object: # convert bytes to in-memory object ... ... return //return in-memory object # response translator class MyResponseTranslator(CustomPayloadTranslator): # This function converts the payload to bytes - happens on server side def serialize_payload_to_bytes(self, payload: object) -> bytes: # converts the response payload to bytes ... ... return //return object as bytes # This function converts the bytes to payload - happens on client side def deserialize_payload_from_stream(self, stream) -> object: # convert bytes to in-memory object ... ... return //return in-memory object

다음 예제와 같이 SchemaBuilder 객체를 생성할 때 이전에 정의한 사용자 지정 변환기와 함께 샘플 입력 및 출력을 전달합니다.

my_schema = SchemaBuilder( sample_input=image, sample_output=output, input_translator=MyRequestTranslator(), output_translator=MyResponseTranslator() )

그런 다음 이전에 정의한 사용자 지정 변환기와 함께 샘플 입력 및 출력을 SchemaBuilder 객체에 전달합니다.

my_schema = SchemaBuilder( sample_input=image, sample_output=output, input_translator=MyRequestTranslator(), output_translator=MyResponseTranslator() )

다음 섹션에서는 ModelBuilder를 사용하여 모델을 빌드하고 지원 클래스를 사용하여 사용 사례에 맞게 환경을 사용자 지정하는 방법을 자세히 설명합니다.

요청의 모델 로드 및 처리 사용자 지정

InferenceSpec를 통해 자체 추론 코드를 제공하면 추가 사용자 지정 계층이 제공됩니다. InferenceSpec를 사용하면 모델이 로드되는 방식과 수신 추론 요청을 처리하는 방식을 사용자 지정하여 기본 로드 및 추론 처리 메커니즘을 우회할 수 있습니다. 이러한 유연성은 비표준 모델 또는 사용자 지정 추론 파이프라인으로 작업할 때 특히 유용합니다. invoke 메서드를 사용자 지정하여 모델이 수신 요청을 사전 처리하고 사후 처리하는 방식을 제어할 수 있습니다. 이 invoke 메서드는 모델이 추론 요청을 올바르게 처리하도록 합니다. 다음 예제에서는 InferenceSpec를 사용하여 HuggingFace 파이프라인을 사용하여 모델을 생성합니다. 에 대한 자세한 내용은 섹션을 InferenceSpec참조하세요InferenceSpec.

from sagemaker.serve.spec.inference_spec import InferenceSpec from transformers import pipeline class MyInferenceSpec(InferenceSpec): def load(self, model_dir: str): return pipeline("translation_en_to_fr", model="t5-small") def invoke(self, input, model): return model(input) inf_spec = MyInferenceSpec() model_builder = ModelBuilder( inference_spec=your-inference-spec, schema_builder=SchemaBuilder(X_test, y_pred) )

다음 예제에서는 이전 예제의 보다 사용자 지정된 변형을 보여줍니다. 모델은 종속성이 있는 추론 사양으로 정의됩니다. 이 경우 추론 사양의 코드는 언어 세그먼트 패키지에 따라 달라집니다. dependencies에 대한 인수에는 Git을 사용하여 빌더가 lang-segment를 설치하도록 지시하는 문이 포함되어 있습니다. 모델 빌더는 사용자가 종속성을 사용자 지정 설치하도록 지시하므로 auto 키는 종속성의 자동 캡처를 끄는 데 False입니다.

model_builder = ModelBuilder( mode=Mode.LOCAL_CONTAINER, model_path=model-artifact-directory, inference_spec=your-inference-spec, schema_builder=SchemaBuilder(input, output), role_arn=execution-role, dependencies={"auto": False, "custom": ["-e git+https://github.com/luca-medeiros/lang-segment-anything.git#egg=lang-sam"],} )

모델 구축 및 배포

build 함수를 호출하여 배포 가능한 모델을 생성합니다. 이 단계에서는 스키마를 생성하고, 입력 및 출력의 직렬화 및 역직렬화를 실행하고, 다른 사용자 지정 사용자 지정 로직을 실행하는 데 필요한 코드를 사용하여 작업 디렉터리에 추론 코드(inference.py로)를 생성합니다.

무결성 검사로 SageMaker AI는 ModelBuilder 빌드 함수의 일부로 배포에 필요한 파일을 패키징하고 선택합니다. 또한이 프로세스 중에 SageMaker AI는 피클 파일에 대한 HMAC 서명을 생성하고 deploy (또는 ) 중에에 보안 키를 환경 변수CreateModelAPI로 추가합니다create. 엔드포인트 시작은 환경 변수를 사용하여 피클 파일의 무결성을 검증합니다.

# Build the model according to the model server specification and save it as files in the working directory model = model_builder.build()

모델의 기존 deploy 메서드를 사용하여 모델을 배포합니다. 이 단계에서 SageMaker AI는 수신 요청에 대한 예측을 시작할 때 모델을 호스팅하도록 엔드포인트를 설정합니다. ModelBuilder는 모델을 배포하는 데 필요한 엔드포인트 리소스를 추론하지만 자체 파라미터 값으로 이러한 추정치를 재정의할 수 있습니다. 다음 예제에서는 SageMaker AI가 단일 ml.c6i.xlarge 인스턴스에 모델을 배포하도록 지시합니다. ModelBuilder로 구성된 모델은 배포 중에 추가 기능으로 라이브 로깅을 활성화합니다.

predictor = model.deploy( initial_instance_count=1, instance_type="ml.c6i.xlarge" )

모델에 할당된 엔드포인트 리소스에 대해 더 세분화된 제어를 원하는 경우 ResourceRequirements 객체를 사용할 수 있습니다. ResourceRequirements 객체를 사용하면 배포하려는 최소 수의 CPUs, 액셀러레이터 및 모델 사본을 요청할 수 있습니다. 메모리의 최소 및 최대 제한(MB)을 요청할 수도 있습니다. 이 기능을 사용하려면 엔드포인트 유형을 EndpointType.INFERENCE_COMPONENT_BASED로 지정해야 합니다. 다음 예제에서는 4개의 액셀러레이터, 최소 메모리 크기 1,024MB, 모델 사본 1개를 EndpointType.INFERENCE_COMPONENT_BASED 유형의 엔드포인트에 배포하도록 요청합니다.

resource_requirements = ResourceRequirements( requests={ "num_accelerators": 4, "memory": 1024, "copies": 1, }, limits={}, ) predictor = model.deploy( mode=Mode.SAGEMAKER_ENDPOINT, endpoint_type=EndpointType.INFERENCE_COMPONENT_BASED, resources=resource_requirements, role="role" )

자체 컨테이너 가져오기(BYOC)

자체 컨테이너( SageMaker AI 컨테이너에서 확장)를 가져오려면 다음 예제URI와 같이 이미지를 지정할 수도 있습니다. 또한 모델 서버와 관련된 아티팩트를 생성하려면 ModelBuilder에 대한 이미지에 해당하는 모델 서버를 식별해야 합니다.

model_builder = ModelBuilder( model=model, model_server=ModelServer.TORCHSERVE, schema_builder=SchemaBuilder(X_test, y_pred), image_uri="123123123123.dkr.ecr.ap-southeast-2.amazonaws.com/byoc-image:xgb-1.7-1") )

로컬 ModelBuilder 모드에서 사용

mode 인수를 사용하여 로컬 테스트와 배포를 엔드포인트로 전환하여 모델을 로컬로 배포할 수 있습니다. 다음 조각과 같이 작업 디렉터리에 모델 아티팩트를 저장해야 합니다.

model = XGBClassifier() model.fit(X_train, y_train) model.save_model(model_dir + "/my_model.xgb")

모델 객체, SchemaBuilder 인스턴스 및 설정 모드를 Mode.LOCAL_CONTAINER로 전달합니다. build 함수를 호출하면 ModelBuilder는 지원되는 프레임워크 컨테이너를 자동으로 식별하고 종속성을 검사합니다. 다음 예제에서는 로컬 모드의 모델을 사용한 XGBoost 모델 생성을 보여줍니다.

model_builder_local = ModelBuilder( model=model, schema_builder=SchemaBuilder(X_test, y_pred), role_arn=execution-role, mode=Mode.LOCAL_CONTAINER ) xgb_local_builder = model_builder_local.build()

다음 조각과 같이 deploy 함수를 호출하여 로컬로 배포합니다. 인스턴스 유형 또는 개수에 대한 파라미터를 지정하면 이러한 인수는 무시됩니다.

predictor_local = xgb_local_builder.deploy()

로컬 모드 문제 해결

개별 로컬 설정에 따라 환경에서 ModelBuilder를 원활하게 실행하기 어려울 수 있습니다. 직면할 수 있는 몇 가지 문제와 이를 해결하는 방법은 다음 목록을 참조하세요.

  • 이미 사용 중: Address already in use 오류가 발생할 수 있습니다. 이 경우 Docker 컨테이너가 해당 포트에서 실행 중이거나 다른 프로세스가 이를 사용하고 있을 수 있습니다. Linux 설명서에 설명된 접근 방식을 따라 프로세스를 식별하고 로컬 프로세스를 포트 8080에서 다른 포트로 유정하게 리디렉션하거나 Docker 인스턴스를 정리할 수 있습니다.

  • IAM 권한 문제: Amazon ECR 이미지를 가져오거나 Amazon S3에 액세스하려고 할 때 권한 문제가 발생할 수 있습니다. 이 경우 노트북 또는 Studio Classic 인스턴스의 실행 역할로 이동하여 SageMakerFullAccess 또는 해당 API 권한에 대한 정책을 확인합니다.

  • EBS 볼륨 용량 문제: 대규모 언어 모델(LLM)을 배포하는 경우 로컬 모드에서 Docker를 실행하는 동안 공간이 부족하거나 Docker 캐시에 대한 공간 제한이 발생할 수 있습니다. 이 경우 Docker 볼륨을 충분한 공간이 있는 파일 시스템으로 이동해 볼 수 있습니다. Docker 볼륨을 이동하려면 다음 단계를 완료합니다.

    1. 다음 출력과 같이 터미널을 열고 df를 실행하여 디스크 사용량을 표시합니다.

      (python3) sh-4.2$ df Filesystem 1K-blocks Used Available Use% Mounted on devtmpfs 195928700 0 195928700 0% /dev tmpfs 195939296 0 195939296 0% /dev/shm tmpfs 195939296 1048 195938248 1% /run tmpfs 195939296 0 195939296 0% /sys/fs/cgroup /dev/nvme0n1p1 141545452 135242112 6303340 96% / tmpfs 39187860 0 39187860 0% /run/user/0 /dev/nvme2n1 264055236 76594068 176644712 31% /home/ec2-user/SageMaker tmpfs 39187860 0 39187860 0% /run/user/1002 tmpfs 39187860 0 39187860 0% /run/user/1001 tmpfs 39187860 0 39187860 0% /run/user/1000
    2. 256GB SageMaker AI 볼륨을 완전히 활용할 수 /dev/nvme2n1 있도록 기본 Docker 디렉터리를에서 /dev/nvme0n1p1로 이동합니다. 자세한 내용은 Docker 디렉터리를 이동하는 방법에 대한 설명서를 참조하세요.

    3. 다음 명령을 사용하여 Docker를 중지합니다.

      sudo service docker stop
    4. daemon.json에 추가/etc/docker하거나 기존 블롭에 다음 JSON 블롭을 추가합니다.

      { "data-root": "/home/ec2-user/SageMaker/{created_docker_folder}" }
    5. 다음 명령을 사용하여 /var/lib/docker의 Docker 디렉터리를 /home/ec2-user/SageMaker AI로 이동합니다.

      sudo rsync -aP /var/lib/docker/ /home/ec2-user/SageMaker/{created_docker_folder}
    6. 다음 명령을 사용하여 Docker를 시작합니다.

      sudo service docker start
    7. 다음 명령을 사용하여 휴지통을 정리합니다.

      cd /home/ec2-user/SageMaker/.Trash-1000/files/* sudo rm -r *
    8. SageMaker 노트북 인스턴스를 사용하는 경우 Docker 준비 파일의 단계에 따라 로컬 모드에 맞게 Docker를 준비할 수 있습니다.

ModelBuilder 예제

를 사용하여 모델을 빌드ModelBuilder하는 자세한 예는 ModelBuilder 샘플 노트북을 참조하세요.

프라이버시사이트 이용 약관쿠키 기본 설정
© 2025, Amazon Web Services, Inc. 또는 계열사. All rights reserved.