Amazon Web Services 한국 블로그

Amazon SageMaker Inference –  파운데이션 모델 배포 비용과 지연 시간 감소

오늘, 배포 비용을 최적화하고 지연 시간을 줄이는 데 도움이 되는 새로운 Amazon SageMaker 추론 기능을 발표합니다. 이 새로운 추론 기능을 사용하면 동일한 SageMaker 엔드포인트에 하나 이상의 파운데이션 모델(FM)을 배포하고 각 FM에 예약되는 액셀러레이터 수와 메모리 양을 제어할 수 있습니다. 이렇게 하면 리소스 활용도를 높이고 모델 배포 비용을 평균 50% 절감하며 사용 사례에 따라 엔드포인트 규모를 조정할 수 있습니다.

각 FM에 대해 개별 조정 정책을 정의하여 모델 사용 패턴에 맞게 조정하고 인프라 비용을 추가로 최적화할 수 있습니다. 또한 SageMaker를 통해 추론 요청을 처리하는 인스턴스를 능동적으로 모니터링하고 사용 가능한 인스턴스를 기반으로 요청을 지능적으로 라우팅하여 추론 지연 시간을 평균 20% 줄일 수 있습니다.

주요 구성 요소
새로운 추론 기능은 SageMaker 실시간 추론 엔드포인트를 기반으로 합니다. 이전과 마찬가지로 엔드포인트의 인스턴스 유형과 초기 인스턴스 수를 정의하는 엔드포인트 구성을 사용하여 SageMaker 엔드포인트를 생성합니다. 모델은 새로운 구조인 추론 구성 요소에 구성됩니다. 여기서는 모델의 각 사본에 할당할 액셀러레이터 수와 메모리 양과 함께 모델 아티팩트, 컨테이너 이미지 및 배포할 모델 사본 수를 지정합니다.

Amazon SageMaker - MME

실제 작동 방식을 살펴보도록 하겠습니다.

새로운 추론 기능의 작동 방식
SageMaker Studio, SageMaker Python SDK, AWS SDKAWS Command Line Interface(AWS CLI)에서 새로운 추론 기능을 사용할 수 있습니다. AWS CloudFormation에서도 지원됩니다.

이 데모에서는 AWS SDK for Python(Boto3)에서 새로운 추론 기능을 사용하여 Hugging Face 모델 허브Dolly v2 7B 모델 사본과 FLAN-T5 XXL 모델 사본을 SageMaker 실시간 엔드포인트에 배포합니다.

SageMaker 엔드포인트 구성 생성

import boto3
import sagemaker

role = sagemaker.get_execution_role()
sm_client = boto3.client(service_name="sagemaker")

sm_client.create_endpoint_config(
    EndpointConfigName=endpoint_config_name,
    ExecutionRoleArn=role,
    ProductionVariants=[{
        "VariantName": "AllTraffic",
        "InstanceType": "ml.g5.12xlarge",
        "InitialInstanceCount": 1,
		"RoutingConfig": {
            "RoutingStrategy": "LEAST_OUTSTANDING_REQUESTS"
        }
    }]
)

SageMaker 엔드포인트 생성

sm_client.create_endpoint(
    EndpointName=endpoint_name,
    EndpointConfigName=endpoint_config_name,
)

추론 구성 요소를 생성하려면 먼저 SageMaker 호환 모델을 생성하고 사용할 컨테이너 이미지를 지정해야 합니다. 여기서는 두 모델 모두에 Amazon SageMaker용 Hugging Face LLM Inference Container를 사용하겠습니다. 이러한 딥 러닝 컨테이너(DLC)에는 SageMaker에서 대형 모델을 호스팅하는 데 필요한 구성 요소, 라이브러리 및 드라이버가 포함되어 있습니다.

Dolly v2 모델 준비

from sagemaker.huggingface import get_huggingface_llm_image_uri

# Retrieve the container image URI
hf_inference_dlc = get_huggingface_llm_image_uri(
  "huggingface",
  version="0.9.3"
)

# Configure model container
dolly7b = {
    'Image': hf_inference_dlc,
    'Environment': {
        'HF_MODEL_ID':'databricks/dolly-v2-7b',
        'HF_TASK':'text-generation',
    }
}

# Create SageMaker Model
sagemaker_client.create_model(
    ModelName        = "dolly-v2-7b",
    ExecutionRoleArn = role,
    Containers       = [dolly7b]
)

FLAN-T5 XXL 모델 준비

# Configure model container
flant5xxlmodel = {
    'Image': hf_inference_dlc,
    'Environment': {
        'HF_MODEL_ID':'google/flan-t5-xxl',
        'HF_TASK':'text-generation',
    }
}

# Create SageMaker Model
sagemaker_client.create_model(
    ModelName        = "flan-t5-xxl",
    ExecutionRoleArn = role,
    Containers       = [flant5xxlmodel]
)

이제 추론 구성 요소를 만들 준비가 되었습니다.

각 모델에 대한 추론 구성 요소 생성
엔드포인트에 배포하려는 각 모델에 대한 추론 구성 요소를 지정합니다. 추론 구성 요소를 지정할 때 SageMaker 호환 모델과 할당하려는 컴퓨팅 및 메모리 리소스를 지정할 수 있습니다. CPU 워크로드의 경우 할당할 코어 수를 정의합니다. 액셀러레이터 워크로드의 경우 액셀러레이터 수를 정의합니다. RuntimeConfig는 배포하려는 모델 사본 수를 정의합니다.

# Inference compoonent for Dolly v2 7B
sm_client.create_inference_component(
    InferenceComponentName="IC-dolly-v2-7b",
    EndpointName=endpoint_name,
    VariantName=variant_name,
    Specification={
        "ModelName": "dolly-v2-7b",
        "ComputeResourceRequirements": {
		    "NumberOfAcceleratorDevicesRequired": 2, 
			"NumberOfCpuCoresRequired": 2, 
			"MinMemoryRequiredInMb": 1024
	    }
    },
    RuntimeConfig={"CopyCount": 1},
)

# Inference component for FLAN-T5 XXL
sm_client.create_inference_component(
    InferenceComponentName="IC-flan-t5-xxl",
    EndpointName=endpoint_name,
    VariantName=variant_name,
    Specification={
        "ModelName": "flan-t5-xxl",
        "ComputeResourceRequirements": {
		    "NumberOfAcceleratorDevicesRequired": 2, 
			"NumberOfCpuCoresRequired": 1, 
			"MinMemoryRequiredInMb": 1024
	    }
    },
    RuntimeConfig={"CopyCount": 1},
)

추론 구성 요소가 성공적으로 배포되면 모델을 간접적으로 호출할 수 있습니다.

추론 실행
엔드포인트에서 모델을 간접적으로 호출하려면 해당하는 추론 구성 요소를 지정합니다.

import json
sm_runtime_client = boto3.client(service_name="sagemaker-runtime")
payload = {"inputs": "Why is California a great place to live?"}

response_dolly = sm_runtime_client.invoke_endpoint(
    EndpointName=endpoint_name,
    InferenceComponentName = "IC-dolly-v2-7b",
    ContentType="application/json",
    Accept="application/json",
    Body=json.dumps(payload),
)

response_flant5 = sm_runtime_client.invoke_endpoint(
    EndpointName=endpoint_name,
    InferenceComponentName = "IC-flan-t5-xxl",
    ContentType="application/json",
    Accept="application/json",
    Body=json.dumps(payload),
)

result_dolly = json.loads(response_dolly['Body'].read().decode())
result_flant5 = json.loads(response_flant5['Body'].read().decode())

다음으로 규모 조정 대상을 등록하고 규모 조정 정책을 추론 구성 요소에 적용하여 각 모델에 대해 개별 조정 정책을 정의할 수 있습니다. 자세한 지침은 SageMaker 개발자 안내서를 참조하세요.

새로운 추론 기능은 모델별 CloudWatch 지표와 CloudWatch 로그를 제공하며, SageMaker CPU 및 GPU 기반 컴퓨팅 인스턴스에서 모든 SageMaker 호환 컨테이너 이미지와 함께 사용할 수 있습니다. 컨테이너 이미지에서 지원되므로 응답 스트리밍을 사용할 수도 있습니다.

지금 사용 가능
오늘부터 미국 동부(오하이오, 버지니아 북부), 미국 서부(오레곤), 아시아 태평양(자카르타, 뭄바이, 서울, 싱가포르, 시드니, 도쿄), 캐나다(중부), 유럽(프랑크푸르트, 아일랜드, 런던, 스톡홀름), 중동(UAE) 및 남아메리카(상파울루) AWS 리전에서 새로운 Amazon SageMaker 추론 기능을 사용할 수 있습니다. 요금 세부 정보는 Amazon SageMaker 요금을 참조하세요. 자세히 알아보려면 Amazon SageMaker로 이동하세요.

시작하기
지금 바로 AWS Management Console에 로그인하여 새로운 SageMaker 추론 기능으로 FM을 배포해 보세요!

— Antje