ADR 005 — DVC Integration for Data Versioning
Status
Accepted — Framework provides DVC integration; users configure DVC per-project.
Context
The Phoenix ML framework supports diverse ML problem types (tabular, image, NLP, object detection). Different problem types have different data requirements:
| Problem Type | Data Format | Size | Versioning Need |
|---|---|---|---|
| Tabular (credit risk, fraud) | CSV in data/ |
Small (MB) | Low — can regenerate |
| Image Classification | NPZ/folders | Medium (GB) | Medium |
| Object Detection | Image dirs + annotations | Large (GB-TB) | High — cannot regenerate |
| NLP | Text corpora | Variable | High |
For large, irreplaceable datasets (images, annotations), teams need a way to version, share, and reproduce exact dataset versions. DVC (Data Version Control) is the industry standard for this.
Decision
DVC is a framework-supported integration, not a shipped configuration.
- The framework provides code integration with DVC:
ModelConfig.data_source_type = "dvc"— declare DVC-backed dataModelConfig.retrain_trigger = "data_change"— trigger retrain on DVC changesdags/data_change_pipeline.py— Airflow DAG that monitors DVC status-
dvc[s3]as a project dependency -
The framework does NOT ship DVC config files:
.dvc/config,dvc.yaml,dvc.lock,.dvcignoreare user-generated- These are gitignored and set up by each team for their specific storage backend
How Users Set Up DVC
# 1. Initialize DVC in the project
dvc init
# 2. Configure remote storage (MinIO, S3, GCS, etc.)
dvc remote add -d myremote s3://my-bucket/dvc-data
dvc remote modify myremote endpointurl http://minio:9000
# 3. Track datasets
dvc add data/object_detection/
git add data/object_detection/.gitkeep data/object_detection.dvc
# 4. Push data to remote
dvc push
# 5. Configure model to use DVC
# In model_configs/object-detection.yaml:
# data_source:
# type: dvc
# retrain:
# trigger: data_change
# drift_detection: false
Consequences
Positive:
- Framework stays clean — no project-specific config files
- Works with any DVC-compatible storage backend (S3, GCS, Azure, local)
- data_change_pipeline DAG auto-detects data changes and retrains
Negative: - Users must set up DVC themselves (documented in customization guide) - DVC dependency is always installed even if not used (acceptable tradeoff)