Skip to content

MLOps

MLflow

Profiles: mlflow. Stack mlops, defined in compose-mlops.yml.

mlflow

Depends on: postgres, storage. odctl up mlflow also starts: deps, postgres, storage.

• MLflow Tracking UI & Artifact Registry Server:
  * External (host): http://127.0.0.1:5004
  * Internal (Docker): http://mlflow:5000
• MLflow Model Scoring Server, idle until MODEL_URI in .env names a model;
  run `odctl up mlflow` again after setting it:
  * External (host): http://127.0.0.1:5003/invocations
  * Internal (Docker): http://mlflow-serve:5003/invocations
• Liveness: http://127.0.0.1:5003/ping and http://127.0.0.1:5003/health
Service Image Host:container ports Memory limit
mlflow ghcr.io/jaehyeon-kim/odctl/mlflow:<CLI version> 5004:5000 2500m
mlflow-serve ghcr.io/jaehyeon-kim/odctl/mlflow:<CLI version> 5003:5003 1500m

Feast

Profiles: feast. Stack mlops, defined in compose-mlops.yml.

feast

Depends on: catalog, valkey. odctl up feast also starts: catalog, deps, postgres, storage, valkey.

• Feast UI (registry browser, not data):
  * External (host): http://127.0.0.1:8890
  * Internal (Docker): http://feast-ui:8888
• Upload your feature repository to s3://feast/repo. The services check
  it every 15 seconds and restart Feast when it changes. Run
  `feast apply` from your own environment. odctl ships no definitions.
• Your environment needs: feast[duckdb,iceberg,redis,postgres]
• On an IcebergSource against catalog, pass warehouse="" and
  catalog_name="odctl". The REST client puts warehouse in the URL path,
  and Iceberg's REST fixture server serves the spec with no prefix.
• Online feature server for get_online_features:
  * External (host): http://127.0.0.1:6566
  * Internal (Docker): http://feast-serve:6566
• Liveness: http://127.0.0.1:6566/health
Service Image Host:container ports Memory limit
feast-ui quay.io/feastdev/feature-server:0.66.0 8890:8888 1g
feast-serve quay.io/feastdev/feature-server:0.66.0 6566:6566 1g

Evidently

Profiles: evidently. Stack mlops, defined in compose-mlops.yml.

evidently

Depends on: postgres. odctl up evidently also starts: deps, postgres.

• Evidently UI & API (no login, and writes are open):
  * External (host): http://127.0.0.1:8089
  * Internal (Docker): http://evidently:8000
• Push reports with RemoteWorkspace("http://127.0.0.1:8089") from the
  host, or RemoteWorkspace("http://evidently:8000") from a container.
  Reports are computed by the client, so it needs evidently==0.7.23.
  In Airflow, set _AIRFLOW_PIP_DEPS="evidently==0.7.23" in .env.
• Projects, reports, dashboards and datasets: the evidently database
  on Postgres.
• Settings: evidently/config.yaml in the workspace.
Service Image Host:container ports Memory limit
evidently evidently/evidently-service:0.7.23 8089:8000 1g