Skip to content

5 단계. 모델 배포 & 추론

MLflow에 등록된 모델을 Inference Endpoint로 배포하고 추론 요청을 보냅니다.


5-1. Inference Endpoint 생성

외부에서 모델을 호출할 수 있는 엔드포인트를 먼저 생성합니다.

프로젝트 > 추론 엔드포인트 메뉴

  1. 프로젝트 화면 왼쪽 사이드바에서 추론 엔드포인트 메뉴를 클릭합니다.

  2. 오른쪽 상단의 + 생성 버튼을 클릭합니다.

  3. 기본 정보를 입력합니다.

    • 이름: 엔드포인트를 식별할 수 있는 이름 (예: wind-power-endpoint)
    • ID: 자동 추천되며 생성 시 수정 가능 (생성 후 변경 불가)
    • 설명 (선택)

    추론 URL 미리보기

    ID를 입력하면 생성될 엔드포인트 추론 URL을 미리 확인할 수 있습니다.

  4. 서빙 런타임을 선택합니다.

    이 튜토리얼에서 학습한 모델은 XGBoost 기반이므로 MLServer를 선택합니다.

    • MLServer (v1.7.1): scikit-learn, XGBoost, LightGBM, MLflow, Custom Python models

    런타임 선택 주의

    서빙 런타임은 엔드포인트 생성 후 변경할 수 없습니다.

  5. 생성 버튼을 클릭합니다.

  6. 엔드포인트 상태가 Healthy가 되면 다음 단계로 진행합니다.


5-2. 모델 배포

생성된 엔드포인트에 MLflow에 등록된 모델을 배포합니다.

프로젝트 > 추론 엔드포인트 메뉴

  1. 엔드포인트 목록에서 방금 생성한 엔드포인트를 클릭합니다.

  2. 엔드포인트 상세 화면에서 오른쪽 상단의 모델 배포 버튼을 클릭합니다.

  3. 기본 정보를 입력합니다.

    • 이름: 배포 모델을 식별할 수 있는 이름 (예: wind-power-model)
    • ID: 자동 추천되며 생성 시 수정 가능
    • 설명 (선택)
  4. 모델 소스를 선택합니다.

    • 볼륨: 4단계에서 모델이 저장된 S3 볼륨 선택
    • 모델 경로: MLflow에 등록된 모델 경로 입력

    모델 경로 확인

    4단계에서 확인한 MLflow의 모델 아티팩트 경로를 입력합니다.

  5. 컴퓨팅 리소스를 입력합니다.

    XGBoost 모델은 GPU 없이 CPU만으로 서빙 가능합니다.

    • CPU: 500 (millicores)
    • Memory: 512 (MiB)
  6. 스케일링 값을 입력합니다.

    • 복제본 수: 1
  7. 생성 버튼을 클릭합니다.


5-3. 추론 요청

배포된 Endpoint로 추론 요청을 보내고 결과를 확인합니다.

엔드포인트 URL 및 API 키 확인

  1. 엔드포인트 상세 화면에서 추론 URL을 복사합니다.
  2. 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())

추론 요청 상세 정보

추론 요청에 대한 자세한 내용은 추론 요청을 참고하세요.