어제 확인했듯 실시간 엔드포인트는 네 가지 추론 옵션 중 운영 부담이 가장 크다. 상시 가동 인스턴스 위에서 안정적인 저지연 서비스를 하려면 구성·스케일링·비용 통제를 함께 이해해야 한다. 그 출발점이 SageMaker가 리소스를 세 겹으로 쪼개 놓았다는 사실이다.
Model : 학습 산출물(S3 모델 아티팩트) + 추론 컨테이너 이미지EndpointConfig : 어떤 Model을, 어떤 인스턴스/비율로 띄울지 정의 (ProductionVariant)Endpoint : 실제 HTTPS URL. EndpointConfig를 가리킨다
고객별·지역별로 모델이 수백~수천 개로 불어나면 각각을 별도 엔드포인트로 띄우는 것은 비용도 관리도 감당이 안 된다. MME는 공유 인스턴스 위에 여러 모델을 올려두고 호출 시 동적으로 로딩한다.
from sagemaker.multidatamodel import MultiDataModelmme = MultiDataModel( name="mme-endpoint", model_data_prefix="s3://my-bucket/models/", # 모델 아티팩트가 놓인 프리픽스 image_uri=image, role=role,)predictor = mme.deploy(initial_instance_count=2, instance_type="ml.m5.xlarge")# 호출할 때 TargetModel로 어떤 모델인지 지정predictor.predict(data, target_model="customer-123.tar.gz")
요청(TargetModel=customer-123.tar.gz) │ ▼ 메모리에 이미 로드됨? ├─ 예 → 즉시 추론 (지연 낮음) └─ 아니오 → S3에서 로드 → 추론 (첫 호출 콜드 지연) │ └─ 메모리 부족 시 가장 오래 안 쓴 모델을 LRU 언로드
동작: 요청이 오면 해당 모델을 메모리에 로드(이미 있으면 재사용)하고, 메모리가 부족해지면 최근에 안 쓰인 모델부터 언로드(LRU)한다.
이점: 인스턴스 몇 대로 수천 개 모델을 호스팅 → 비용이 크게 준다.
트레이드오프: 오래 호출되지 않은 모델은 첫 호출에서 콜드 스타트 지연이 생기고, 모든 모델이 같은 프레임워크/컨테이너를 공유해야 한다.
서로 다른 프레임워크의 모델을 한 엔드포인트에 올리려면 멀티모델이 아니라 멀티컨테이너를 쓴다.
Multi-Model Endpoint (MME) : 같은 컨테이너, N개의 서로 다른 모델 아티팩트, 동적 로딩Multi-Container Endpoint (MCE): N개의 서로 다른 컨테이너. Direct(개별 호출) 또는 Serial 모드Inference Pipeline : 컨테이너를 직렬 연결(전처리→예측→후처리)해 한 요청으로 처리
방식
컨테이너
대표 상황
언제 쓰면 안 되나
개별 엔드포인트 N개
각각 독립
모델 수가 적고 각각 SLA·스케일이 다를 때
모델이 수백~수천 개일 때(비용 폭증·관리 불가)
MME
하나(공유)
동일 프레임워크 모델 수천 개, 비용 절감이 목표
프레임워크가 서로 다를 때, 콜드 지연을 못 견디는 상시 저지연 요구
MCE (Direct)
여러 개
서로 다른 프레임워크 모델을 한 엔드포인트에서 개별 호출
전처리→예측을 한 요청으로 묶어야 할 때
추론 파이프라인
여러 개(직렬)
전처리+예측을 한 요청에 묶어 학습-서빙 스큐 방지
각 컨테이너를 독립적으로 따로 호출해야 할 때
MME는 "모델이 많다"는 조건만으로 정답이 되지 않는다. 모든 모델이 같은 프레임워크/컨테이너를 공유해야 한다는 전제가 붙는다. 지문에 프레임워크가 서로 다르다는 단서가 있으면 MCE 쪽이다. 또한 MME의 인스턴스는 0이 아니며 GPU 전용도 아니다.
추론 파이프라인의 전형적인 예: Scikit-learn 전처리 컨테이너 → XGBoost 예측 컨테이너를 직렬로 묶어, 추론 시에도 학습과 동일한 전처리가 적용되도록 보장한다(학습-서빙 스큐 방지). 클라이언트가 별도 엔드포인트 두 개를 순서대로 호출하는 방식은 네트워크 왕복과 정합성 문제를 남긴다.
어떤 호스팅 구조를 고를까?├─ 트래픽이 없을 때 비용을 0으로? ─→ Serverless / Async (실시간 엔드포인트 아님)├─ 전처리와 예측을 한 요청으로 묶어야 하나?│ └─ 예 → 추론 파이프라인 (컨테이너 직렬 연결)├─ 모델들이 같은 프레임워크/컨테이너인가?│ ├─ 예 + 모델 수가 수백~수천 → MME (TargetModel로 지정, LRU 로딩)│ └─ 아니오 → MCE Direct 모드 (컨테이너별 개별 호출)└─ 모델이 소수이고 각각 다른 스케일·SLA → 개별 실시간 엔드포인트
"수천 개의 유사 모델 + 동일 프레임워크 + 비용 절감" → MME. "전처리와 예측을 한 요청으로 묶어라" → 추론 파이프라인. "서로 다른 프레임워크 모델을 한 엔드포인트에서 따로 호출" → MCE Direct 모드. 이 셋을 구분해야 한다.