MLOps Platform with step-based pipeline execution
Project description
ExpOps
expops is a project-based experiment runner: keep each experiment isolated under a workspace, run pipelines, and save run artifacts (with optional tracking/backends).
Install:
pip install expops
The installed CLI command is mlops (alias: mlops-platform).
Platform Capabilities
ExpOps provides a comprehensive MLOps platform with the following features:
- Project-Based Workflow: Each ML project is isolated in its own workspace with independent configurations, dependencies, and artifacts
- DAG Pipeline Execution: Define complex ML pipelines as directed acyclic graphs (DAGs) using NetworkX, with support for parallel execution, conditional logic, and loops
- Distributed Computing: Execute pipelines on clusters using Dask (with SLURM support) or run locally with multi-worker parallelism
- Environment Isolation: Automatic virtual environment management (venv/conda) with separate environments for training and reporting
- Caching & Reproducibility: Intelligent step-level caching with configurable backends (local filesystem, GCS) and reproducibility guarantees via random seed management
- Static & Dynamic Reporting: Generate static charts (PNG) and interactive dynamic charts that update in real-time
Quick start (built-in template)
mkdir -p ~/expops-workspace && cd ~/expops-workspace
mlops create demo --template sklearn-basic
mlops run demo
This creates projects/demo/ and runs a minimal scikit-learn example. The config is at projects/demo/configs/project_config.yaml.
By default, the template uses a local-first cache backend (no cloud credentials required). To enable cross-process live metrics (web UI) or remote backends, update model.parameters.cache.backend in the project config.
Create a project
mlops create my-project
mlops run my-project
Template projects
Templates are available via mlops create --template ...:
-
sklearn-basic: runnable project skeleton (configs/data/models/charts + requirements) that trains a tiny sklearn model and generates basic plots -
premier-league: more comprehensive ML project predicting results of football matches, contains cluster config and dynamic charts as well
Project Structure
Each project follows a standardized directory structure. Here's what each component does:
Configuration Files
configs/project_config.yaml: Main project configuration file that defines:
- Metadata: Project name, description, version
- Environment: Virtual environment settings with separate requirements for training and reporting
- Reproducibility: Random seed configuration and experiment tracking settings
- Model Configuration: Framework selection, custom script paths, hyperparameters
- Pipeline Definition: DAG structure (
process_adjlist) and process definitions with dependencies - Reporting: Chart definitions (static and dynamic) with probe paths for metrics extraction
configs/cluster_config.yaml: Optional cluster execution configuration:
- Provider: Cluster provider (e.g.,
slurm,dask) - Workers: Number of worker nodes and resource allocation (cores, memory)
- Queue Settings: Job queue, walltime, and scheduler configuration
Model Code
models/<model_name>.py: Custom model implementation file containing:
- Process Definitions: Functions decorated with
@process()that define pipeline steps - Step Functions: Functions decorated with
@step()that perform specific operations (data loading, preprocessing, training, inference) - Pipeline Logic: Data transformations, model training, evaluation, and ensemble methods
- Metrics Logging: Integration with
log_metric()for experiment tracking
Chart Generation
charts/plot_metrics.py: Python script for static chart generation:
- Chart Functions: Functions decorated with
@chart()that generate PNG visualizations - Metrics Access: Reads metrics from previous pipeline steps via
ChartContext - Static Output: Produces static image files (e.g., PCA scree plots, metric comparisons, distribution histograms)
charts/plot_metrics.js: JavaScript file for dynamic, interactive charts:
- Real-time Updates: Charts that update dynamically as metrics are logged during pipeline execution
- Chart.js Integration: Uses Chart.js library for interactive visualizations
- Live Metrics: Subscribes to metric streams from multiple pipeline steps (e.g., training loss over epochs)
- Web UI Integration: Rendered in the web UI for interactive exploration
Dependencies
requirements.txt: Main project dependencies for training and inference:
- Core ML libraries (scikit-learn, XGBoost, PyTorch, TensorFlow, etc.)
- Data processing libraries (pandas, numpy)
- Any other dependencies needed for model execution
charts/requirements.txt: Reporting-specific dependencies:
- Visualization libraries (matplotlib, seaborn)
- Minimal dependencies needed only for chart generation
- Kept separate to reduce overhead in training environments
Data & Artifacts
data/: Directory for input datasets (CSV, Parquet, etc.)
logs/: Execution logs for each pipeline run
keys/: Credentials and authentication files (e.g., firestore.json for GCP integration)
Local Web UI
python -m mlops.web.server
Open http://127.0.0.1:8000. Choose a project and Run ID (derived from projects/<id>/artifacts/charts/<run-id>). The web UI allows you to:
- Browse projects and runs
- View static charts
- Interact with dynamic charts (real-time metric visualization)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file expops-0.1.2.tar.gz.
File metadata
- Download URL: expops-0.1.2.tar.gz
- Upload date:
- Size: 430.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3ca85d8d9763a25cd67686ba95a41011bbea806e4e5ae2775b7659c6ab74dd6a
|
|
| MD5 |
4540b33b0f15c4846257b291b6d099ff
|
|
| BLAKE2b-256 |
e6095126652c980e0f64cf610c657aefd77e7a704de9008d17e28ccda3422d8e
|
Provenance
The following attestation bundles were made for expops-0.1.2.tar.gz:
Publisher:
release.yml on local-minima-lab/mlops-platform
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
expops-0.1.2.tar.gz -
Subject digest:
3ca85d8d9763a25cd67686ba95a41011bbea806e4e5ae2775b7659c6ab74dd6a - Sigstore transparency entry: 768292435
- Sigstore integration time:
-
Permalink:
local-minima-lab/mlops-platform@852d037aa108e9d17e0b3104eab5d37ed33c2e1b -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/local-minima-lab
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@852d037aa108e9d17e0b3104eab5d37ed33c2e1b -
Trigger Event:
push
-
Statement type:
File details
Details for the file expops-0.1.2-py3-none-any.whl.
File metadata
- Download URL: expops-0.1.2-py3-none-any.whl
- Upload date:
- Size: 427.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
658ba29ec36a0690c90e36f80d409900ee7c83c96ad2e0e3015d1d587f337a8e
|
|
| MD5 |
faa9a9fdfe60ed0299c49718cc22eb33
|
|
| BLAKE2b-256 |
70c029bfac33744840f0050af888e976fbebc9b9c5e75ecbc05ff4ca74eda496
|
Provenance
The following attestation bundles were made for expops-0.1.2-py3-none-any.whl:
Publisher:
release.yml on local-minima-lab/mlops-platform
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
expops-0.1.2-py3-none-any.whl -
Subject digest:
658ba29ec36a0690c90e36f80d409900ee7c83c96ad2e0e3015d1d587f337a8e - Sigstore transparency entry: 768292438
- Sigstore integration time:
-
Permalink:
local-minima-lab/mlops-platform@852d037aa108e9d17e0b3104eab5d37ed33c2e1b -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/local-minima-lab
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@852d037aa108e9d17e0b3104eab5d37ed33c2e1b -
Trigger Event:
push
-
Statement type: