Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

Versionskontrolle in Machine-Learning-Projekten

Data Version Control (DVC) zur Versionskontrolle in Machine-Learning-Projekten

  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Versionskontrolle in Machine-Learning-Projekten

  1. 1. Versionskontrolle in ML-Projekten FrankHofmann CusyGmbH,Berlin enterPy,6.Mai2021 de.slideshare.net/cusyio/dvcenterpy
  2. 2. Installation $ pipenv install dvc[ssh]
  3. 3. Installation $ pipenv install dvc[ssh] Extras [ssh] [s3] [gs] [azure] [oss] [all]
  4. 4. Projekt erstellen $ mkdir -p dvc-example/data $ cd dvc-example $ git init $ dvc init $ git add .dvc $ git commit -m "Initialise DVC"
  5. 5. dvc init erstellteinVerzeichnis .dvc/ mit config , .gitignore und cache -Verzeichnis. git commit stellt .dvc/config und .dvc/.gitignore unterGit-Versionskontrolle.
  6. 6. DVC konfigurieren BevorDVCverwendetwird,solltenocheinentfernterSpeicherplatz(remotestorage) eingerichtetwerden,z.B.einNFS-Mount.
  7. 7. $ 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(+)
  8. 8. -d, --default StandardwertfürdenentferntenSpeicherplatz local NamedesentferntenSpeicherplatz /var/dvc-storage URLdesentferntenSpeicherplatzes
  9. 9. DanebenwerdennochweitereProtokolleunterstützt,diedemPfadvorangestelltwerden,u.a. ssh: , hdfs: , https: . SokannbeispielsweiseeinfacheinwetererentfernterDatenspeicherhinzugefügtwerdenmit: $ dvc remote add webserver https://dvc.cusy.io/myproject
  10. 10. DiezugehörigeKonfigurationsdatei .dvc/config siehtdannsoaus: ['remote "local"'] url = /var/dvc-storage [core] remote = local ['remote "webserver"'] url = https://dvc.cusy.io/myproject
  11. 11. Daten hinzufügen $ dvc get https://github.com/iterative/dataset-registry get-started/data.xml -o data/data.xml $ dvc add data/data.xml
  12. 12. .DiesfügtdieDatei data/data.xml in data/.gitignore hinzu .DieMeta-Angabenwerdenin data/data.xml.dvc geschrieben. WeitereInformationenzumDateiformatder *.dvc -Dateierhaltetihrunter . DVC-FileFormat
  13. 13. InGitwerdenfürdieverschiedeneVersioneneurerProjektdatenverwaltetindemIhrdieCVS- Dateihinzufügt: $ git add data/.gitignore data/fortune500.csv.dvc $ git commit -m "Add raw data to project"
  14. 14. Daten speichern und abrufen DieDatenkönnenvomArbeitsverzeichniseuresGit-Repositoryaufdenentfernten Speicherplatzkopiertwerdenmit $ dvc push
  15. 15. FallsihraktuellereDatenabrufenwollt,könntihrdiesmit $ dvc pull
  16. 16. Importieren und Aktualisieren
  17. 17. dvc import
  18. 18. 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'
  19. 19. 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
  20. 20. dvc update
  21. 21. dvc update Beispiel $ dvc update data.xml.dvc Stage 'data.xml.dvc' didn't change. Saving information to 'data.xml.dvc'.
  22. 22. Big Picture
  23. 23. Big Picture
  24. 24. Big Picture
  25. 25. Big Picture
  26. 26. Big Picture
  27. 27. Big Picture
  28. 28. Pipelines dvc run erstelltVerarbeitungsstufen. JedeStufeistgekennzeichnetdurch eine,mitGitverwaltete,Quellcode-Datei weitereAbhängigkeiten Ausgabedaten AlleStufenzusammenbildendieDVC-Pipeline.
  29. 29. Beispiel github.com/cusyio/dvc-example
  30. 30. 1. Phase: Aufteilen in Trainings- und Testdaten
  31. 31. dvc-example/src/split.py
  32. 32. 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
  33. 33. 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.
  34. 34. 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.
  35. 35. 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.
  36. 36. DerArbeitsbereichhatsichnungeändertin: . ├── data │ ├── data.xml │ ├── data.xml.dvc + │ └── splitted + │ ├── test.tsv + │ └── train.tsv + ├── dvc.lock + ├── dvc.yaml ├── requirements.txt └── src └── split.py
  37. 37. 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
  38. 38. DadieDatenimAusgabeverzeichnisniemitGitversioniertwerdensollten,hat dvc run bereitsdie data/.gitignore -Dateigeschrieben: /data.xml + /splitted
  39. 39. AnschließendmüssendiegeändertenDatennurnochinGitbzw.DVCübernommenwerden: $ git add data/.gitignore dvc.yaml $ git commit -m "Create split stage" $ dvc push
  40. 40. WerdennunmehrerePhasenmit dvc run erstellt,wobeidieAusgabeeinesKommandosals Abhängigkeiteinesanderenangegebenwird,entstehteineDVCPipeline.
  41. 41. 2. Phase: Parametrisierung
  42. 42. params.yaml mitfolgendemInhalt: max_features: 6000 ngram_range: lo: 1 hi: 2
  43. 43. 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
  44. 44. 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
  45. 45. 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
  46. 46. SchließlichmüssennochdiefolgendenDateienimGit-Repositoryaktualisiertwerden: dvc.lock dvc.yaml data/.gitignore $ git add dvc.lock dvc.yaml data/.gitignore
  47. 47. 3. Phase: Evaluation
  48. 48. berechnetdenWertfürdie (engl.:AUC (AreaUndertheCurve). dvc-example/src/evaluate.py FlächeunterderKurve
  49. 49. berechnetdenWertfürdie (engl.:AUC (AreaUndertheCurve). dvc-example/src/evaluate.py FlächeunterderKurve DabeiverwendetesdenTestdatensatz,ließtdieFeaturesaus features/test.pkl und erstelltdieMetrikdatei auc.metric .
  50. 50. 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:
  51. 51. 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
  52. 52. 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
  53. 53. Versuchsmetriken Mit dvc metrics show lassensichExperimenteüberverschiedeneBranchesundTags hinwegvergleichen:
  54. 54. Versuchsmetriken Mit dvc metrics show lassensichExperimenteüberverschiedeneBranchesundTags hinwegvergleichen: $ dvc metrics show auc.json: 0.514172
  55. 55. 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"
  56. 56. Pipelines anzeigen $ dvc dag +-------------------+ | data/data.xml.dvc | +-------------------+ * * * +-------+ | split | +-------+ * * * +-----------+ | featurize | +-----------+ ** ** ** * * **
  57. 57. +-------+ * | train | ** +-------+ * ** ** ** ** * * +----------+ | evaluate | +----------+ data/data.xml.dvc prepare.dvc featurize.dvc train.dvc evaluate.dvc
  58. 58. dvc dag --dot generierteine -.dot -Datei,diedannz.B.alsSVG-Datei gerendertwerdenkann: data/data.xml.dvc split featurize train evaluate Graphviz
  59. 59. Ergebnisse reproduzieren
  60. 60. 1. Code und Daten wiederherstellen
  61. 61. 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
  62. 62. 2. Ergebnisse reproduzieren
  63. 63. 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
  64. 64. 3. Parametrisieren
  65. 65. 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
  66. 66. DieÄnderungderParameterhattekeinenEinflussaufdasErgebnis. DVCerkenntÄnderungenanAbhängigkeitenundAusgabenüberdiemd5-Hashwerte,diein der dvc.lock -Dateigespeichertsind.
  67. 67. Zum Weiterlesen DVCimJupyter-Tutorial Documentation params GitRepository

×