Skip to content

Commit e545a08

Browse files
TD22
1 parent 7469ba7 commit e545a08

File tree

1 file changed

+153
-0
lines changed

1 file changed

+153
-0
lines changed

TP2-DVC-2.md

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
# Utilisation de dvc pour controller les modèles et les données - P2
2+
## 1. Configurer un environnement virtuel sur `dag-demo`
3+
On va commencer pour faire `git pull` pour être surs d'avoir la bonne version.
4+
Ensuite, on va executer :
5+
```bash
6+
python -m venv ~/dag-demo
7+
```
8+
(Modifier selon l'emplacement du dossier dag-demo)
9+
et ensuite, on va activer l'environnement virtuel :
10+
```bash
11+
source ~/dag-demo/bin/activate
12+
```
13+
Maintenant, nous avons un environnement local pour installer des packages sans impacter l'environnement global.
14+
C'est obligatoire ? Non, on peut aussi installer dvc de manière globale.
15+
## 2. Installer dvc
16+
Exécutes
17+
```bash
18+
pip install dvc
19+
```
20+
C'est tout
21+
22+
## 3. Créer une nouvelle branche dans le projet
23+
Dans notre projet `dag-demo` executes :
24+
```bash
25+
git checkout -b first_experiment_ton_nom
26+
```
27+
## 4. Initialiser dvc
28+
Il faut vérifier que dvc est bien installé. Executes `dvc version` , si le résultat est quelque chose comme `dvc: command not found`, il faut installer dvc avec `pip`.
29+
Si tout est OK, on peut initialiser le repo dvc
30+
```bash
31+
dvc init
32+
```
33+
Ceci va créer la structure du projet dvc (quelque chose comme ça) :
34+
```bash
35+
.dvc
36+
├── config
37+
└── tmp
38+
├── btime
39+
├── dag.md
40+
├── exps
41+
│ ├── cache
42+
│ │ ├── 7e
43+
│ │ │ └── dd66472694ea6af8e8717a0376b742a4f5ca77
44+
│ │ ├── bf
45+
│ │ │ └── 11700ebcd3eaa526283c50879e969d594cac2b
46+
│ │ └── f3
47+
│ │ └── 79914dd12126bf88ce6df6980c6ba7b90007de
48+
│ └── celery
49+
│ ├── broker
50+
│ │ ├── control
51+
│ │ ├── in
52+
│ │ └── processed
53+
│ └── result
54+
├── updater
55+
└── updater.lock
56+
.dvcignore
57+
```
58+
Maintenant, nous allons configurer un stockage pour nos données. Nous allons utiliser un stockage local
59+
```bash
60+
mkdir -p ~/dvc-demo/remote_data_repo
61+
dvc remote add -d remote_storage ~/dvc-demo/remote_data_repo
62+
```
63+
Il s'appelle "remote" même si pour cette exemple il est local. DVC permet de configurer différents types de stockage, entre autres :
64+
- AWS S3
65+
- Google Cloud Storage
66+
- Azure Blob Storage
67+
- Google drive
68+
Vérifie le contenu du fichier config dans `.dvc`
69+
## 3. Ajouter les données au repo dvc
70+
Maintenant, nous allons tracker les données. Toujours dans la racine du projet exécutes :
71+
```bash
72+
dvc add data/raw/train
73+
dvc add data/raw/val
74+
```
75+
Maintenant, on va ajouter les fichiers dvc à git :
76+
```bash
77+
git add data/raw/.gitignore data/raw/train.dvc
78+
git add data/raw/val.dvc data/raw/.gitignore
79+
git add --all
80+
```
81+
On est prêts pour faire un commit git :
82+
```bash
83+
git commit -m "First data commit with dvc"
84+
```
85+
Et ensuite on peut *pusher* les données :
86+
```bash
87+
dvc push
88+
```
89+
Ceci va mettre les données dans notre stockage remote § 2.
90+
Finalement, push tout à git
91+
```bash
92+
git push --set-upstream origin first_experiment
93+
```
94+
Alors, on peut maintenant supprimer les données ?
95+
Oui, mais il faut faire attention a ne pas supprimer les fichiers dvc. Pour essayer :
96+
```bash
97+
rm -rf data/raw/val
98+
```
99+
Les données de validation sont supprimées du disque. On peut les récupérer depuis le cache :
100+
```bash
101+
dvc checkout app/data/raw/val.dvc
102+
```
103+
Si les données ne sont pas dans le cache, il faut utiliser `fecth` et ensuite `checkout`.
104+
## 4. On va ajouter le modèle au repo dvc
105+
On va ajouter des fichiers a dvc. D'abord les données d'entraînement :
106+
```bash
107+
dvc add data/prepared/train.csv data/prepared/test.csv
108+
git add -all
109+
git commit -m "Training and validation files created"
110+
```
111+
Ensuite, le modèle :
112+
```bash
113+
dvc add models/model.joblib
114+
git add --all
115+
git commit -m "Model trained using SGDClassifier"
116+
```
117+
Et finalement, le fichier d'accuracy :
118+
```bash
119+
git add metrics/accuracy.json
120+
git commit -m "Accuracy of SGDClassifier"
121+
```
122+
Maintenant, nous avons nos données et notre modèle contrôlées.
123+
Push
124+
```bash
125+
git pull # et ressoudre les conflits
126+
git push
127+
dvc push
128+
```
129+
130+
### 5. Changer les paramètres du modèle
131+
Crée une nouvelle branche :
132+
```bash
133+
git checkout -b "sgd-1000-iterations-ton_nom"
134+
```
135+
Modifie le code du `training.py` dans le dossier des DAGs (met par exemple `max_iter=1000`).
136+
Relance le DAG sur airflow.
137+
Une fois que le workflow est fini, on doit avoir une nouvelle version du modèle avec une accuracy changée.
138+
Commit sur dvc
139+
```bash
140+
dvc commit
141+
```
142+
Commit et push le code aussi avec git, fais
143+
```bash
144+
dvc push
145+
```
146+
## 6. Changer de branche
147+
Maintenant nous avons deux versions du modèle. On peut basculer entre les deux en utilisant la commande checkout de git et de dvc.
148+
```bash
149+
git checkout first_experiment_ton_nom
150+
dvc checkout
151+
```
152+
Comme ça, dvc va placer la version du modèle de la branche `first_experiment_ton_nom` dans notre volume.
153+
L'application continue à utiliser le modèle disponible dans le volume.

0 commit comments

Comments
 (0)