MLOps DVC
ivyx✓
Adds DVC to the MLOps extension so you can rerun your training pipeline and spot stale stages
MLOps DVC
The DVC engine for the MLOps hub: reproduce the training DAG, read its graph, and see which stages are out of date.
DVC is the real upstream tool — this extension manages it, it does not imitate
it. dvc.yaml stays the DAG, dvc repro stays the reproduction, and the cache
is DVC's.
What you can do
- Reproduce your training pipeline and have DVC skip the stages that are already up to date
- See the shape of your DAG, read straight from
dvc.yaml - Find out which stages have gone stale, and why, before you rerun anything
- Have a failed stage stop an MLOps run and name itself, instead of failing obscurely
Requirements
The MLOps extension, the desktop app, and DVC in the Python environment your workspace already uses.
Getting started
This is step 4 of the walkthrough in the MLOps extension's README, which starts from an empty folder and ends with a run that a gate stops. Install this alongside MLOps and the hub picks it up.
How it runs
The interpreter comes from Python Environments (python.env.resolve) and DVC
is invoked as <interpreter> -m dvc. There is deliberately no bare dvc and no
bare python3: a PATH lookup would pick a different DVC than the one the
notebooks and kernels see, and a system Python refuses installs outright
(PEP 668).
Install DVC with the panel's install action, or into the active environment
yourself. The range this provider is written against is dvc>=3,<4, and the
output parsing was measured on 3.67.1.
Capabilities
| Capability | Policy | What it does |
|---|---|---|
mlops.dvc.repro |
medium / none | Runs dvc repro; reports which stages ran, which were cache hits, and where it stopped |
mlops.dvc.dag |
low / none | The DAG from dvc.yaml as nodes with dependencies |
mlops.dvc.status |
low / none | Which stages are stale, and why |
mlops.dvc.reveal |
low / none | Reveal the DVC panel |
mlops.dvc.repro answers pass: false with a reason when a stage fails —
that is the verdict the MLOps hub records. An unusable environment (no
interpreter, no DVC, not a DVC repository) throws instead, with a different
sentence for each, because each has a different fix.
Limits worth knowing
- No live log.
runtime.tasks.runruns a command to completion, so a longdvc reproreports nothing until it finishes. Streaming needs a host-side seam; this is a stated v1 limit. - Electron-only: running processes is not something a browser host does.
- One reproduction at a time — the hub enforces that; two runs share one cache.
Verification
npm run check:dvcreplays measured DVC 3.67.1 transcripts (exit 255 for a failed stage, 253 for a non-repository, the two different skip sentences, the--dotgraph,status --json) through the shipped parsers.npm run probe:dvc -- /path/to/pythonbuilds a throwaway two-stage project and drives the same code against a live DVC: first run executes, second run is a cache hit, the graph matchesdvc.yaml, a broken stage fails with its name. Re-run this after a DVC upgrade — a reworded sentence passes the harness and fails in the app.