Skip to content

Commit ffa67e0

Browse files
committed
📝 Update dvc section
1 parent dd826d6 commit ffa67e0

15 files changed

+841
-280
lines changed

.pre-commit-config.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ repos:
1818
types: [file]
1919
files: \.(yml|yaml|cff)$
2020
- id: check-added-large-files
21+
args: ['--maxkb=2048']
2122
- id: check-json
2223
types: [file] # override `types: [json]`
2324
files: \.(json|ipynb)$
23.6 KB
Loading
27.2 KB
Loading

docs/productive/dvc/dag.rst

Lines changed: 42 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,17 @@
55
Pipelines anzeigen
66
==================
77

8-
Solche Datenpipelines lassen sich anzeigen oder als Abhängigkeitsgraph
9-
darstellen mit ``dvc dag``:
8+
DVC stellt eine Pipeline intern als gerichtete azyklische Graphen (engl.: :abbr:`DAG (directed acyclic graphs)` dar.
9+
10+
.. seealso::
11+
`DVC DAG <https://dvc.org/doc/user-guide/pipelines/running-pipelines#dag>`_
12+
13+
Ihr könnt ``dvc dag`` verwenden, um Pipelines zu visualisieren oder zu
14+
exportieren:
1015

1116
.. code-block:: console
1217
13-
$ dvc dag
18+
$ uv run dvc dag
1419
1520
+-------------------+
1621
| data/data.xml.dvc |
@@ -40,12 +45,6 @@ darstellen mit ``dvc dag``:
4045
| evaluate |
4146
+----------+
4247
43-
data/data.xml.dvc
44-
prepare.dvc
45-
featurize.dvc
46-
train.dvc
47-
evaluate.dvc
48-
4948
* Mit ``dvc dag --dot`` kann auch eine ``.dot``-Datei für `Graphviz
5049
<https://www.graphviz.org>`_ generiert werden:
5150

@@ -63,3 +62,37 @@ darstellen mit ``dvc dag``:
6362
"featurize" -> "evaluate";
6463
"train" -> "evaluate";
6564
}
65+
66+
Mit ``dvc status`` könnt ihr euch anzeigen lassen, ob die Stufen oder lokale und
67+
entfernte Speicher geändert wurden:
68+
69+
.. code-block:: console
70+
71+
$ uv run dvc status
72+
evaluate:
73+
changed deps:
74+
modified: src/dvc_example/evaluate.py
75+
changed outs:
76+
modified: eval
77+
78+
.. seealso::
79+
`dvc status <https://man.dvc.org/status>`_
80+
81+
In :doc:`CI-Jobs <../git/advanced/gitlab/ci-cd/index>` soll üblicherweise
82+
überprüft werden, ob die Pipeline auf dem neuesten Stand ist, ohne etwas
83+
abzurufen oder auszuführen. Mit ``dvc repro --dry`` erfahrt ihr, welche
84+
Pipeline-Stufen ausgeführt werden müssten. Wenn jedoch Daten fehlen, schlägt der
85+
Befehl fehl. Wenn fehlende Daten ignoriert werden sollen, könnt ihr ``dvc repro
86+
--dry --allow-missing`` verwenden.
87+
88+
.. code-block:: console
89+
90+
$ uv run dvc repro --allow-missing --dry
91+
'data/data.xml.dvc' didn't change, skipping
92+
Stage 'prepare' didn't change, skipping
93+
Stage 'featurize' didn't change, skipping
94+
Stage 'train' didn't change, skipping
95+
Stage 'evaluate' is cached - skipping run, checking out outputs
96+
Running stage 'evaluate':
97+
> uv run python src/dvc_example/evaluate.py model.pkl data/features
98+
Use `dvc push` to send your updates to remote storage.

docs/productive/dvc/data.rst

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
.. SPDX-FileCopyrightText: 2020 Veit Schiele
2+
..
3+
.. SPDX-License-Identifier: BSD-3-Clause
4+
5+
Daten verwalten
6+
===============
7+
8+
Daten und Verzeichnisse hinzufügen
9+
----------------------------------
10+
11+
Mit DVC könnt ihr Dateien, ML-Modelle, Verzeichnisse und Zwischenergebnisse mit
12+
Git speichern und versionieren, ohne dass der Dateiinhalt in Git eingecheckt
13+
werden muss:
14+
15+
.. code-block:: console
16+
17+
$ uv run dvc get https://github.com/iterative/dataset-registry \
18+
get-started/data.xml -o data/data.xml
19+
$ uv run dvc add data/data.xml
20+
21+
Dies fügt die Datei :file:`data/data.xml` in :file:`data/.gitignore` hinzu und
22+
schreibt die Meta-Angaben in :file:`data/data.xml.dvc`.
23+
24+
.. seealso::
25+
`.dvc Files <https://dvc.org/doc/user-guide/project-structure/dvc-files>`_
26+
27+
Um nun verschiedene Versionen eurer Projektdaten mit Git verwalten zu können,
28+
fügt ihr nur :file:`data/.gitignore` und :file:`data/data.xml.dvc` hinzu:
29+
30+
.. code-block:: console
31+
32+
$ git add data/.gitignore data/data.xml.dvc
33+
$ git commit -m ":monocle_face: Add data to dvc"
34+
35+
.. seealso::
36+
`External Dependencies and Outputs
37+
<https://dvc.org/doc/user-guide/pipelines/external-dependencies-and-outputs>`_
38+
39+
Daten speichern und abrufen
40+
---------------------------
41+
42+
Die Daten können vom Arbeitsverzeichnis eures Git-Repository auf den entfernten
43+
Speicherplatz kopiert werden mit
44+
45+
.. code-block:: console
46+
47+
$ uv run dvc push
48+
49+
Falls ihr aktuellere Daten abrufen wollt, könnt ihr dies mit
50+
51+
.. code-block:: console
52+
53+
$ uv run dvc pull
54+
55+
Daten importieren und aktualisieren
56+
-----------------------------------
57+
58+
Alternativ zu ``dvc get`` könnt ihr auch Daten und Modelle aus einem anderen
59+
Projekts mit ``dvc import`` importieren, :abbr:`z. B. (zum Beispiel)`:
60+
61+
.. code-block:: console
62+
63+
$ uv run dvc import https://github.com/iterative/dataset-registry get-started/data.xml -o data/data.xml
64+
Importing 'get-started/data.xml (https://github.com/iterative/dataset-registry)' -> 'data/data.xml'
65+
66+
Dies lädt die Datei aus der `dataset-registry
67+
<https://github.com/iterative/dataset-registry>`_ in unser
68+
:file:`data`-Verzeichnis, fügt sie :file:`.gitignore` hinzu und erstellt
69+
:file:`data.xml.dvc`.
70+
71+
Mit ``dvc update`` könnt ihr diese Datenquellen aktualisieren, bevor ihr eine
72+
Pipeline reproduziert, die von diesen Datenquellen abhängt, :abbr:`z. B. (zum
73+
Beispiel)`:
74+
75+
.. code-block:: console
76+
77+
$ uv run dvc update data/data.xml.dvc
78+
'data/data.xml.dvc' didn't change, skipping
79+
80+
.. seealso::
81+
* `Discovering and accessing data
82+
<https://dvc.org/doc/user-guide/data-management/discovering-and-accessing-data>`_
83+
* `External Data
84+
<https://dvc.org/doc/user-guide/data-management/importing-external-data>`_
85+
86+
Daten löschen
87+
-------------
88+
89+
Wenn ihr Dateien oder Verzeichnisse aus der Verwaltung von DVC entfernen
90+
möchtet, könnt ihr dies mit `dvc remove
91+
<https://dvc.org/doc/command-reference/remove>`_:
92+
93+
.. code-block::
94+
95+
$ uv run dvc remove data/data.xml.dvc
96+
97+
Anschließend könnt ihr ``dvc gc -w`` verwenden, um alle Dateien und ihre
98+
früheren Versionen aus dem Cache zu löschen.
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
.. SPDX-FileCopyrightText: 2020 Veit Schiele
2+
..
3+
.. SPDX-License-Identifier: BSD-3-Clause
4+
5+
Experimente
6+
===========
7+
8+
Wenn ihr jetzt in der :file:`params.yaml`-Datei die Parameter ändert, könnt ihr
9+
euer aktuelles Arbeitsverzeichnis mit dem letzten Commit (``HEAD``) vergleichen:
10+
11+
.. code-block:: console
12+
13+
$ uv run dvc params diff
14+
Path Param HEAD workspace
15+
params.yaml featurize.max_features 100 200
16+
params.yaml featurize.ngrams 1 2
17+
18+
.. code-block:: console
19+
20+
$ uv run dvc metrics diff
21+
Path Metric HEAD workspace Change
22+
eval/metrics.json avg_prec.test 0.9014 0.925 0.0236
23+
eval/metrics.json avg_prec.train 0.95704 0.97437 0.01733
24+
eval/metrics.json roc_auc.test 0.93196 0.94602 0.01406
25+
eval/metrics.json roc_auc.train 0.97743 0.98667 0.00924
26+
27+
.. code-block:: console
28+
29+
$ uv run dvc plots diff
30+
file:///Users/veit/dvc-example/dvc_plots/index.html
31+
32+
.. raw:: html
33+
:file: plots-diff.html
34+
35+
``dvc exp``
36+
-----------
37+
38+
Mit `dvc exp <https://dvc.org/doc/command-reference/exp>`_ könnt ihr die
39+
Parameter auch in der Kommandozeile setzen, :abbr:`z. B. (zum Beispiel)`:
40+
41+
.. code-block:: console
42+
43+
$ uv run dvc exp run \
44+
--set-param 'featurize.max_features=200'
45+
46+
Ihr könnt mit einem Aufruf auch mehrere Parameter ändern:
47+
48+
.. code-block:: console
49+
50+
$ uv run dvc exp run \
51+
-S 'featurize.max_features=200' \
52+
-S 'featurize.ngrams=2'
53+
54+
Mit ``--queue`` lassen sich auch mehrere Werte für einen Parameter angeben:
55+
56+
.. code-block:: console
57+
58+
$ uv run dvc exp run --queue \
59+
-S 'featurize.max_features=200,300,400' \
60+
-S 'featurize.ngrams=2,3,4'
61+
Queueing with overrides '{'params.yaml': ['featurize.max_features=200', 'featurize.ngrams=2']}'.
62+
Queued experiment 'sober-name' for future execution.
63+
Queueing with overrides '{'params.yaml': ['featurize.max_features=200', 'featurize.ngrams=3']}'.
64+
Queued experiment 'erect-loir' for future execution.
65+
Queueing with overrides '{'params.yaml': ['featurize.max_features=200', 'featurize.ngrams=4']}'.
66+
Queued experiment 'tonic-hood' for future execution.
67+
Queueing with overrides '{'params.yaml': ['featurize.max_features=300', 'featurize.ngrams=2']}'.
68+
...
69+
70+
Um die Experimente besser identifizieren zu können, könnt ihr auch noch
71+
``--name`` angeben:
72+
73+
.. code-block:: console
74+
75+
$ uv run dvc exp run --name 'feature-matrix' --queue \
76+
-S 'featurize.max_features=200,300,400' \
77+
-S 'featurize.ngrams=2,3,4'
78+
Queueing with overrides '{'params.yaml': ['featurize.max_features=200', 'featurize.ngrams=2']}'.
79+
Queued experiment 'feature-matrix-1' for future execution.
80+
Queueing with overrides '{'params.yaml': ['featurize.max_features=200', 'featurize.ngrams=3']}'.
81+
Queued experiment 'feature-matrix-2' for future execution.
82+
...
83+
84+
Sobald ihr einige Experimente in die Queue gestellt habt, könnt ihr alle mit
85+
folgendem Befehl ausführen:
86+
87+
.. code-block:: console
88+
89+
$ uv run dvc exp run --run-all
90+
91+
Mit dem ``job``-Flag von ``dvc queue start`` könnt ihr auch mehrere Worker für
92+
die Experimente verwenden:
93+
94+
.. code-block:: console
95+
96+
$ uv run dvc queue start --job 8
97+
Started '8' new experiments task queue workers.
98+
99+
.. seealso::
100+
* `Get Started: Experimenting Using Pipelines
101+
<https://dvc.org/doc/start/experiments/experiment-pipelines>`_
102+
* `Running Experiments
103+
<https://dvc.org/doc/user-guide/experiment-management/running-experiments#the-experiments-queue>`_
104+
* `dvc queue <https://dvc.org/doc/command-reference/queue>`_

docs/productive/dvc/index.rst

Lines changed: 38 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
..
33
.. SPDX-License-Identifier: BSD-3-Clause
44
5-
Daten verwalten mit ``DVC``
6-
===========================
5+
Daten verwalten mit DVC
6+
=======================
77

88
Für Datenanalysen und vor allem bei Machine Learning ist es äußerst wertvoll,
99
verschiedene Versionen von Analysen, die mit verschiedenen Datensätzen und
@@ -18,29 +18,10 @@ entfernten Datenspeicher übertragen können. Hierdurch vereinfacht sich der Abr
1818
bestimmter Versionen von Daten um eine Analyse zu reproduzieren.
1919

2020
DVC wurde entwickelt, um :abbr:`ML (Machine Learning)`-Modelle und Datensätze
21-
gemeinsam nutzen zu können und nachvollziehbar zu verwalten. Es arbeitet zwar
22-
mit verschiedenen Versionsverwaltungen zusammen, benötigt diese jedoch nicht. Im
23-
Gegensatz :abbr:`z.B. (zum Beispiel)` zu `DataLad
24-
<https://www.datalad.org/>`_/`git-annex <https://git-annex.branchable.com/>`_
25-
ist es auch nicht auf Git als Versionsverwaltung beschränkt, sondern kann
26-
:abbr:`z.B (zum Beispiel)` auch zusammen mit Mercurial verwendet werden, siehe
27-
`github.com/crobarcro/dvc/dvc/scm.py
28-
<https://github.com/crobarcro/dvc/blob/master/dvc/scm.py>`_. Zudem nutzt es
29-
ein eigenes System zum Speichern der Dateien mit Unterstützung :abbr:`u.a.
30-
(unter anderem)` für :abbr:`SSH (Secure Shell)` und :abbr:`HDFS (Hadoop
31-
Distributed File System)`.
32-
33-
DataLad konzentriert sich hingegen mehr auf die Entdeckung und Verwendung von
34-
Datasets, die dann einfach mit Git verwaltet werden. DVC hingegen speichert
35-
jeden Schritt der Pipeline in einer separaten ``.dvc``-Datei, die dann durch
36-
Git verwaltet werden kann.
37-
38-
Diese ``.dvc``-Dateien erlauben jedoch praktische Tools zur Manipulation und
39-
Visualisierung von DAGs, siehe :abbr:`z.B. (zum Beispiel)` die
40-
:doc:`Visualisierung der DAGs <pipeline>`.
41-
42-
Schließlich lassen sich mit :ref:`dvc remote <dvc-remote>` auch externe
43-
Abhängigkeiten angeben.
21+
gemeinsam nutzen zu können und nachvollziehbar zu verwalten. Es nutzt ein
22+
eigenes System zum Speichern der Dateien mit Unterstützung :abbr:`u.a. (unter
23+
anderem)` für :abbr:`SSH (Secure Shell)` und :abbr:`HDFS (Hadoop Distributed
24+
File System)`.
4425

4526
.. tip::
4627
`cusy Seminar: Code und Daten versioniert und reproduzierbar speichern
@@ -51,6 +32,36 @@ Abhängigkeiten angeben.
5132
* `Documentation <https://dvc.org/doc>`_
5233
* `Git Repository <https://github.com/iterative/dvc>`_
5334

35+
Vergleich mit verwandten Technologien
36+
-------------------------------------
37+
38+
git-annex
39+
~~~~~~~~~
40+
41+
`git-annex <https://git-annex.branchable.com/>`_ konzentriert sich mehr auf die
42+
Entdeckung und Verwendung von Datensätzen, die dann einfach mit Git verwaltet
43+
werden. DVC hingegen speichert die Daten, die bei jeden Schritt der Pipeline
44+
erzeugt werden, in :file:`.dvc`-Dateien, die dann durch Git verwaltet werden
45+
kann. DVC stellt zudem praktische Tools zur Manipulation und Visualisierung von Daten-Pipelines bereit, siehe :abbr:`z.B. (zum Beispiel)` :doc:`dvc status
46+
<dag>`. Schließlich lassen sich mit :ref:`dvc remote <dvc-remote>` auch externe
47+
Abhängigkeiten angeben.
48+
49+
Workflow-Management-Systeme wie Airflow und Luigi
50+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
51+
52+
DVC konzentriert sich auf Data-Science-Workflows und Modellierung; daher sind
53+
DVC-Pipelines sehr viel leichtgewichtiger, einfacher zu erstellen und zu ändern
54+
als bei `Airflow <https://airflow.incubator.apache.org>`_ und `Luigi
55+
<https://luigi.readthedocs.io/en/stable/>`_. Allerdings fehlen DVC erweiterte
56+
Funktionen wie die Überwachung der Ausführung, Optimierung und Fehlertoleranz.
57+
Auch ist DVC ein reines Befehlszeilen-Tool ohne grafische Benutzeroberfläche und
58+
es führt auch keine Daemons oder Server aus. `CML <https://cml.dev>`_ versucht
59+
hier, einige der Lücken leichtgewichtig mit GitHub, GitLab oder Bitbucket zu
60+
schließen. DVC und CML eignen sich jedoch gut für iterative
61+
Machine-Learning-Prozesse; und wenn mit den beiden ein gutes Modell gefunden
62+
wurde, steht euch immer noch frei, die Pipeline in Luigi oder Airflow zu
63+
integrieren.
64+
5465
Installation
5566
------------
5667

@@ -83,9 +94,11 @@ Alternativ kann DVC auch über andere Paketmanager installiert werden:
8394
:hidden:
8495

8596
init
97+
data
8698
pipeline
8799
params
88100
metrics
101+
experiments
89102
dag
90103
reproduce
91104
integration

0 commit comments

Comments
 (0)