DVC (Data Version Control)
Installation
pip install dvc[s3]
pip install dvc[gs]
pip install dvc[azure]
pip install dvc[all]
cd mein-ml-projekt
git init
dvc init
Datendateien verfolgen
dvc add data/trainingsbilder/
dvc add data/datensatz.csv
git add data/trainingsbilder.dvc data/datensatz.csv.dvc .gitignore
git commit -m "Trainingsdaten mit DVC verfolgen"
Remote-Speicher konfigurieren
dvc remote add -d meinremote s3://mein-bucket/dvc-storage
dvc remote add -d meinremote gs://mein-bucket/dvc-storage
dvc remote add -d meinremote /mnt/freigegeben/dvc-storage
dvc push
dvc pull
Reproduzierbare Pipelines erstellen
stages:
vorbereiten:
cmd: python src/vorbereiten.py
deps:
- src/vorbereiten.py
- data/roh/
outs:
- data/verarbeitet/
trainieren:
cmd: python src/trainieren.py
deps:
- src/trainieren.py
- data/verarbeitet/
params:
- train.epochen
- train.lernrate
- train.batch_groesse
outs:
- models/model.pkl
metrics:
- metrics/train.json:
cache: false
evaluieren:
cmd: python src/evaluieren.py
deps:
- src/evaluieren.py
- models/model.pkl
- data/verarbeitet/
metrics:
- metrics/eval.json:
cache: false
plots:
- metrics/konfusionsmatrix.csv:
x: vorhergesagt
y: tatsaechlich
train:
epochen: 50
lernrate: 0.001
batch_groesse: 32
dvc repro
dvc repro trainieren
Experimentverfolgung
dvc exp run --set-param train.lernrate=0.01
dvc exp run --set-param train.lernrate=0.001 --queue
dvc exp run --set-param train.lernrate=0.01 --queue
dvc exp run --set-param train.lernrate=0.1 --queue
dvc queue start --jobs 3
dvc exp show
dvc exp diff
dvc exp apply exp-abc123
dvc exp push origin exp-abc123
Metriken und Plots
import json
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, f1_score
import yaml
import pickle
with open("params.yaml") as f:
params = yaml.safe_load(f)["train"]
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = RandomForestClassifier(n_estimators=params["epochen"])
model.fit(X_train, y_train)
preds = model.predict(X_test)
metrics = {
"genauigkeit": accuracy_score(y_test, preds),
"f1_wert": f1_score(y_test, preds, average="weighted"),
}
with open("metrics/train.json", "w") as f:
json.dump(metrics, f, indent=2)
with open("models/model.pkl", "wb") as f:
pickle.dump(model, f)
dvc metrics show
dvc metrics diff
dvc plots show metrics/konfusionsmatrix.csv
dvc plots diff
Datenzugriff ohne Klonen
dvc get https://github.com/org/ml-repo data/verarbeitet/datensatz.csv
dvc import https://github.com/org/ml-repo models/model.pkl
import dvc.api
with dvc.api.open("data/datensatz.csv", repo="https://github.com/org/ml-repo") as f:
import pandas as pd
df = pd.read_csv(f)
url = dvc.api.get_url("models/model.pkl", repo="https://github.com/org/ml-repo")
Schlüsselkonzepte
.dvc-Dateien: Kleine Pointer-Dateien, die zu Git committed werden und auf große Daten in einem Remote-Speicher verweisen.
dvc repro: Reproduziert Pipelines — führt nur Stufen mit geänderten Abhängigkeiten neu aus.
- Experimente: Branch-freie Experimentverfolgung — ausführen, vergleichen und Ergebnisse anwenden.
- Parameter: Von DVC verfolgte YAML-Parameterdateien für reproduzierbare Konfigurationen.
- Metriken: JSON/YAML-Metrikdateien mit integrierten Vergleichswerkzeugen.
- Remote-Speicher: S3, GCS, Azure, SSH, HDFS — Daten bleiben dort, wo du sie haben möchtest.