Bab 10 ~4 jam
Deploy Model & MLOps
Model tidak berguna jika hanya di notebook. Pelajari cara membawa model ke produksi dengan API, container, dan pipeline otomatis.
Dalam bab ini
10.1 REST API dengan FastAPI
FastAPI adalah standar modern untuk menyajikan model ML — cepat, type-hinted, dan otomatis terdokumentasi.
from fastapi import FastAPI
from pydantic import BaseModel
import joblib
import numpy as np
app = FastAPI (title="Klasifikasi Iris" )
model = joblib.load ("model.joblib" )
scaler = joblib.load ("scaler.joblib" )
class InputIris (BaseModel):
sepal_length: float
sepal_width: float
petal_length: float
petal_width: float
class Prediksi (BaseModel):
spesies: str
probabilitas: dict
@app.post ("/predict" , response_model=Prediksi)
async def predict (data: InputIris):
fitur = np.array ([[data.sepal_length, data.sepal_width,
data.petal_length, data.petal_width]])
fitur_scaled = scaler.transform (fitur)
proba = model.predict_proba (fitur_scaled)[0 ]
spesies = model.classes_ [np.argmax (proba)]
return Prediksi (
spesies=spesies,
probabilitas={str (c): round (float (p), 4 )
for c, p in zip (model.classes_, proba)}
)
Uji coba: FastAPI otomatis menghasilkan dokumen interaktif di /docs (Swagger UI) dan /redoc. Tidak perlu frontend untuk menguji API Anda.
10.2 Kontainer Docker
Docker memaketkan model, kode, dan dependensi ke dalam kontainer portabel yang berjalan identik di mana saja.
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY model.joblib scaler.joblib ./
COPY app.py ./
EXPOSE 8000
HEALTHCHECK --interval=30s --timeout=3s \
CMD curl -f http://localhost:8000/health || exit 1
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"]
docker build -t klasifikasi-iris .
docker run -p 8000:8000 klasifikasi-iris
curl -X POST http://localhost:8000/predict \
-H "Content-Type: application/json" \
-d '{"sepal_length":5.1,"sepal_width":3.5,"petal_length":1.4,"petal_width":0.2}'
10.3 Versioning Model
Lacak eksperimen, parameter, dan artefak model secara sistematis.
import mlflow
import mlflow.sklearn
mlflow.set_experiment ("klasifikasi-iris" )
with mlflow.start_run (run_name="random_forest_v2" ):
mlflow.log_params ({"n_estimators" : 200 , "max_depth" : 5 })
model = RandomForestClassifier (n_estimators=200 , max_depth=5 )
model.fit (X_train, y_train)
mlflow.log_metrics ({"akurasi" : akurasi, "f1" : f1})
mlflow.sklearn.log_model (model, "model" )
mlflow.sklearn.serve ("runs:/<run-id>/model" , port=5000 )
10.4 Pipeline CI/CD
Otomatiskan pengujian, pembangunan, dan deployment model ML Anda.
name : Latih & Deploy
on :
push :
branches : [main]
schedule :
- cron : '0 0 * * 0'
jobs :
latih-dan-deploy :
runs-on : ubuntu-latest
steps :
- uses : actions/checkout@v4
- uses : actions/setup-python@v5
with : { python-version: '3.11' }
- run : pip install -r requirements.txt
- run : pytest tests/
- run : python train.py
- run : docker build -t model:${{ github.sha }} .
- run : docker push registry/model:${{ github.sha }}
10.5 Monitoring & Deteksi Drift
Model akan menurun kinerjanya seiring waktu. Monitoring mendeteksi kapan retraining diperlukan.
Data Drift
Distribusi fitur input berubah. Deteksi dengan uji KS, PSI, atau chi-kuadrat. Contoh: pola musiman, demografi pengguna baru.
Concept Drift
Hubungan fitur-target berubah. Lebih sulit dideteksi. Contoh: pola fraud berevolusi, perubahan regime pasar.
from scipy import stats
def hitung_psi (expected, actual, buckets=10 ):
breaks = np.quantile (expected, np.linspace (0 , 1 , buckets + 1 ))
expected_pct = np.histogram (expected, bins=breaks)[0 ] / len (expected)
actual_pct = np.histogram (actual, bins=breaks)[0 ] / len (actual)
expected_pct = np.clip (expected_pct, 0.0001 , None )
actual_pct = np.clip (actual_pct, 0.0001 , None )
psi = np.sum ((actual_pct - expected_pct) * np.log (actual_pct / expected_pct))
return psi
10.6 Praktik Terbaik MLOps
› Versioning segalanya: Kode, data, model, konfigurasi — semuanya di-versioning. Gunakan Git untuk kode, DVC untuk data, MLflow untuk model.
› Otomatiskan pipeline: Dari ingesti data hingga deployment. Langkah manual memperkenalkan error dan tidak scalable.
› Uji secara menyeluruh: Unit test untuk transformasi data, integration test untuk pipeline, performance test untuk model.
› Buat eksperimen reproducible: Tetapkan random seed, pin versi library, log semua hyperparameter.
› Rancang untuk rollback: Selalu simpan versi model sebelumnya yang masih berjalan. Deployment canary untuk model baru.
› Monitor di produksi: Lacak distribusi prediksi, latensi, error rate, dan metrik bisnis.
› Dokumentasikan model: Model cards berisi: tujuan, data training, keterbatasan, analisis keadilan, benchmark kinerja.
Latihan Akhir: Proyek end-to-end: latih model pada dataset California housing, simpan, buat wrapper FastAPI, kontainerisasi dengan Docker, dan deploy secara lokal. Tambahkan health check dan validasi input dasar.
Kursus Selesai! 🎉
Anda telah menempuh seluruh pipeline data science dan machine learning — dari dasar Python hingga deployment ke produksi. Terus berlatih, terus membangun, terus belajar.
Kembali ke Ikhtisar Mata Kuliah
Sebelumnya
Akhir kursus