News

MLOps: Terapkan Disiplin DevOps untuk Machine Learning

Eko Susilo Harjo August 26, 2025

Pengantar

MLOps (Machine Learning Operations) adalah gabungan praktik DevOps yang diterapkan pada seluruh siklus hidup model AI. Dengan MLOps, tim dapat memindahkan model dari notebook eksperimen ke produksi secara reliable, terukur, dan otomatis. Artikel ini bakal ngasih blueprint praktis untuk developer, data scientist, dan platform engineer yang mau membangun sistem ML produksi.

Siklus Hidup MLOps End‑to‑End

Stage Tujuan Utama Artefak Umum
1️⃣ Data collection & ingestion Mengumpulkan sinyal mentah, pastikan lineage File raw, topik streaming, entri katalog
2️⃣ Feature engineering & storage Ubah data mentah menjadi fitur siap pakai Definisi fitur, tabel feature store
3️⃣ Model training & experimentation Iterasi cepat, lacak performa Kode, hyper‑parameter, metrik, artefak
4️⃣ Validation & testing Pastikan requirement fungsional & non‑fungsional Unit test, cek bias, threshold performa
5️⃣ Model packaging & registration Bekukan versi yang dapat direproduksi Image Docker, binary model, entri registry
6️⃣ Deployment (online/offline) Layani prediksi dengan skala Endpoint REST/GRPC, batch job, firmware edge
7️⃣ Monitoring & observability Deteksi drift, latency spikes, error Dashboard metrik, rule alert
8️⃣ Automated retraining & rollback Jaga model tetap fresh & aman Trigger retraining, pipeline CI, rollback versi

Insight utama: Setiap tahap harus otomatis, ter‑versi, dan dapat dipantau. Kalau ada yang dilewatkan, bakal muncul tech debt yang bikin insiden produksi.

Komponen Inti MLOps & Rekomendasi Tools

Komponen Masalah yang Diselesaikan Pilihan Open‑Source Populer Pro / Kontra Singkat
Data Management & Feature Store Pusatkan data mentah, enforce schema, reuse fitur
  • Feast
  • Hopsworks Feature Store
Feast: cloud‑agnostic, ringan. Hopsworks: UI + governance, lebih berat.
Experiment Tracking & Model Registry Log metrik, bandingkan run, simpan binary model MLflow, Weights & Biases, Neptune.ai MLflow: gratis, mudah self‑host, multi‑bahasa.
Pipeline Orchestration Definisikan DAG reproducible untuk training, validasi, deployment Kubeflow Pipelines, Apache Airflow, Dagster Kubeflow: native K8s, bagus untuk GPU. Airflow: mature, komunitas kuat.
Model Serving Inference latency rendah, scaling, A/B testing TensorFlow Serving, Seldon Core, KServe KServe: serverless di K8s, dukung banyak framework.
Monitoring & Drift Detection Track latency, akurasi, data drift, resource usage Prometheus + Grafana, Evidently AI, WhyLabs Evidently: dashboard cepat, open‑source.
CI/CD untuk ML Otomatisasi build‑test‑deploy model GitHub Actions + MLflow, GitLab CI + DVC, Argo Workflows Argo: K8s‑native, cocok untuk branching kompleks.
Security & Governance Enforce akses, audit trail, privasi data Open Policy Agent (OPA), HashiCorp Vault, integrasi IAM OPA: policy‑as‑code, bekerja di K8s, CI, serving.

Tips: Mulai dengan satu tool per komponen yang paling cocok dengan infrastruktur yang sudah ada. Nanti bisa ditambah atau diganti tanpa harus redesign seluruh pipeline.

Contoh Pipeline Praktis (MLflow + Kubeflow)

Prasyarat (Ubuntu 22.04, Python 3.11)

# System packages
sudo apt-get update && sudo apt-get install -y docker.io kind kubectl

# Python environment
python -m venv .venv && source .venv/bin/activate
pip install --upgrade pip
pip install \
    pandas scikit-learn \
    mlflow feast[sqlite] \
    kfp==2.5.0 \
    kserve==0.11.0 \
    prometheus-client \
    evidently==0.4.2

Untuk produksi, pakai managed K8s (EKS, GKE, AKS) dan backend Feast yang lebih kuat (Redis, BigQuery).

Langkah 1: Ingest & Register Fitur dengan Feast

# feature_repo/feature_store.py
import pandas as pd
from feast import FeatureStore, Entity, FeatureView, FileSource, ValueType

# 1️⃣ Source CSV lokal
source = FileSource(
    path="data/creditcard.csv",
    event_timestamp_column="Timestamp",
    created_timestamp_column="CreatedAt",
)

# 2️⃣ Entity – primary key
customer = Entity(name="customer_id", join_keys=["CustomerID"], value_type=ValueType.INT64)

# 3️⃣ FeatureView – definisi fitur
features = FeatureView(
    name="customer_features",
    entities=[customer],
    ttl=86400,
    schema=[
        ("Age", ValueType.INT64),
        ("Income", ValueType.FLOAT),
        ("CreditScore", ValueType.FLOAT),
        ("NumOpenAccounts", ValueType.INT64),
    ],
    source=source,
    online=True,
)

if __name__ == "__main__":
    store = FeatureStore(repo_path=".")
    store.apply([customer, features])
    store.materialize_incremental(end_date=pd.Timestamp.utcnow())

Jalankan python feature_repo/feature_store.py. Sekarang SQLite online_store.db berisi vektor fitur yang siap dipanggil saat inference.

Langkah 2: Tracking Eksperimen dengan MLflow

# training/train.py
import mlflow
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.metrics import roc_auc_score

mlflow.set_tracking_uri("http://localhost:5000")
mlflow.set_experiment("loan-default-prediction")

def main():
    df = pd.read_csv("data/creditcard.csv")
    X = df[["Age", "Income", "CreditScore", "NumOpenAccounts"]]
    y = df["Default"]
    X_train, X_test, y_train, y_test = train_test_split(
        X, y, test_size=0.2, random_state=42, stratify=y
    )
    with mlflow.start_run():
        mlflow.log_params({"n_estimators": 200, "learning_rate": 0.05, "max_depth": 3})
        model = GradientBoostingClassifier(
            n_estimators=200, learning_rate=0.05, max_depth=3, random_state=42
        )
        model.fit(X_train, y_train)
        preds = model.predict_proba(X_test)[:, 1]
        auc = roc_auc_score(y_test, preds)
        mlflow.log_metric("test_auc", auc)
        mlflow.sklearn.log_model(model, artifact_path="model")
        print(f"Run completed – Test AUC: {auc:.4f}")

if __name__ == "__main__":
    main()

Jalankan server MLflow di terminal terpisah:

mlflow server \
    --backend-store-uri sqlite:///mlflow.db \
    --default-artifact-root ./mlruns \
    --host 0.0.0.0 --port 5000

Setelah training selesai, buka http://localhost:5000 untuk lihat run, bandingkan metrik, dan daftarkan model terbaik ke registry:

from mlflow.tracking import MlflowClient
client = MlflowClient()
run_id = "YOUR_RUN_ID"
client.create_registered_model("loan-default-model")
client.create_model_version(
    name="loan-default-model",
    source=mlflow.get_artifact_uri(run_id) + "/model",
    run_id=run_id,
)

Langkah 3: Orkestrasi dengan Kubeflow Pipelines

# pipeline/pipeline.py
import kfp
from kfp import dsl
from kfp.dsl import ContainerOp

def data_preprocess_op():
    return ContainerOp(
        name="Preprocess",
        image="python:3.11-slim",
        command=["python", "-c"],
        arguments=["""
import pandas as pd
df = pd.read_csv('/data/creditcard.csv')
df.to_parquet('/output/features.parquet')
"""],
        file_outputs={"features": "/output/features.parquet"},
        pvolumes={"/data": kfp.dsl.PipelineVolume(pvc="data-pvc"),
                  "/output": kfp.dsl.PipelineVolume(pvc="output-pvc")}
    )

def train_op(features_path: str):
    return ContainerOp(
        name="Train",
        image="python:3.11-slim",
        command=["python", "-m", "training.train"],
        arguments=["--features", features_path],
        pvolumes={"/data": kfp.dsl.PipelineVolume(pvc="output-pvc")}
    )

@dsl.pipeline(
    name="Loan Default Prediction",
    description="Dari CSV mentah → feature store → model registry → endpoint KServe"
)
def loan_default_pipeline():
    preprocess = data_preprocess_op()
    train = train_op(preprocess.outputs["features"])

if __name__ == "__main__":
    kfp.Client(host="http://localhost:8080").create_run_from_pipeline_func(
        loan_default_pipeline, arguments={}
    )

Port‑forward UI Kubeflow (kubectl port-forward svc/ml-pipeline-ui 8080:80) dan jalankan pipeline lewat http://localhost:8080.

Langkah 4: Deploy Model dengan KServe

# kserve/loan-default.yaml
apiVersion: "serving.kserve.io/v1beta1"
kind: "InferenceService"
metadata:
  name: loan-default
spec:
  predictor:
    sklearn:
      storageUri: "gs://my-bucket/mlflow/loan-default-model/1/model"
      resources:
        requests:
          cpu: "500m"
          memory: "1Gi"

Apply file:

kubectl apply -f kserve/loan-default.yaml

Uji endpoint:

curl -X POST http:///v1/models/loan-default:predict \
  -H "Content-Type: application/json" \
  -d '{"instances": [[45, 72000, 680, 3]]}'

Anda akan menerima JSON dengan probabilitas default.

Langkah 5: Monitoring & Retraining Otomatis

  • Prometheus Exporter – tambahkan sidecar pada pod KServe untuk expose latency & request count.
  • Evidently Drift Dashboard – job harian bandingkan distribusi fitur live vs baseline.
  • Alertmanager – jika evidently_data_drift_score > 0.2 selama 3 kali berturut‑turut, webhook akan memicu pipeline Kubeflow kembali.
# alertmanager/rules.yml
groups:
- name: mlops-retrain
  rules:
  - alert: DataDriftDetected
    expr: evidently_data_drift_score > 0.2
    for: 15m
    labels:
      severity: critical
    annotations:
      summary: "Data drift exceeds threshold"
      runbook_url: "https://github.com/yourorg/mlops-runbooks#retrain"

Pemilihan Tools – Matriks Perbandingan

Dimensi MLflow Kubeflow Airflow Dagster
Fokus Utama Tracking eksperimen & registry model Pipeline ML lengkap di K8s Orkestrasi umum (ETL, batch) Pipelines data‑centric dengan tipe kuat
Kubernetes Native? Tidak (bisa dijalankan di container) Ya Tidak Ya (via Dagster‑K8s)
UI untuk perbandingan run ✅ (Kubeflow UI) ❌ (perlu plugin) ✅ (Dagit)
Feature Store bawaan ✅ (integrasi Feast)
CI/CD Friendly ✅ (CLI & REST) ✅ (pipeline as code)
Kurva Belajar Rendah Menengah‑tinggi Menengah Menengah
Rekomendasi Tim kecil yang butuh tracking cepat Organisasi besar dengan K8s & GPU Tim legacy yang sudah pakai Airflow Tim yang suka type‑safe pipelines

Kesalahan Umum & Cara Menghindarinya

Pitfall Mengapa Terjadi Solusi
Data drift tidak terdeteksi Monitoring ad‑hoc, tidak ada dashboard otomatis Deploy dashboard drift (Evidently/WhyLabs) + alert threshold.
Kebingungan versi model Copy‑paste manual file model, penamaan tidak konsisten Gunakan satu sumber kebenaran: model registry (MLflow, Sagemaker).
Environment mismatch dev ↔ prod Library versi berbeda, hardware CPU vs GPU Containerisasi setiap stage, simpan Dockerfile di VCS.
Pipeline CI tidak stabil Test flaky, seed acak tidak dikunci Pin random seed, gunakan deterministic training, jalankan smoke test tiap deploy.
Keamanan lemah Artefak model terbuka, data pipeline tidak terenkripsi IAM, enkripsi at‑rest, policy‑as‑code dengan OPA.
Biaya tak terkendali Auto‑scale GPU pod tanpa batas Set quota, pakai spot instances untuk batch, pantau dashboard biaya cloud.

Dampak Karir & Bisnis dari MLOps

Aspek Dampak
Speed to Market CI/CD otomatis mengurangi waktu rollout model dari minggu ke hari.
Reliability Rollback teruji mengurangi downtime akibat model buruk.
Governance Pipeline audit‑able memudahkan kepatuhan GDPR, HIPAA.
Collaboration Hand‑off jelas antara data, model, dan ops meningkatkan morale tim.
Cost Efficiency Resource‑aware pipeline hindari over‑provisioning GPU.
Career Growth Keahlian MLOps menjembatani data science & platform engineering – sangat dicari 2024‑2025.

Checklist Praktis

  • ✅ Tentukan dan implementasikan feature store (misal Feast).
  • ✅ Pasang MLflow sebagai satu‑satunya registry model.
  • ✅ Pilih orchestrator (Kubeflow bila pakai K8s, atau Airflow).
  • ✅ Containerize kode training & inference, simpan image di registry privat.
  • ✅ Deploy model dengan KServe atau Seldon, expose metrik Prometheus.
  • ✅ Tambahkan monitoring drift & bias (Evidently) + alerting.
  • ✅ Dokumentasikan runbook rollback, pengecekan kualitas data, dan audit trail.

Kesimpulan

MLOps bukan sekadar kumpulan tools, melainkan budaya yang mengikat data engineering, pengembangan model, dan operasi DevOps. Dengan mengikuti alur lifecycle, memakai stack yang direkomendasikan, dan menyiapkan monitoring otomatis, tim dapat ship model lebih cepat, lebih aman, dan lebih terukur.

Mulai dari hal kecil – misalnya gunakan MLflow untuk tracking dan Feast untuk feature store – lalu tingkatkan secara bertahap ke Kubeflow & KServe. Setiap iterasi akan memberi feedback loop yang memperbaiki kualitas model dan proses.

Ready to level‑up your ML pipelines? Implementasikan checklist di atas, dan lihat bagaimana tim Anda bertransformasi menjadi tim MLOps yang tangguh.

Meta Description: Panduan praktis MLOps 2025: cara menggabungkan DevOps dengan Machine Learning, contoh pipeline MLflow + Kubeflow, tool terbaik, dan checklist produksi.

Focus Keywords: MLOps, DevOps untuk Machine Learning, pipeline MLOps, MLflow, Kubeflow, Feast, KServe, monitoring model


Discover more from teknologi now

Subscribe to get the latest posts sent to your email.

Pengenalan Go 1.25 baru saja rilis dan bawa banyak peningkatan yang bikin hidup developer lebih gampang. Di artikel ini, kita bakal bahas tiga fitur paling menonjol: DWARF v5 untuk debugging yang lebih ringan, go doc -http yang menyiapkan server dokumentasi lokal dalam hitungan detik, serta interface XOF untuk hash yang output‑nya bisa diperpanjang. Semua dijelaskan dengan […]

News

Change Data Capture (CDC)

Eko Susilo Harjo

28 August 2025

Di era digital, sistem ERP (Enterprise Resource Planning) menjadi tulang punggung perusahaan. Semua proses – mulai dari keuangan, HR, inventori, hingga produksi – bertumpu pada data yang terus berubah setiap detik.Tantangannya: bagaimana cara menampilkan data yang selalu up-to-date tanpa membebani server? Jawabannya ada pada teknologi Change Data Capture (CDC). Apa itu CDC? Change Data Capture […]

News

ncdu: Senjata Rahasia DevOps Saat Disk Penuh

Eko Susilo Harjo

25 August 2025

Pernah nggak sih, lagi asik-asiknya kerja, tiba-tiba server kasih pesan horor: 😱 Semua service mulai error, container berhenti, bahkan kadang login pun terasa lambat.Sebagai DevOps, ini mimpi buruk. Tapi tenang, ada satu tool kecil yang sering jadi pahlawan penyelamat: ncdu. Apa Itu ncdu? ncdu (NCurses Disk Usage) adalah versi super power dari du.Kalau du -sh […]

Discover more from teknologi now

Subscribe now to keep reading and get access to the full archive.

Continue reading