As an academic aspiring to get into industry, I realized I had to beef up my skills beyond academic research and kaggle datasets. What better way than to build a MLOps enterprise from scratch?
In three weeks I created RPS Quest - a full-stack MLOps proof of concept that helped me own the complete lifecycle: modeling, infrastructure, deployment, and observability. Fully open source with live dashboards.
Try it: https://mlops-rps.uk/ui-lite
🧮 The System: Players choose a model to play against:
- 🧠 Brian - feedforward neural network
- 🌲 Forrest - XGBoost
- 🪵 Logan - multinomial logistic regression
Treated as a Markov decision process (state = three action lookback). Real-time training on live player data with automated A/B testing. Four aliases per model (Production, B, shadow1, shadow2) with auto-promotion based on win rates and accuracy.
🧭 Infrastructure:
- k3s Kubernetes cluster orchestrating Python/FastAPI backend
- PyTorch + XGBoost for modeling
- MLflow/DagsHub for registry + tracking
- MinIO for model caching
- Dockerized for production parity
⚙️ Key MLOps Features:
- CronJob-triggered training pipelines syncing to MinIO/DagsHub
- 50-feature contract maintained across training/serving
- Grafana dashboards monitoring accuracy, win rates, and auto-promotions
- Parity testing using live game replays to catch drift
📈 Production Insights:
- Custom “danger penalty” loss function boosted neural net win rates
- XGBoost provides interpretable feature importance on player tendencies
- Models improve as real player data accumulates
🔗 Links:
- Play: https://mlops-rps.uk/ui-lite
- Metrics: https://jimmyrisk41.grafana.net/public-dashboards/786f7f916d084387b726ac4e7e8a7d95
- Details: https://jimmyrisk.github.io/rps/
- GitHub: https://github.com/jimmyrisk/rps
- DagsHub: https://dagshub.com/jimmyrisk/rps
