The finale: assemble the whole series — FastAPI, Docker, GitHub Actions, ECR, Terraform, EKS, MLflow, Prometheus/Grafana, and drift-triggered retraining — into one platform, and trace a change from git push to a promoted model serving traffic. Part 11 of the MLOps series.
A model can fail with no code change at all: the world moves on and your frozen model goes stale. Detect data and concept drift with a KS test, and build a retraining pipeline that only ships a new model if it beats the current one. Part 10 of the MLOps series.
A running model you can't see is one you can't trust. Add a real /metrics endpoint, scrape it with Prometheus, chart it in Grafana, and alert on latency, errors, and the shape of your predictions. Part 9 of the MLOps series.
Git tracks your code and MLflow tracks your models, but which dataset trained which model? DVC versions data the way Git versions code: a tiny pointer in Git, the bytes in S3. Hands-on init, add, remote, push, pull. Part 6 of the MLOps series.
Stop overwriting model.joblib. Track every experiment's params and metrics, register versions, and promote by a champion/challenger gate with MLflow, so 'which model is in production, and is it actually better' has an answer. Part 5 of the MLOps series.
Package the model, the exact scikit-learn version, and the API into one image that runs the same everywhere. Multi-stage builds, a lean non-root image, .dockerignore, and Docker Compose. Part 3 of the MLOps series.
Turn a model artifact into a real prediction API — request validation with Pydantic, automatic Swagger docs, real-time vs batch inference, and a Docker-ready project structure. Part 2 of the MLOps series.
MLOps explained for DevOps engineers — what it is, why plain DevOps isn't enough for ML, and a hands-on look at training vs inference using a real scikit-learn model. Part 1 of an 11-part series.