MLflow 해부 (3) 모델 기록: log_model, signature, autolog
log_model이 남기는 flavor와 환경 정보, 입력 스키마를 기록하는 signature, 그리고 수동 로깅을 한 줄로 대체하는 autolog의 동작 범위와 사용 기준을 정리합니다.
MLflow 해부 시리즈의 3편입니다. 전체 목차는 0편에 있습니다.
log_model은 log_artifact와 다르다
모델 파일을 log_artifact로 올려도 저장은 됩니다. 차이는 log_model이 모델을 “다시 실행 가능한 형태”로 저장한다는 점입니다.
1
2
3
4
5
6
7
8
9
10
from mlflow.models import infer_signature
signature = infer_signature(X_val, model.predict(X_val))
mlflow.sklearn.log_model(
model,
name="model",
signature=signature,
input_example=X_val[:3],
)
이 호출이 run 아래에 남기는 것은 모델 파일 하나가 아니라 폴더입니다.
1
2
3
4
5
model/
├── MLmodel # 모델 메타데이터: flavor, signature
├── model.pkl # 직렬화된 모델
├── requirements.txt # 재현용 의존성 목록
└── input_example.json # 입력 예시
- flavor: 이 모델을 어떤 인터페이스로 로딩할 수 있는지의 목록입니다. sklearn으로 저장한 모델은 sklearn flavor와 pyfunc flavor를 함께 가져서, scikit-learn 없이도 공통 인터페이스(pyfunc)로 로딩할 수 있습니다
- requirements.txt: 학습 당시의 라이브러리 버전이 자동 기록됩니다. 서빙 환경을 맞출 때의 기준이 됩니다
signature: 입력 스키마의 계약
signature는 모델이 받는 입력의 컬럼과 dtype 기록입니다. 없어도 저장되지만, 있어야 서빙 시점에 잘못된 입력이 스키마 검증에서 걸립니다. 학습 때 20개 컬럼이었는데 서빙 요청이 19개로 오는 사고를 에러 메시지 한 줄로 바꿔주는 장치라서, infer_signature로 만들어 붙이는 것을 기본 습관으로 권합니다.
저장한 모델은 pyfunc 인터페이스로 다시 불러옵니다.
1
2
loaded = mlflow.pyfunc.load_model("runs:/<run_id>/model")
loaded.predict(X_val[:3])
runs:/<run_id>/model URI가 “그 run이 남긴 그 모델”을 가리킵니다. run_id 대신 이름과 버전으로 가리키는 방법이 4편의 Model Registry입니다.
autolog
지원 프레임워크를 쓴다면 2편의 수동 로깅 대부분을 한 줄로 대체할 수 있습니다.
1
2
3
mlflow.autolog()
model = RandomForestRegressor(**params).fit(X_tr, y_tr) # 이 호출이 자동 기록된다
fit() 호출을 가로채서 파라미터 전체, 학습 지표, 모델(signature 포함)을 자동으로 남깁니다. scikit-learn, LightGBM, XGBoost, PyTorch Lightning, Keras 등을 지원합니다.
사용 기준은 이렇게 잡으면 됩니다.
- autolog로 시작합니다. 기록 누락이 없고 코드가 짧아집니다
- 통제가 필요해지면 명시적 로깅을 섞습니다. autolog는 학습 지표를 남기지만, 별도 검증셋 지표나 커스텀 지표는 직접
log_metric해야 합니다. 두 방식은 같은 run 안에서 공존합니다 - 순수 PyTorch 학습 루프는 처음부터 수동입니다. autolog는
fit()같은 진입점을 가로채는 방식이라, 직접 짠 for 루프는 대상이 아닙니다. epoch마다log_metric(step=...)을 직접 넣습니다
이 편의 요약
- 모델은
log_artifact가 아니라log_model로 저장합니다. flavor, 의존성, signature가 함께 남습니다 - signature는 서빙 사고를 입력 검증 에러로 바꿔주는 계약입니다.
infer_signature로 만들어 붙입니다 - autolog로 시작하고, 커스텀 지표는 명시적 로깅으로 보강합니다
다음 편에서는 run 안의 모델에 이름과 버전을 붙이는 Model Registry를 다룹니다.