본문으로 건너뛰기

추론 개요

학습 완료된 model로 실제 이미지를 추론하고 결과를 받아볼 수 있습니다.

추론이란

Model 학습이 완료되면 새로운 이미지를 입력하여 예측 결과를 얻을 수 있습니다. KeyNet Platform은 사용자가 이미지를 업로드하면 자동으로 추론을 실행하고 시각화된 결과를 보여줍니다.

추론 Flow

1. Model 학습 완료

모델 학습을 통해 ONNX model을 생성하고 Platform에 업로드합니다.

2. 추론 함수 작성

전처리, 추론, 후처리 로직을 담은 Python 함수를 작성합니다.

추론 함수의 역할:

  • 전처리: 사용자 이미지 → model 입력 형식 변환 (크기 조정, 정규화 등)
  • 추론: Triton Inference Server로 model 호출
  • 후처리: model 출력 → 시각화된 결과 이미지 생성

자세한 내용: 추론 함수 작성

3. 함수 배포

작성한 함수를 Platform에 배포합니다.

v0.8.5 업데이트

v0.8.5부터 keynet-inference push CLI 명령어를 사용하여 추론 함수를 자동으로 빌드하고 배포할 수 있습니다.

방법 1: CLI 배포 (권장)

keynet login https://gateway.aiplatform.re.kr
keynet-inference push inference.py

CLI가 자동으로 Docker 이미지 빌드, Harbor push, 함수 등록을 처리합니다.

자세한 내용: CLI 배포

방법 2: 수동 배포 (레거시)

Dockerfile을 직접 작성하고 수동으로 빌드/배포하는 방식입니다. 복잡한 시스템 의존성이 필요한 특수한 경우에만 사용합니다.

자세한 내용: 수동 배포

4. 이미지 업로드 및 추론

Platform에서 이미지를 업로드하면 배포된 함수가 자동으로 실행됩니다.

5. 결과 확인

시각화된 결과 이미지와 예측 정보를 확인합니다.

왜 전처리/후처리가 필요한가

Platform은 사용자로부터 이미지 파일만 입력으로 받습니다. 하지만:

  • Model마다 입력 형식이 다릅니다 (크기, 정규화, channel 순서 등)
  • 추론 결과는 숫자 배열이므로 시각적으로 표현해야 합니다

따라서 사용자가 직접 전처리후처리 로직을 작성해야 합니다.

전처리 예시:

# 800x600 RGB 이미지를 224x224로 변환하고 정규화
resized = image.resize((224, 224))
normalized = array(resized) / 255.0

후처리 예시:

# 모델 출력에서 예측 클래스 추출 및 이미지에 표시
predicted_class = argmax(outputs)
draw.text((10, 10), f"Prediction: {predicted_class}", fill="red")

자세한 예제: 추론 함수 작성

Apache OpenWhisk

Platform은 Apache OpenWhisk를 기반으로 합니다.

OpenWhisk Base Image

추론 함수는 OpenWhisk Python base image를 사용해야 합니다.

사용 가능한 이미지:

이미지Python 버전
openwhisk/action-python-v3.9Python 3.9
openwhisk/action-python-v3.10Python 3.10
openwhisk/action-python-v3.11Python 3.11
openwhisk/action-python-v3.12Python 3.12

기본 사용:

@keynet_function(
name="my-inference",
description="Custom inference function",
base_image="openwhisk/action-python-v3.12:latest", # 권장
)
def main(args: dict):
# 추론 로직
storage = Storage()

# ... 전처리, 추론, 후처리 ...

# 결과 업로드 및 반환 (필수 형식)
result_url = storage.put(result_buffer)
return {"url": result_url}
반환값 형식

추론 함수는 반드시 {"url": <storage.put() 결과>} 형식으로 반환해야 합니다.

버전 선택

Python 3.12 (openwhisk/action-python-v3.12:latest)를 권장합니다.

CLI 배포 사용 시 base_image를 지정하면 자동으로 해당 이미지 기반 Dockerfile이 생성됩니다.

커스텀 런타임

수동 배포 시 필요한 의존성을 포함한 Docker 이미지를 직접 작성합니다:

FROM openwhisk/action-python-v3.12:latest

RUN pip install --no-cache-dir \
keynet-inference==0.8.5 \
Pillow==10.4.0 \
numpy==1.26.4

자세한 내용: 수동 배포

다음 단계

시작하기

처음 사용하시는 경우 CLI 배포 방식을 권장합니다.

권장 순서:

  1. 추론 함수 작성 - 전처리/추론/후처리 로직 작성
  2. CLI로 배포 - keynet-inference push로 자동 배포
  3. Platform에서 테스트 - 모델 바인딩 및 추론 실행

레거시 방식이 필요한 경우: