From Jupyter notebooks to production-grade ML systems.
A hands-on course that teaches you how to build, deploy, and operate ML models like a professional engineer. No slides, no fluff. Just real code, real tools, and real pipelines.
Most ML courses stop at model.fit(). This one starts there.
You will learn how to take a trained model and turn it into a reliable, testable, deployable service with proper CI/CD, orchestration, monitoring, and containerisation. Everything you need to go from a prototype to production.
┌─────────────────────────────────────────────────────────────────┐
│ MLOps Pipeline │
├─────────────┬─────────────┬──────────────┬──────────────────────┤
│ Training │ Registry │ Serving │ Orchestration │
│ │ │ │ │
│ scikit- │ MLflow │ Flama │ Airflow │
│ learn │ │ + Docker │ │
└─────────────┴─────────────┴──────────────┴──────────────────────┘
# Clone
git clone git@github.com:vortico/mlops-course.git && cd mlops-course
# Install
make install-dev
# Serve the model
make model-serveThe API will be available at http://localhost:8000 with interactive docs at http://localhost:8000/docs/.
mlops-course/
├── mlops/ # Python package (the core ML application)
│ ├── app.py # Flama API entrypoint
│ ├── apps/ # Mounted sub-applications (e.g. churn)
│ ├── pipelines/ # scikit-learn training pipelines
│ ├── processors/ # Data preprocessing (e.g. outlier clipping)
│ └── transformers/ # Custom sklearn transformers
├── notebooks/ # Exploratory analysis & experiments
├── airflow/ # DAGs for pipeline orchestration
├── mlflow/ # Model registry configuration
├── artifacts/ # Trained model artifacts (.flm files)
├── data/ # Datasets (churn, cars)
├── tests/ # Test suite
├── docs/ # Course documentation
├── Dockerfile # Production container
├── docker-compose.yaml # Local development stack
└── Makefile # Developer commands (run `make` for help)
| Layer | Tool | Purpose |
|---|---|---|
| Language | Python 3.12 | Core language |
| ML Framework | scikit-learn | Training and pipelines |
| API Serving | Flama | Model serving with OpenAPI docs |
| Containerisation | Docker | Reproducible deployments |
| Orchestration | Apache Airflow | Pipeline scheduling and DAGs |
| Model Registry | MLflow | Experiment tracking and model versioning |
| Package Manager | Poetry | Dependency management |
| Code Quality | ruff, black, isort, pyright | Linting and type checking |
| Testing | pytest | Unit and integration tests |
Run make to see all available commands:
make install-dev # Install project with dev dependencies
make install # Install project (main dependencies only)
make model-serve # Serve the model locally
make model-start # Start the model container (Docker)
make model-stop # Stop the model container
make airflow-start # Start Airflow
make airflow-stop # Stop Airflow
make lint # Run linting tools
make lint-fix # Auto-fix linting issues
make test # Run test suiteDetailed guides for each topic are in the docs/ directory:
| Topic | Description |
|---|---|
| Development Environment | Setting up pyenv + Poetry for ML projects |
| Make & Automation | Using Makefiles for reproducible workflows |
| Package Structure | Organising ML code as a proper Python package |
| CI/CD | Continuous integration and deployment for ML |
| MLflow | Experiment tracking and model registry |
| Airflow | Orchestrating ML pipelines with DAGs |
# 1. Install dev dependencies
make install-dev
# 2. Make your changes
# 3. Validate
make lint && make test
# 4. Submit a pull requestMIT. See LICENSE for details.
Built with 🔥 by Vortico