SageMaker AI endpoint 기초¶
TL;DR
SageMaker AI endpoint는 Model, EndpointConfig, Endpoint 세 리소스로 구성됩니다. Model은 실행할 모델과 컨테이너를, EndpointConfig는 인스턴스 구성과 배포 방식을, Endpoint는 실제 추론 환경을 나타냅니다. 인스턴스 요금은 Endpoint를 생성한 뒤부터 발생합니다.
Endpoint를 구성하는 세 리소스¶
SageMaker AI 모델 배포는 모델 정의, endpoint 구성, endpoint 생성 단계로 나뉩니다. 각 리소스가 담당하는 범위와 과금이 시작되는 시점을 구분해 이해해야 합니다.
| 리소스 | 정하는 것 | 과금 |
|---|---|---|
Model |
컨테이너 이미지, S3 모델 아티팩트, IAM 역할 | 인스턴스 요금 없음 |
EndpointConfig |
인스턴스 유형과 개수, 서버리스 또는 Asynchronous Inference 설정 | 인스턴스 요금 없음 |
Endpoint |
구성에 따라 생성된 실제 추론 환경 | 배포 방식에 따라 과금 |
이 저장소의 --dry-run은 앞의 두 단계만 실행합니다. 이를 통해 이미지 URI와 IAM 권한, 선택한 배포 방식에서 인스턴스 유형을 사용할 수 있는지 확인합니다.
endpoint 생성 전 API 검증
멀티컨테이너 Direct 모드에서 GPU 인스턴스 유형이 거부되는 것을 create_endpoint_config 응답으로 확인했습니다. 실제 endpoint를 생성하지 않으므로 인스턴스 요금은 발생하지 않습니다.
자세한 내용은 실측 결과 요약에 있습니다.
Model과 EndpointConfig의 변경 방식¶
Model과 EndpointConfig는 생성 후 내용을 직접 수정할 수 없습니다. 인스턴스 유형이나 배포 설정을 변경하려면 새 EndpointConfig를 생성하고 UpdateEndpoint로 교체해야 합니다. 같은 이름을 다시 사용하려면 기존 리소스를 먼저 삭제해야 합니다.
이 저장소의 배포 스크립트가 기존 리소스 삭제를 시도한 뒤 다시 생성하는 이유입니다.
try:
sm.delete_endpoint_config(EndpointConfigName=epc)
except Exception:
pass # 리소스가 없으면 계속 진행합니다.
sm.create_endpoint_config(...)
06 Serverless Inference에서 Provisioned Concurrency를 변경할 때도 새 EndpointConfig를 생성해 교체했습니다.
관리 API와 추론 API¶
SageMaker 리소스 관리와 추론 호출은 서로 다른 API 클라이언트를 사용합니다.
import boto3
sm = boto3.client("sagemaker") # 리소스 관리: create_*, delete_*, describe_*
rt = boto3.client("sagemaker-runtime") # 추론 호출: invoke_endpoint
create_endpoint는 sagemaker 클라이언트에서, invoke_endpoint는 sagemaker-runtime 클라이언트에서 호출합니다.
추론 옵션¶
SageMaker AI 추론 옵션은 실시간, 서버리스, 비동기, 배치 변환으로 구분됩니다. 온라인 endpoint의 방식은 EndpointConfig에서 결정합니다.
| GPU | co-host | 과금 | 이 저장소 | |
|---|---|---|---|---|
| Real-time Inference | 지원 | 지원 | 인스턴스 실행 시간 | 01, 02, 03, 04, 05, 07 |
| Serverless Inference | 미지원 | 미지원 | 요청 및 처리 시간 | 06 |
| Asynchronous Inference | 지원 | - | 인스턴스 실행 시간(0까지 축소 가능) | 다루지 않음 |
| Batch Transform | 지원 | - | 작업 시간만 | 다루지 않음 |
Asynchronous Inference과 Batch Transform은 이 저장소의 대상 워크로드와 맞지 않아 다루지 않습니다. 인코더 요청은 forward pass 한 번으로 끝나고 응답 시간이 수십 밀리초 수준이므로, 대기열을 거쳐 결과를 S3에서 받는 비동기 방식의 이점이 작습니다. Batch Transform은 온라인 응답이 필요 없는 대량 처리에 적합합니다.
Serverless Inference는 GPU를 지원하지 않습니다
ProductionVariantServerlessConfig는 MemorySizeInMB, MaxConcurrency, ProvisionedConcurrency를 제공하지만 GPU 설정은 제공하지 않습니다. GPU가 필요하면서 유휴 시 인스턴스 수를 0으로 줄여야 한다면 05 Scale to Zero를 검토하세요. 두 방식의 차이는 배포 방식 고르기에 정리되어 있습니다.
단일 endpoint에 여러 모델 배포¶
기본 구성은 endpoint 하나에 모델 하나를 배포하는 방식입니다. 여러 모델을 함께 배포하는 네 가지 방식 가운데 이 저장소에서는 세 가지를 측정했습니다.
| 방식 | 분리 단위 | 대상 지정 | 시나리오 |
|---|---|---|---|
멀티컨테이너 Direct |
컨테이너 | TargetContainerHostname |
02 |
| Inference Component | 컴포넌트(모델 + 자원) | InferenceComponentName |
03 |
| MME(LMI) | S3 모델 아티팩트 | TargetModel |
04 |
| MME(Triton) | S3 모델 아티팩트 | TargetModel |
다루지 않음 |
비용은 모델 크기와 배포 방식에 따라 달라집니다. 이 저장소의 Inference Component 구성은 모델 3개를 배포하기 위해 GPU 4장 인스턴스를 사용했으며, GPU 1장 인스턴스 3대보다 비용이 높았습니다. 자세한 내용은 배포 방식 고르기와 SageMaker AI Inference Component를 참고하세요.
리소스 정리와 과금¶
요청이 없어도 과금됩니다
실시간 endpoint는 요청이 없어도 배포된 인스턴스에 대한 요금이 발생합니다. 실습이 끝나면 리소스를 삭제해야 합니다.
삭제에는 순서가 있습니다. Inference Component가 연결된 endpoint는 컴포넌트를 먼저 삭제해야 합니다. cleanup.py가 이 순서를 처리합니다.
05 Scale to Zero를 사용하면 인스턴스 수가 0인 동안 인스턴스 요금이 발생하지 않지만, endpoint와 Application Auto Scaling 등록은 남아 있습니다. 실습을 마친 뒤에는 이 리소스도 삭제해야 합니다.