Observability¶
Overview¶
FRAME-FM integrates with MLflow to provide experiment observability for all model-training workflows within the framework. The MLflow UI can be used to compare metrics between model variants or datasets.
MLflow support is implemented via a custom MLflow logger that captures metrics, parameters, and metadata about the training run.
By default, FRAME-FM’s main configuration file
(configs/config.yaml) references a logging configuration
(configs/logging/demo_mlflow.yaml). This file demonstrates how to:
configure an MLflow logger instance
set experiment names
define run names
attach user-defined tags (e.g., project, dataset, model)
These settings allow you to organise training runs and compare results across models, datasets, and configurations.
MLflow server¶
Prerequisites¶
MLflow is included in the FRAME-FM environment. After following the environment setup steps in the main README, MLflow will be available automatically.
If you are working outside the FRAME-FM environment, you can install MLflow manually:
pip install mlflow
Running a local MLflow server¶
For local development, you can start a lightweight MLflow tracking server and UI.
Inside the FRAME-FM environment (using uv):
uv run mlflow server --port 5000
Outside FRAME-FM (using a regular Python environment):
mlflow server --port 5000
Once running, the MLflow UI is available at http://127.0.0.1:5000.
This interface allows you to track experiment histories, compare metrics, and review metadata for reproducibility.
Logging Configuration¶
MLflow logging in FRAME-FM is controlled by Hydra configuration files stored in
configs/logging/. Below is an example configuration
(configs/logging/demo_mlflow.yaml):
_target_: FRAME_FM.training.logging_utils.create_mlflow_logger
experiment_name: "frame-fm-mmmae-demo"
tracking_uri: ${oc.env:MLFLOW_TRACKING_URI, "sqlite:///mlflow.db"}
run_name: "initial-demo"
tags:
project: "FRAME-FM"
dataset: "Spatial Land Cover"
model: "Multimodal Masked Autoencoder"
Key Fields¶
_target_The function responsible for instantiating the MLflow logger.
experiment_nameGroups related training runs under an MLflow experiment.
tracking_uriPoints to the MLflow tracking backend. FRAME-FM defaults to a local SQLite file (
mlflow.db) unless overridden via theMLFLOW_TRACKING_URIenvironment variable.run_nameHuman-readable name for the run, visible in the MLflow UI.
tagsCustom metadata for filtering or searching runs. Useful tags include:
project identifiers
dataset names
model architectures
training configurations
Storage locations for metadata and artifacts¶
MLflow uses two storage components:
Backend store — experiment metadata, params, metrics
Artifact store — files generated during runs (models, plots, logs, checkpoints)
FRAME-FM’s example MLflow configuration (configs/logging/demo_mlflow.yaml)
sets the backend store location via the MLFLOW_TRACKING_URI environment
variable. If this is not set, metadata is stored in a SQLite database
(mlflow.db) in the project root.
The artifact store defaults to ./mlruns/ (artifacts are not currently
stored when using FRAME-FM).
MLflow will create the directory structure automatically if it does not exist.
Important
When starting an MLflow server, you must point it to the same backend store and artifact directory used by FRAME-FM. If you start the server with different paths, MLflow will initialise new empty stores and your existing runs will not appear in the UI.
You can specify storage paths explicitly when launching the server:
uv run mlflow server \
--backend-store-uri sqlite:///path/to/mlflow.db \
--default-artifact-root file:/path/to/mlruns \
--host 127.0.0.1 \
--port 5000
Or using the MLFLOW_TRACKING_URI environment variable:
export MLFLOW_TRACKING_URI="sqlite:///path/to/mlflow.db"
uv run mlflow server \
--default-artifact-root file:/path/to/mlruns \
--host 127.0.0.1 \
--port 5000
Running MLflow on JASMIN and viewing locally¶
You can run the MLflow tracking server on a JASMIN host and view the UI from your local machine via SSH port forwarding.
First, start an MLflow server on JASMIN (e.g., a sci node), ensuring
--backend-store-uri points to the configured MLflow tracking backend:
uv run mlflow server \
--backend-store-uri sqlite:///mlflow.db \
--default-artifact-root file:./mlruns \
--host 127.0.0.1 \
--port 5000
To access the MLflow UI in your local browser:
Ensure your JASMIN SSH access is configured correctly. See the JASMIN documentation for more information on connecting through the login servers to a
scinode.Forward your local port 5000 to port 5000 on the
scinode (adjust hostname as needed):ssh -L 5000:localhost:5000 -J <USERNAME>@login.jasmin.ac.uk <USERNAME>@sci-vm-04.jasmin.ac.uk
Open your local browser and navigate to http://127.0.0.1:5000.
You should now see the MLflow UI for the runs created on the JASMIN machine.
MLflow experiment overview page¶
MLflow experiment metrics page¶