MLOps·머신러닝 운영/MLflow를 활용한 머신러닝 실험 관리

MLflow 모델 Signature는 언제 생성될까?

Data Jun 2025. 10. 23. 23:10

1. Signature가 기록되는 시점은 언제일까?

핵심은 **“MLflow가 Signature를 알아야 기록할 수 있다”**는 점입니다.
즉, mlflow.log_model() 함수에 signature 인자를 직접 전달해야
MLflow가 해당 정보를 MLmodel 파일에 반영합니다.

 

✅ Signature 포함 예시

from mlflow.models.signature import infer_signature
import mlflow.sklearn

# Signature 자동 추론
signature = infer_signature(X_train, lr.predict(X_train))

# 모델 로깅
mlflow.sklearn.log_model(
    sk_model=lr,
    artifact_path="iris_model",
    signature=signature,         # ✅ 반드시 포함
    input_example=X_train[:5]    # ✅ 입력 예시도 함께 전달
)

이렇게 하면 MLflow는 자동으로

  • MLmodel 파일 안에 signature 블록을 추가하고,
  • input_example.json 파일을 별도로 생성합니다.

 

2. Signature 생성 방식 두 가지

 

MLflow에서 Signature를 만드는 방법은 두 가지입니다.

방식 코드 설명
명시적 정의 ModelSignature(inputs=Schema([...])) 컬럼 이름과 타입을 직접 지정
자동 추론 infer_signature(X_train, model.predict(X_train)) 입력과 출력 데이터를 기반으로 자동 감지

두 방식 모두 mlflow.log_model() 호출 시 signature= 인자로 넘겨줘야
MLmodel 파일에 실제로 기록됩니다.

 

 

3. Signature를 지정하지 않으면?

Signature를 생략하면 MLflow는 단순히 모델 파일(model.pkl)만 저장합니다.
즉, MLmodel 파일에는 아래처럼 Signature 정보가 누락됩니다.

# Signature 없는 MLmodel 예시
flavors:
  python_function:
    loader_module: mlflow.sklearn
    python_version: 3.10.16

이 경우:

  • 모델 입력 타입 검증 불가
  • 서빙(Serving) 시 입력 형태가 달라도 오류 없이 동작
  • 데이터 포맷 불일치로 인해 추후 배포 단계에서 장애 발생 가능

즉, Signature는 모델을 안전하게 재사용하기 위한 핵심 메타데이터입니다.

 

4. 함께 알아두면 좋은 Input Example

signature와 함께 자주 사용되는 인자가 바로 input_example입니다

mlflow.sklearn.log_model(
    sk_model=lr,
    artifact_path="iris_model",
    signature=signature,
    input_example=X_train[:5]   # ✅ 입력 예시 데이터
)

이 코드를 실행하면 MLflow가
input_example.json 파일을 자동으로 생성하고,
해당 모델이 기대하는 입력 형식(Shape, Type)을 예시로 보여줍니다.

이 정보는:

  • 모델 테스트(mlflow models predict)
  • 서빙 검증(mlflow models serve) 시 자동으로 활용됩니다.

 

5. Signature 코드 예시 정리

아래는 Signature를 정의하는 두 가지 대표적인 코드 예시입니다

 

 5.1 명시적 정의 방식

from mlflow.models.signature import ModelSignature
from mlflow.types import Schema, ColSpec

input_schema = Schema([
    ColSpec("double", name="sepal_length"),
    ColSpec("double", name="sepal_width"),
    ColSpec("double", name="petal_length"),
    ColSpec("double", name="petal_width"),
])
output_schema = Schema([ColSpec("long")])

signature = ModelSignature(inputs=input_schema, outputs=output_schema)

컬럼별 타입을 직접 정의하는 방식으로,
데이터 품질 검증이나 프로덕션 서빙에 적합합니다.

 

 5,2 자동 추론 방식

from mlflow.models.signature import infer_signature

signature = infer_signature(X_train, lr.predict(X_train))

→ 학습 데이터(X_train)와 예측 결과를 기반으로 MLflow가
입출력 스키마를 자동으로 감지합니다.
간단한 실험 단계에서 유용합니다.

 

 

정리하면

항목 설명
Signature 모델의 입출력 스키마를 정의(형식, dtype, shape 등) 
생성 시점 mlflow.log_model() 호출 시 signature 인자 전달
자동 생성 방식 infer_signature(X, y_pred) 사용
명시적 정의 방식 ModelSignature(Schema([...])) 직접 작성
Input Example input_example= 인자 사용 시 JSON으로 저장됨
둘 다 생략 시 MLmodel 파일에 Signature 블록 미생성

 

MLflow의 signature는 단순한 부가 정보가 아니라
모델 재현성, 서빙 안정성, 입력 데이터 검증의 핵심 메타데이터입니다.

따라서 실무에서 mlflow.log_model()을 사용할 때는
꼭 signature와 input_example을 함께 지정해두는 것이 좋습니다