Skip to main content

Infra for academia

Project description

deployml

A CLI tool that deploys a production MLOps stack on GCP with a single command. Built for academic ML courses so students can focus on building models, not infrastructure.

What you get

  • MLflow — experiment tracking, artifact storage, and model registry (backed by Cloud SQL Postgres + GCS)
  • FastAPI — model serving endpoint that loads the latest registered model from MLflow automatically
  • Grafana — monitoring dashboard connected to your metrics database
  • BigQuerymlops dataset with tables for features, predictions, ground truth, and drift metrics

All running on GCP Cloud Run. No servers to manage. Cloud Run services scale to zero when idle. Cloud SQL and BigQuery storage incur baseline cost. See Costs below.

Quick Start

1. Install

pip install deployml-core

2. Initialize your GCP project (enables APIs, creates Artifact Registry)

deployml init --provider gcp --project-id YOUR_GCP_PROJECT_ID

3. Configure

cp config.example.yaml config.yaml
# Edit config.yaml and set your project_id

4. Build images

deployml build-images --create-repo

5. Deploy

deployml deploy --verbose

First deploy takes ~20 minutes (Cloud SQL provisioning). Subsequent deploys are 1–2 minutes.

6. Get your URLs

deployml get-urls

Prints service URLs and writes a .env file with MLFLOW_URL, FASTAPI_URL, GRAFANA_URL, BIGQUERY_PROJECT, and BIGQUERY_DATASET.

End-to-End Example

Once deployed, the example/ directory walks through a complete MLOps workflow using a synthetic housing price dataset:

pip install mlflow scikit-learn pandas numpy google-cloud-bigquery db-dtypes python-dotenv requests

python example/scripts/01_load_training_data.py   # load 500 rows into BigQuery
python example/scripts/02_train_model.py           # train RandomForest, log to MLflow
python example/scripts/03_register_model.py        # register model as Production
python example/scripts/04_make_predictions.py      # serve 50 predictions via FastAPI
python example/scripts/05_generate_ground_truth.py # simulate actual outcomes
python example/scripts/06_compute_drift_metrics.py # compute feature drift + MAE
python example/scripts/07_setup_grafana.py         # provision monitoring dashboard

See example/README.md for details.

Teardown

deployml destroy

Deletes all Cloud Run services, Cloud SQL, the GCS bucket, and the BigQuery dataset, and also removes the Artifact Registry repo and the Cloud Build staging bucket that build-images created, so a destroyed project leaves no billing residue. Pass --keep-images if other workspaces in the same project share those images. Does not delete the GCP project itself.

Full Tutorial

See docs/tutorials/gcp-cloud-run.md for a step-by-step walkthrough.

Other deployment targets

Cloud Run is the primary, fully supported path. The CLI also supports Kubernetes for users who want a cluster:

  • Local minikube, for testing without GCP: mlflow-init and mlflow-deploy, or minikube-init and minikube-deploy.
  • GKE on GCP: gke-cluster-create, gke-init, then gke-deploy or gke-apply, torn down with gke-destroy.

MLflow keeps its data on a PersistentVolumeClaim in both, so experiments survive pod restarts. See CLI Commands and the GKE flow notes.

Requirements

  • Python 3.11 or newer
  • gcloud CLI, authenticated with gcloud auth login, gcloud auth application-default login, and gcloud auth configure-docker us-west1-docker.pkg.dev
  • Docker, running
  • Terraform 1.0 or newer

Run deployml doctor --project-id YOUR_GCP_PROJECT_ID to verify auth, ADC, tool versions, enabled APIs, and IAM roles on your project.

Costs

Cloud Run scales to zero when idle. Cloud SQL Postgres and BigQuery storage do not. Expect roughly $30 to $80 per month while the stack is up. MLflow runs with min_instances = 1 by default for snappy UI, which adds about $5 per month. Set min_instances to 0 if you want zero idle cost in exchange for cold starts. Always run deployml destroy when done.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

deployml_core-0.0.67.tar.gz (147.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

deployml_core-0.0.67-py3-none-any.whl (192.6 kB view details)

Uploaded Python 3

File details

Details for the file deployml_core-0.0.67.tar.gz.

File metadata

  • Download URL: deployml_core-0.0.67.tar.gz
  • Upload date:
  • Size: 147.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for deployml_core-0.0.67.tar.gz
Algorithm Hash digest
SHA256 24f7ee53eb596ae42ce46b6cc0229a2028cac424de36de9136c3619dd0099384
MD5 6fb4f01e21edec3fdda27bc0f4630a7f
BLAKE2b-256 ccfba5e7ea1170616eb4d753702e686dec5e4c5f2efff5bce7d1dc83252ed599

See more details on using hashes here.

File details

Details for the file deployml_core-0.0.67-py3-none-any.whl.

File metadata

  • Download URL: deployml_core-0.0.67-py3-none-any.whl
  • Upload date:
  • Size: 192.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for deployml_core-0.0.67-py3-none-any.whl
Algorithm Hash digest
SHA256 6a3509db1e2594367da8e48f6bea0463f8762593792fcbd1af62436849bdde56
MD5 aeb16547a2cb14c15542f5840b9fd3b5
BLAKE2b-256 2dcfb2e8fc5ee003743f8d9d2fef5a640b15ca8906f31306d70d5439fd16e3fb

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page