SlideShare ist ein Scribd-Unternehmen logo
Versionskontrolle in ML-Projekten
FrankHofmann
CusyGmbH,Berlin
enterPy,6.Mai2021
de.slideshare.net/cusyio/dvcenterpy
Installation
$ pipenv install dvc[ssh]
Installation
$ pipenv install dvc[ssh]
Extras
[ssh]
[s3]
[gs]
[azure]
[oss]
[all]
Projekt erstellen
$ mkdir -p dvc-example/data
$ cd dvc-example
$ git init
$ dvc init
$ git add .dvc
$ git commit -m "Initialise DVC"
dvc init
erstellteinVerzeichnis .dvc/ mit config , .gitignore und cache -Verzeichnis.
git commit
stellt .dvc/config und .dvc/.gitignore unterGit-Versionskontrolle.
DVC konfigurieren
BevorDVCverwendetwird,solltenocheinentfernterSpeicherplatz(remotestorage)
eingerichtetwerden,z.B.einNFS-Mount.
$ sudo mkdir -p /var/dvc-storage
$ dvc remote add -d local /var/dvc-storage
Setting 'local' as a default remote.
$ git commit .dvc/config -m "Configure local remote"
[master efaeb84] Configure local remote
1 file changed, 4 insertions(+)
-d, --default
StandardwertfürdenentferntenSpeicherplatz
local
NamedesentferntenSpeicherplatz
/var/dvc-storage
URLdesentferntenSpeicherplatzes
DanebenwerdennochweitereProtokolleunterstützt,diedemPfadvorangestelltwerden,u.a.
ssh: , hdfs: , https: .
SokannbeispielsweiseeinfacheinwetererentfernterDatenspeicherhinzugefügtwerdenmit:
$ dvc remote add webserver https://dvc.cusy.io/myproject
DiezugehörigeKonfigurationsdatei .dvc/config siehtdannsoaus:
['remote "local"']
url = /var/dvc-storage
[core]
remote = local
['remote "webserver"']
url = https://dvc.cusy.io/myproject
Daten hinzufügen
$ dvc get https://github.com/iterative/dataset-registry
get-started/data.xml 
-o data/data.xml
$ dvc add data/data.xml
.DiesfügtdieDatei data/data.xml in data/.gitignore hinzu
.DieMeta-Angabenwerdenin data/data.xml.dvc geschrieben.
WeitereInformationenzumDateiformatder *.dvc -Dateierhaltetihrunter .
DVC-FileFormat
InGitwerdenfürdieverschiedeneVersioneneurerProjektdatenverwaltetindemIhrdieCVS-
Dateihinzufügt:
$ git add data/.gitignore data/fortune500.csv.dvc
$ git commit -m "Add raw data to project"
Daten speichern und abrufen
DieDatenkönnenvomArbeitsverzeichniseuresGit-Repositoryaufdenentfernten
Speicherplatzkopiertwerdenmit
$ dvc push
FallsihraktuellereDatenabrufenwollt,könntihrdiesmit
$ dvc pull
Importieren und Aktualisieren
dvc import
dvc import
Beispiel
$ dvc import https://github.com/iterative/dataset-registry
get-started/data.xml
Importing 'get-started/data.xml
(https://github.com/iterative/dataset-registry)' ->
'data.xml'
dvc import
Beispiel
$ dvc import https://github.com/iterative/dataset-registry
get-started/data.xml
Importing 'get-started/data.xml
(https://github.com/iterative/dataset-registry)' ->
'data.xml'
.DieslädtdieDateiausder indasaktuelleArbeitsverzeichnis
.fügtsieder .gitignore -Dateihinzu
.erstelltdieDatei data.xml.dvc
dataset-registry
dvc update
dvc update
Beispiel
$ dvc update data.xml.dvc
Stage 'data.xml.dvc' didn't change.
Saving information to 'data.xml.dvc'.
Big Picture
Big Picture
Big Picture
Big Picture
Big Picture
Big Picture
Pipelines
dvc run erstelltVerarbeitungsstufen.
JedeStufeistgekennzeichnetdurch
eine,mitGitverwaltete,Quellcode-Datei
weitereAbhängigkeiten
Ausgabedaten
AlleStufenzusammenbildendieDVC-Pipeline.
Beispiel
github.com/cusyio/dvc-example
1. Phase: Aufteilen in Trainings- und Testdaten
dvc-example/src/split.py
dvc-example/src/split.py
$ dvc run -n split -d src/split.py -d data/data.xml -o
data/splitted 
python src/split.py data/data.xml
dvc-example/src/split.py
$ dvc run -n split -d src/split.py -d data/data.xml -o
data/splitted 
python src/split.py data/data.xml
-n
gibtdenNamenderVerarbeitungsstufean.
dvc-example/src/split.py
$ dvc run -n split -d src/split.py -d data/data.xml -o
data/splitted 
python src/split.py data/data.xml
-n
gibtdenNamenderVerarbeitungsstufean.
-d
gibtAbhängigkeiten(dependencies)fürdasreproduzierbareKommandoan.
WennzumReproduzierenderErgebnissebeimnächstenMal dvc repo aufgerufen
wird,überprüftDVCdieseAbhängigkeitenundentscheidet,obdieseaufdemaktuellen
StandsondodererneutausgeführtwerdenmüssenumaktuellereErgebnissezu
erhalten.
dvc-example/src/split.py
$ dvc run -n split -d src/split.py -d data/data.xml -o
data/splitted 
python src/split.py data/data.xml
-n
gibtdenNamenderVerarbeitungsstufean.
-d
gibtAbhängigkeiten(dependencies)fürdasreproduzierbareKommandoan.
WennzumReproduzierenderErgebnissebeimnächstenMal dvc repo aufgerufen
wird,überprüftDVCdieseAbhängigkeitenundentscheidet,obdieseaufdemaktuellen
StandsondodererneutausgeführtwerdenmüssenumaktuellereErgebnissezu
erhalten.
-o
gibtdieAusgabedateioderdasAusgabeverzeichnisan.
DerArbeitsbereichhatsichnungeändertin:
.
├── data
│ ├── data.xml
│ ├── data.xml.dvc
+ │ └── splitted
+ │ ├── test.tsv
+ │ └── train.tsv
+ ├── dvc.lock
+ ├── dvc.yaml
├── requirements.txt
└── src
└── split.py
Diegenerierte dvc.yaml -Dateisiehtdannfolgendermaßenaus:
stages:
split:
cmd: pipenv run python src/split.py data/data.xml
deps:
- data/data.xml
- src/split.py
outs:
- data/splitted
DadieDatenimAusgabeverzeichnisniemitGitversioniertwerdensollten,hat dvc run
bereitsdie data/.gitignore -Dateigeschrieben:
/data.xml
+ /splitted
AnschließendmüssendiegeändertenDatennurnochinGitbzw.DVCübernommenwerden:
$ git add data/.gitignore dvc.yaml
$ git commit -m "Create split stage"
$ dvc push
WerdennunmehrerePhasenmit dvc run erstellt,wobeidieAusgabeeinesKommandosals
Abhängigkeiteinesanderenangegebenwird,entstehteineDVCPipeline.
2. Phase: Parametrisierung
params.yaml mitfolgendemInhalt:
max_features: 6000
ngram_range:
lo: 1
hi: 2
dvc run mit -p <filename>:<params_list> liestdieParameter,inunseremBeispiel:
$ dvc run -n featurize -d src/featurization.py -d
data/splitted 
-p
params.yaml:max_features,ngram_range.lo,ngram_range.hi -o
data/features 
python src/featurization.py data/splitted data/features
Diesergänztdie dvc.yaml -Dateiumden featurize -Abschnitt:
featurize:
cmd: python src/featurization.py data/splitted
data/features
deps:
- data/splitted
- src/featurization.py
params:
- max_features
- ngram_range.lo
- ngram_range.hi
outs:
- data/features
DamitdiesePhasewiederholtwerdenkann,werdendieMD5-HashwerteundParameterwerte
inder dvc.lock -Dateigespeichert:
featurize:
cmd: python src/featurization.py data/splitted
data/features
deps:
- path: data/splitted
md5: 1ce9051bf386e57c03fe779d476d93e7.dir
- path: src/featurization.py
md5: a56570e715e39134adb4fdc779296373
params:
params.yaml:
max_features: 1000
ngram_range.hi: 2
ngram_range.lo: 1
SchließlichmüssennochdiefolgendenDateienimGit-Repositoryaktualisiertwerden:
dvc.lock
dvc.yaml
data/.gitignore
$ git add dvc.lock dvc.yaml data/.gitignore
3. Phase: Evaluation
berechnetdenWertfürdie (engl.:AUC
(AreaUndertheCurve).
dvc-example/src/evaluate.py FlächeunterderKurve
berechnetdenWertfürdie (engl.:AUC
(AreaUndertheCurve).
dvc-example/src/evaluate.py FlächeunterderKurve
DabeiverwendetesdenTestdatensatz,ließtdieFeaturesaus features/test.pkl und
erstelltdieMetrikdatei auc.metric .
berechnetdenWertfürdie (engl.:AUC
(AreaUndertheCurve).
dvc-example/src/evaluate.py FlächeunterderKurve
DabeiverwendetesdenTestdatensatz,ließtdieFeaturesaus features/test.pkl und
erstelltdieMetrikdatei auc.metric .
auc.metric kannDVCalsMetrikmitder -M -Optionvon dvc run kenntlichgemacht
werden:
berechnetdenWertfürdie (engl.:AUC
(AreaUndertheCurve).
dvc-example/src/evaluate.py FlächeunterderKurve
DabeiverwendetesdenTestdatensatz,ließtdieFeaturesaus features/test.pkl und
erstelltdieMetrikdatei auc.metric .
auc.metric kannDVCalsMetrikmitder -M -Optionvon dvc run kenntlichgemacht
werden:
$ dvc run -n evaluate -d src/evaluate.py -d model.pkl -d
data/features 
-M auc.json python src/evaluate.py model.pkl
data/features auc.json
Dieserweitertdie /dvc.yaml -Dateiumden evaluate -Abschnitt:
evaluate:
cmd: python src/evaluate.py model.pkl data/features
auc.json
deps:
- data/features
- model.pkl
- src/evaluate.py
metrics:
- auc.json:
cache: false
Versuchsmetriken
Mit dvc metrics show lassensichExperimenteüberverschiedeneBranchesundTags
hinwegvergleichen:
Versuchsmetriken
Mit dvc metrics show lassensichExperimenteüberverschiedeneBranchesundTags
hinwegvergleichen:
$ dvc metrics show
auc.json: 0.514172
DieDVC-PipelinekannnunzusammenmiteinemTagdemGit-Repositoryhinzugefügt
werden:
$ git add dvc.yaml dvc.lock auc.json
$ git commit -m 'Add stage ‹evaluate›'
$ git tag -a 0.1.0 -m "Initial pipeline version 0.1.0"
Pipelines anzeigen
$ dvc dag
+-------------------+
| data/data.xml.dvc |
+-------------------+
*
*
*
+-------+
| split |
+-------+
*
*
*
+-----------+
| featurize |
+-----------+
** **
** *
* **
+-------+ *
| train | **
+-------+ *
** **
** **
* *
+----------+
| evaluate |
+----------+
data/data.xml.dvc
prepare.dvc
featurize.dvc
train.dvc
evaluate.dvc
dvc dag --dot generierteine -.dot -Datei,diedannz.B.alsSVG-Datei
gerendertwerdenkann:
data/data.xml.dvc
split
featurize
train
evaluate
Graphviz
Ergebnisse reproduzieren
1. Code und Daten wiederherstellen
1. Code und Daten wiederherstellen
$ git clone https://github.com/veit/dvc-example.git
$ cd dvc-example
$ dvc pull -TR
A data/data.xml
1 file added
$ ls data/
data.xml data.xml.dvc
2. Ergebnisse reproduzieren
2. Ergebnisse reproduzieren
$ dvc repro
Verifying data sources in stage: 'data/data.xml.dvc'
Stage 'split' didn't change, skipping
Stage 'featurize' didn't change, skipping
Stage 'train' didn't change, skipping
Stage 'evaluate' didn't change, skipping
3. Parametrisieren
3. Parametrisieren
DieParameterinder params.yaml -DateikönnengeändertundanschließenddiePipeline
erneutdurchlaufenwerden:
$ dvc repro
Stage 'data/data.xml.dvc' didn't change, skipping
Stage 'split' didn't change, skipping
Running stage 'featurize' with command:
python src/featurization.py data/splitted data/features
…
Stage 'train' didn't change, skipping
Stage 'evaluate' didn't change, skipping
To track the changes with git, run:
git add dvc.lock
DieÄnderungderParameterhattekeinenEinflussaufdasErgebnis.
DVCerkenntÄnderungenanAbhängigkeitenundAusgabenüberdiemd5-Hashwerte,diein
der dvc.lock -Dateigespeichertsind.
Zum Weiterlesen
DVCimJupyter-Tutorial
Documentation
params
GitRepository

Weitere ähnliche Inhalte

PDF
Einführung in Docker
PPT
Einsteiger Workshop
KEY
Ruby on Rails SS09 05
KEY
Ruby on Rails SS09 08
PDF
Python builds mit ant
PPTX
C++ Dependency Management 2.0
PDF
FLOW3-Workshop F3X12
PDF
Docker und Kubernetes Patterns & Anti-Patterns
Einführung in Docker
Einsteiger Workshop
Ruby on Rails SS09 05
Ruby on Rails SS09 08
Python builds mit ant
C++ Dependency Management 2.0
FLOW3-Workshop F3X12
Docker und Kubernetes Patterns & Anti-Patterns

Was ist angesagt? (6)

PDF
Testing tools
PPTX
Vagrant, Puppet, Docker für Entwickler und Architekten
PDF
Hendrik Jungnitsch: Software verpacken mit Docker
PDF
Docker - Automatisches Deployment für Linux-Instanzen
PDF
Gradle - Beginner's Workshop (german)
PDF
systemd & Docker
Testing tools
Vagrant, Puppet, Docker für Entwickler und Architekten
Hendrik Jungnitsch: Software verpacken mit Docker
Docker - Automatisches Deployment für Linux-Instanzen
Gradle - Beginner's Workshop (german)
systemd & Docker
Anzeige

Ähnlich wie Versionskontrolle in Machine-Learning-Projekten (20)

PDF
DDEV - Eine lokale Entwicklungsumgebung
PDF
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
PDF
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
PDF
Von Maven zu Gradle in 45 Minuten
PDF
Automatisierung mit grunt
PDF
Forms and Reports 12c - Processes and Automation in Development and Operations
PDF
Docker und Kubernetes Patterns & Anti-Patterns
PDF
IPC 2015 Zend Framework 3 Reloaded
PDF
PPTX
PDF
Ist Gradle auch für die APEX-Projekte?
PPTX
Microservices mit Rust
PDF
Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.
PPTX
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
PDF
JAX 2015 - Continuous Integration mit Java & Javascript
PDF
Slides__Splunk_UserGroup_20220407.pdf
PDF
Django & Buildout
PDF
WP-CLI - Das Kommandozeilen Interface für Wordpress
ODP
Einfacher bauen
PDF
Deployment pipeline mit maven, chef und jenkins
DDEV - Eine lokale Entwicklungsumgebung
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Von Maven zu Gradle in 45 Minuten
Automatisierung mit grunt
Forms and Reports 12c - Processes and Automation in Development and Operations
Docker und Kubernetes Patterns & Anti-Patterns
IPC 2015 Zend Framework 3 Reloaded
Ist Gradle auch für die APEX-Projekte?
Microservices mit Rust
Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
JAX 2015 - Continuous Integration mit Java & Javascript
Slides__Splunk_UserGroup_20220407.pdf
Django & Buildout
WP-CLI - Das Kommandozeilen Interface für Wordpress
Einfacher bauen
Deployment pipeline mit maven, chef und jenkins
Anzeige

Mehr von cusy GmbH (11)

PDF
Warum gRPC? – und wie in Python implementieren?
PDF
About cusy
PDF
Python-Bibliotheken zur Datenvisualisierung
PDF
Continuous Everything
PDF
Opensource Search Engines
PDF
Cusy GSA-Alternativen
PDF
Sicherheitsrichtlinien für Linux-Workstations
PDF
Quo vadis-devops-nuernberg
PDF
Quo vadis DevOps
PDF
Devops ohne root
PDF
Cusy Developer-Baukasten
Warum gRPC? – und wie in Python implementieren?
About cusy
Python-Bibliotheken zur Datenvisualisierung
Continuous Everything
Opensource Search Engines
Cusy GSA-Alternativen
Sicherheitsrichtlinien für Linux-Workstations
Quo vadis-devops-nuernberg
Quo vadis DevOps
Devops ohne root
Cusy Developer-Baukasten

Versionskontrolle in Machine-Learning-Projekten