# rnsr-geo-ml-dvc Apprentissage du RNSR avec répartition géographique - essai avec DVC. Voir les travaux précédents: <https://gitbucket.inist.fr/parmentf/rnsr-ml>. ## DVC ### Initialisation La documentation de l'extension DVC de VSCode dit que pour initialiser le dépôt il faut taper `dvc exp init -i`, mais ça ne marche pas avec ma version de DVC (qui est apparemment plus récente que ce à quoi s'attend l'extension). ```bash $ dvc init Initialized DVC repository. You can now commit the changes to git. +---------------------------------------------------------------------+ | | | DVC has enabled anonymous aggregate usage analytics. | | Read the analytics documentation (and how to opt-out) here: | | <https://dvc.org/doc/user-guide/analytics> | | | +---------------------------------------------------------------------+ What's next? ------------ - Check out the documentation: <https://dvc.org/doc> - Get help and share ideas: <https://dvc.org/chat> - Star us on GitHub: <https://github.com/iterative/dvc> ``` Cette commande a créé: - `.dvcignore` - `.dvc` - `.gitignore` - `config` Alors que l'installation de l'extension VSCode a ajouté: - `.vscode` - `settings.json` Pour créer un remote, je tape `dvc remote add -d local /home/parmentf/data/dvc`. Il faut juste que le répertoire existe (et soit vide ou déjà consacré à ça). ### Ajout de fichier ```bash $ dvc add data/netscity-ville-aire-uniq.tsv 100% Adding...|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████|1/1 [00:00, 20.28file/s] To track the changes with git, run: git add data/netscity-ville-aire-uniq.tsv.dvc data/.gitignore To enable auto staging, run: dvc config core.autostage true ``` Donc, si on veut se simplifier la vie sur les ajouts suivants: ```bash dvc config core.autostage true ``` ### Stages Pour lancer un _pipeline_ en dehors d'une expérience (composé de plusieurs _stages_), il suffit de faire `dvc repro`. Les fichiers résultats `outs` d'un _stage_ (une étape) sont automatiquement ajoutés à DVC. ### Plots Même sans expérience, on peut comparer des... _runs_: après un `dvc repro`, on peut faire (à condition d'avoir configuré des `plots` et des `metrics`) `dvc metrics diff`, ou `dvc plots diff`. ```bash $ dvc metrics diff Path Metric HEAD workspace Change metrics.json max 0.76 0.828 0.068 metrics.json mean 0.28285 0.25927 -0.02358 metrics.json median 0.2155 0.21 -0.0055 metrics.json min 0.0356 0.0674 0.0318 ``` Le résultat d'un premier `dvc plots diff` (sur les 48 aires géographiques): ![dvc plots diff](plots_diff.png) C'est [une page HTML](dvc_plots/index.html) située dans le répertoire `dvc_plots`. ### Diagram `dvc dag --mermaid` (ou `dvc dag --md`) permet de visualiser ça (dans VSCode, il y a l'extension [Markdown Preview Mermaid Support](https://marketplace.visualstudio.com/items?itemName=bierner.markdown-mermaid)): ```mermaid flowchart TD node1["data/addresses-40-cnrs-rnsr-big-classes-test.txt.dvc"] node2["data/addresses-40-cnrs-rnsr-big-classes-train.txt.dvc"] node3["data/netscity-ville-aire-uniq.tsv.dvc"] node4["evaluate"] node5["extract-areas@test"] node6["extract-areas@train"] node7["prepare@test"] node8["prepare@train"] node9["split"] node10["train"] node1-->node7 node2-->node8 node3-->node7 node3-->node8 node5-->node10 node6-->node9 node6-->node10 node7-->node5 node7-->node9 node8-->node6 node8-->node9 node9-->node10 node10-->node4 ``` Et avec `dvc dag --outs --md`: ```mermaid flowchart TD node1["areas"] node2["data/addresses-40-cnrs-rnsr-big-classes-test.txt"] node3["data/addresses-40-cnrs-rnsr-big-classes-train.txt"] node4["data/area-address-test.tsv"] node5["data/area-address-train.tsv"] node6["data/areas-test.txt"] node7["data/areas-train.txt"] node8["data/netscity-ville-aire-uniq.tsv"] node9["metrics.json"] node10["models"] node11["precision.json"] node1-->node10 node2-->node4 node3-->node5 node4-->node1 node4-->node6 node5-->node1 node5-->node7 node6-->node10 node7-->node1 node7-->node10 node8-->node4 node8-->node5 node10-->node9 node10-->node11 ``` > **Note**: DAG signifie _Directed Acyclic Graph_ (ou [Graphe Orienté > Acyclique](https://fr.wikipedia.org/wiki/Graphe_orient%C3%A9_acyclique)). ## Aires géographiques Le `split` donne 100 aires géographiques, dont plus de 50 avec moins de 40 adresses. On les rassemble donc dans `areas/GatheredLittleAreas`, ce qui laisse 48 aires (dont celle-ci) avec au moins 40 (inclus) aires. ### Experiments Les _experiments_ sont un moyen de nommer et de retrouver des exécutions du _pipeline_. On en crée une en lançant `dvc exp run`. ```bash $ dvc exp run 'data/addresses-40-cnrs-rnsr-big-classes-train.txt.dvc' didn't change, skipping 'data/netscity-ville-aire-uniq.tsv.dvc' didn't change, skipping Stage 'prepare@train' didn't change, skipping Stage 'extract-areas@train' didn't change, skipping 'data/addresses-40-cnrs-rnsr-big-classes-test.txt.dvc' didn't change, skipping Stage 'prepare@test' didn't change, skipping Stage 'split' didn't change, skipping Stage 'extract-areas@test' didn't change, skipping Stage 'train' didn't change, skipping Stage 'evaluate' didn't change, skipping Reproduced experiment(s): exp-44136 Experiment results have been applied to your workspace. To promote an experiment to a Git branch run: dvc exp branch <exp> <branch> ```