5 단계. 모델 배포 & 추론¶
MLflow에 등록된 모델을 Inference Endpoint로 배포하고 추론 요청을 보냅니다.
5-1. Inference Endpoint 생성¶
외부에서 모델을 호출할 수 있는 엔드포인트를 먼저 생성합니다.
프로젝트 > 추론 엔드포인트 메뉴
-
프로젝트 화면 왼쪽 사이드바에서 추론 엔드포인트 메뉴를 클릭합니다.
-
오른쪽 상단의 + 생성 버튼을 클릭합니다.
-
기본 정보를 입력합니다.
- 이름: 엔드포인트를 식별할 수 있는 이름 (예:
wind-power-endpoint) - ID: 자동 추천되며 생성 시 수정 가능 (생성 후 변경 불가)
- 설명 (선택)
추론 URL 미리보기
ID를 입력하면 생성될 엔드포인트 추론 URL을 미리 확인할 수 있습니다.
- 이름: 엔드포인트를 식별할 수 있는 이름 (예:
-
서빙 런타임을 선택합니다.
이 튜토리얼에서 학습한 모델은 XGBoost 기반이므로 MLServer를 선택합니다.
- MLServer (v1.7.1): scikit-learn, XGBoost, LightGBM, MLflow, Custom Python models
런타임 선택 주의
서빙 런타임은 엔드포인트 생성 후 변경할 수 없습니다.
-
생성 버튼을 클릭합니다.
-
엔드포인트 상태가 Healthy가 되면 다음 단계로 진행합니다.
5-2. 모델 배포¶
생성된 엔드포인트에 MLflow에 등록된 모델을 배포합니다.
프로젝트 > 추론 엔드포인트 메뉴
-
엔드포인트 목록에서 방금 생성한 엔드포인트를 클릭합니다.
-
엔드포인트 상세 화면에서 오른쪽 상단의 모델 배포 버튼을 클릭합니다.
-
기본 정보를 입력합니다.
- 이름: 배포 모델을 식별할 수 있는 이름 (예:
wind-power-model) - ID: 자동 추천되며 생성 시 수정 가능
- 설명 (선택)
- 이름: 배포 모델을 식별할 수 있는 이름 (예:
-
모델 소스를 선택합니다.
- 볼륨: 4단계에서 모델이 저장된 S3 볼륨 선택
- 모델 경로: MLflow에 등록된 모델 경로 입력
모델 경로 확인
4단계에서 확인한 MLflow의 모델 아티팩트 경로를 입력합니다.
-
컴퓨팅 리소스를 입력합니다.
XGBoost 모델은 GPU 없이 CPU만으로 서빙 가능합니다.
- CPU:
500(millicores) - Memory:
512(MiB)
- CPU:
-
스케일링 값을 입력합니다.
- 복제본 수:
1
- 복제본 수:
-
생성 버튼을 클릭합니다.
5-3. 추론 요청¶
배포된 Endpoint로 추론 요청을 보내고 결과를 확인합니다.
엔드포인트 URL 및 API 키 확인¶
- 엔드포인트 상세 화면에서 추론 URL을 복사합니다.
- API 키가 없다면 API 키 관리에서 발급합니다.
curl로 추론 요청¶
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <API-KEY-TOKEN>" \
-d '{
"inputs": [
{
"name": "input",
"shape": [1, 9],
"datatype": "FP32",
"data": [[6.5, 1.2, 3.4, 0.8, 2.1, 5.6, 7.3, 4.9, 1.0]]
}
]
}' \
https://inference.<base-domain>/api/<project-id>/<endpoint-id>/v2/models/<model-name>/infer
Python으로 추론 요청¶
import requests
url = "https://inference.<base-domain>/api/<project-id>/<endpoint-id>/v2/models/<model-name>/infer"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer <API-KEY-TOKEN>"
}
data = {
"inputs": [
{
"name": "input",
"shape": [1, 9],
"datatype": "FP32",
"data": [[6.5, 1.2, 3.4, 0.8, 2.1, 5.6, 7.3, 4.9, 1.0]]
}
]
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
추론 요청 상세 정보
추론 요청에 대한 자세한 내용은 추론 요청을 참고하세요.