Apprentissage du RNSR avec répartition géographique - essai avec DVC

@François Parmentier François Parmentier authored on 25 Jul
.dvc chore(dvc): Add a file to DVC 2 months ago
.vscode chore(vscode,dvc,yaml): Make DVC files YAML files 2 months ago
bin fix(dvc): Metrics where in an array 2 months ago
data feat(dvc.yaml): Reorganize dvc.yaml 2 months ago
dvc_plots chore(dvc): ModelSize: 10M instead of 4M 2 months ago
libs feat(params): Add getParam 2 months ago
.dvcignore chore(dvc): Initialize DVC in the repo 2 months ago
.gitignore feat: Add train-areas 2 months ago
README.md docs(dvc): Best explanation on experiment 2 months ago
dvc.lock chore(dvc): ModelSize: 10M instead of 4M 2 months ago
dvc.yaml feat(dvc): Change plots to simple 2 months ago
metrics.json chore(dvc): ModelSize: 10M instead of 4M 2 months ago
metrics.tsv chore(dvc): ModelSize: 10M instead of 4M 2 months ago
package-lock.json feat(params): Add getParam 2 months ago
package.json feat(params): Add getParam 2 months ago
params.yaml chore(dvc): ModelSize: 10M instead of 4M 2 months ago
plots_diff.png chore(dvc): Test modelsize 4M 2 months ago
precision.json chore(dvc): ModelSize: 10M instead of 4M 2 months ago
precision.tsv chore(dvc): ModelSize: 10M instead of 4M 2 months ago
README.md

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).

$ 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

$ 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:

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.

$ 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

C'est une page 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):

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:

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).

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.

$ 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>