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을 함께 지정해두는 것이 좋습니다
'MLOps·머신러닝 운영 > MLflow를 활용한 머신러닝 실험 관리' 카테고리의 다른 글
| MLflow Model Customization — 모델 커스터마이징으로 유연한 확장성 확보하기 (0) | 2025.10.24 |
|---|---|
| MLflow Model API (0) | 2025.10.24 |
| MLflow의 Signature와 Input Example 이해 (0) | 2025.10.23 |
| MLflow 산출물(Artifacts) 폴더 구조 이해하기 (0) | 2025.10.23 |
| MLflow Tracking 실험 관리 — 파라미터, 메트릭, 아티팩트, 태그 기록하기 (1) | 2025.10.22 |