Belajar AI #21: MLOps — Pipeline, Versioning Model, Deployment, Monitoring

Model dengan akurasi bagus di notebook itu baru separuh cerita. Separuh lainnya — yang dulu saya abaikan total — adalah bagaimana model itu tetap hidup di produksi: di-retrain saat data berubah, bisa dilacak versinya, di-deploy tanpa drama, dan dipantau performanya. Itulah MLOps. Anggap seperti DevOps tapi objek yang di-deploy bukan kode, melainkan kode + data + model sekaligus. Episode ini catatan saya memahami empat pilar MLOps.

Pilar 1: Pipeline yang Reproducible

Pipeline ML adalah rangkaian langkah dari data mentah sampai model terlatih: ingest, cleaning, feature engineering, training, evaluasi. Masalah klasik notebook: urutan eksekusi sel acak, hasil tiap run beda, tidak ada yang tahu model produksi dibuat dari data versi mana. Prinsipnya sama seperti CI/CD: setiap artefak harus bisa direproduksi dari sumbernya. scikit-learn punya abstraksi Pipeline yang menyatukan preprocessing dan model jadi satu objek — mengurangi kebocoran data antara train dan test:

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_score
from sklearn.datasets import load_iris

X, y = load_iris(return_X_y=True)

pipe = Pipeline([
    ("scaler", StandardScaler()),
    ("clf", LogisticRegression(max_iter=1000)),
])

scores = cross_val_score(pipe, X, y, cv=5)
print(scores.mean())

Pilar 2: Versioning Data & Model

Kode kita versioning pakai Git; data dan model juga perlu perlakuan sama. Kalau minggu depan akurasi turun, pertanyaan pertama: “model mana? dilatih dari data mana? dengan hyperparameter apa?” Tanpa versioning, jawabannya menebak-nebak. Tools umum: DVC untuk versioning dataset besar di atas Git, MLflow untuk melacak eksperimen (parameter, metrik, artefak model). Contoh logging sederhana dengan MLflow:

import mlflow
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.datasets import load_iris

X, y = load_iris(return_X_y=True)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, random_state=42)

with mlflow.start_run():
    mlflow.log_param("n_estimators", 200)
    clf = RandomForestClassifier(n_estimators=200, random_state=42)
    clf.fit(X_tr, y_tr)
    acc = accuracy_score(y_te, clf.predict(X_te))
    mlflow.log_metric("accuracy", acc)
    mlflow.sklearn.log_model(clf, "model")

Pilar 3: Deployment

Cara termurah menyajikan model: bungkus sebagai REST API. FastAPI pilihan populer karena cepat dan validasi skema otomatis via Pydantic:

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Features(BaseModel):
    sepal_length: float
    sepal_width: float
    petal_length: float
    petal_width: float

@app.post("/predict")
def predict(f: Features):
    x = [[f.sepal_length, f.sepal_width, f.petal_length, f.petal_width]]
    return {"prediction": int(clf.predict(x)[0])}

Untuk skala lebih besar ada serving khusus seperti TensorFlow Serving atau TorchServe, plus strategi rilis yang familiar bagi web developer: canary deployment, A/B testing antar versi model, rollback cepat.

Pilar 4: Monitoring

Model tidak rusak mendadak seperti server down — ia membusuk perlahan. Data dunia nyata bergeser (data drift), distribusi input berubah, dan akurasi tergerus diam-diam. Yang dipantau minimal: latensi dan error rate API (seperti service biasa), distribusi fitur input vs waktu training, dan proxy label ground truth kalau tersedia. Ketika drift terdeteksi, picu retraining. Monitoring tanpa aksi retraining hanya pajangan dashboard.

TahapMasalah tanpa MLOpsPraktik minimum
PipelineNotebook tak reproduciblePipeline + seed tetap
VersioningLupa model versi manaMLflow/DVC
DeploymentModel dikirim via email/screenshotREST API + container
MonitoringAkurasi turun tak terdeteksiDrift check + alert

Jujur saja: untuk proyek pribadi saya belum menjalankan semua ini penuh. Tapi sekali model harus dipertanggungjawabkan ke user nyata, MLOps berhenti jadi kata kunci LinkedIn dan mulai jadi kebutuhan.

Sumber

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses