C.W.K.
Stream
Lesson 03 of 05 · published

Pipeline Artifact

~26 min · artifact, serialization, deployment

Level 0Scout
0 XP0/48 lessons0/11 achievements
0/120 XP to next level120 XP to go0% complete

artifact가 곧 계약

Deployable 한 게 모델이 아냐. preprocessing + 모델 전체 pipeline이 단일 artifact로 저장된 거. 디시플린은 fresh 환경에서 artifact load하고 raw row에 predict를 추가 glue 없이 돌리는 거. 안 되면 pipeline은 진짜 artifact 아직 아냐.

안에 뭐가 들어가나

  • Fitted Pipeline (preprocessing + 모델).
  • 예상 input column 이름과 dtype 리스트.
  • 모델 version, training timestamp, code commit, dataset hash.
  • (classification이면) 선택된 threshold와 training 시점 metric 값.

format 선택

joblib이 sklearn default. onnx가 non-Python runtime에서 serving 위한 cross-language option. boosting library엔 native format으로도 save(model.save_model('booster.json'))해서 unpickle 없이 나중에 split inspect 가능.

Code

pipeline과 metadata 함께 save·python
import json, joblib, hashlib, datetime

joblib.dump(pipe, "artifacts/churn_v1.joblib")
metadata = {
    "version": "churn_v1",
    "trained_at": datetime.datetime.utcnow().isoformat(),
    "git_commit": git_sha,
    "data_hash": hashlib.md5(open("data/processed/train.parquet", "rb").read()).hexdigest(),
    "features": list(X_train.columns),
    "threshold": 0.42,
    "pr_auc_train": float(pr_auc_train),
}
with open("artifacts/churn_v1.json", "w") as f:
    json.dump(metadata, f, indent=2)
serving 전 load와 validate·python
import joblib, json
import pandas as pd

pipe = joblib.load("artifacts/churn_v1.joblib")
meta = json.load(open("artifacts/churn_v1.json"))

def predict(raw_row: dict) -> dict:
    X = pd.DataFrame([raw_row])
    missing = set(meta["features"]) - set(X.columns)
    assert not missing, f"missing features: {missing}"
    p = pipe.predict_proba(X[meta["features"]])[0, 1]
    return {"prob": float(p), "label": int(p >= meta["threshold"]), "version": meta["version"]}

External links

Exercise

Trained pipeline을 joblib artifact + metadata JSON으로 save. fresh shell에서 둘 다 load 하고 raw row에 prediction serving 하는 20줄 script 작성. prediction이 training notebook과 매치되는지 검증.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.